Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem sich stetig addierende URL-Übergaben

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem sich stetig addierende URL-Übergaben

    Hallo Leute
    Ich hab ein kleines Problem.
    Ich hatte mir für eine "Seiten-Blätter-Funktion" ein wenig im Web schlau gemacht und was schönes gefunden. PHP downgeloadet, ein wenig was daran rumgeschraubt und den Quelltext auch (100%) verstanden - soweit so gut.
    Jetzt kommts:
    Meine Start-URL lautet ...info.php?info1=text2&info2=text2
    Zunächst hol ich mir via einer Funktion die aktuelle URL "info.php?info1=text2&info2=text2"
    PHP-Code:
    include("./inc/url_check.inc.php"); //einlesen der Funktion getCurrentUrl()

    $url getCurrentUrl();
    $pieces parse_url($url);
    $scheme $pieces['scheme']; // enthält "http"
    $host $pieces['host']; // enthält "www.example.com"
    $path $pieces['path']; // enthält "/dir/dir/file.php"
    $query_url $pieces['query']; // enthält "arg1=foo&arg2=bar"
    $fragment $pieces['fragment']; // ist leer, da getCurrentUrl() diesen Wert nicht zurückgibt 
    $filename substr(strrchr($path"/"), 1); //schneidet aus der Zeichenkette $path ab dem Zeichen "/" den Rest Weg 
    Jetzt schnapp ich mir die Funktion, die mir das Blättern erlaubt.
    PHP-Code:
    function navigationsLeiste($SitesComplete,$seiteAktuell,$extVariables,$query_url){



            
        
    // Die Menge der angezeigten Links für die Seiten werden errechnet 
        
    $NavCeil floor(NAV_LEISTE 2);
        
        
    // Eine Seite zurück oder zum Anfang nur anzeigen, wenn mindestens eine Seite zurück
        // geblättert werden kann 
        
    if($seiteAktuell 1){
            
    $string .= '<a href="?'.$query_url.'&site=1'.$extVariables.'"><<</a>&nbsp;&nbsp;';
            
    $string .= '<a href="?'.$query_url.'&site='.($seiteAktuell-1).$extVariables.'"><</a>&nbsp;&nbsp;';
        }
        
        
    // Baut die Seitennavigation aúf (1 2 3 4 5 6 ... n)
        
    for($x=$seiteAktuell-$NavCeil;$x<=$seiteAktuell+$NavCeil;$x++){
            
    // Alle Seitenzahlen vor und nach der aktuellen Seite verlinken
            
    if(($x>&& $x<$seiteAktuell) || ($x>$seiteAktuell && $x<=$SitesComplete))
                
    $string .= '<a href="?'.$query_url.'&site='.$x.$extVariables.'">'.$x.'</a>&nbsp;&nbsp;';
            
            
    // Die Seitenzahl der aktuellen Seite nicht verlinken
            
    if($x==$seiteAktuell)
                
    $string .= $x '&nbsp;&nbsp;';
        }
        
        
    // Eine Seite vor oder zum Ende nur anzeigen, wenn mindestens eine Seite weiter
        // geblättert werden kann 
        
    if($seiteAktuell $SitesComplete){
            
    $string .= '<a href="?'.$query_url.'&site='.($seiteAktuell+1).$extVariables.'">></a>&nbsp;&nbsp;';
            
    $string .= '<a href="?'.$query_url.'&site='.$SitesComplete.$extVariables.'">>></a>&nbsp;&nbsp;';
        }
        
        return 
    $string
    Tja, auch bis hier her soweit so gut. Jetzt nur noch die Funktion in die Website einpassen und aufrufen
    PHP-Code:
    // Die aktuell angeforderte Seite
    $seiteAktuell $_GET['site'] + 0;

    // Falls noch keine Seitenzahl übergeben wurde, den Wert auf die erste Seite setzen
    if(empty($seiteAktuell))
        {
        
    $seiteAktuell 1;
        }
        
    // Berechnet die nächsten Eintraege aus MAX_EINTRAEGE
    $start $seiteAktuell MAX_EINTRAEGE MAX_EINTRAEGE
    und noch weiter unten vom Quelltext nach der MYSQL-Abfrage
    PHP-Code:
    $contentWeb .= '<div align="center">'

    // Errechnet die kompletten Seiten
    $SitesComplete ceil($count_tabellenrequest MAX_EINTRAEGE);

    // Ergebnisseite x von y anzeigen
    $contentWeb .= 'Ergebnisseite ' $seiteAktuell ' von ' $SitesComplete '<br>';

    // Weitere Variablen den Seitenzahlem mit übergeben in Form:
    // &var1=wert1&var2=wert2
    $extVariables '&var1=wert1&var2=wert2';

    // Navigation mit in Ausgabe einfügen
    $contentWeb .= navigationsLeiste($SitesComplete,$seiteAktuell,$extVariables,$query_url); 

    $contentWeb .= '</div>';

    echo 
    $contentWeb
    Es funzt zwar im Ergebnis ganz gut, die Seite macht was sie soll!
    Aber leider wird jetzt von der jeweils neu generierten URL stetig der Variablenwert &var1=wert1&var2=wert2 hinzuaddiert. nach der ersten Abfrage lautet die URL
    info.php?info1=text2&info2=text2&var1=wert1&var2=w ert2
    und nach der Zeiten Abfragen eben
    info.php?info1=text2&info2=text2&var1=wert1&var2=w ert2&var1=wert1&var2=wert2
    3. Abfrage
    info.php?info1=text2&info2=text2&var1=wert1&var2=w ert2&var1=wert1&var2=wert2&var1=wert1&var2=wert2
    und so weiter.
    Ich zermartere mir grad mein Hirn.
    Wie kann ich das lösen.
    So ein misst!


  • #2
    Zitat von Zapper Beitrag anzeigen
    PHP-Code:
    $query_url $pieces['query']; 
    enthält $query_url
    Code:
    info1=text2&info2=text2
    oder
    Code:
    info1=text2&info2=text2&var1=wert1&var2=wert2
    ?

    Kommentar


    • #3
      Hilft das?

      PHP-Code:
      function uniqueQuery($query_url) {
          
      $query = array();
          
      parse_str($query_url$query);
          return 
      http_build_query($query);
      }

      echo 
      uniqueQuery("var1=1&var2=2&var1=1&var2=2&var=3").PHP_EOL;
      // Output: var1=1&var2=2&var=3 
      Neu bei PHP, lerne aktuell OOP

      Kommentar


      • #4
        Hey Leute.
        Ne, das hat so leider nicht geklappt.
        $query_url ist ein Array, das wiederum in die Bestandteile der URL zerlegt wird.
        Ich zeig jetzt mal analog zu meinem Beschriebenen Problem die (original) URL-Ausgabe aus meinem Quellcode. Bestimmt fällt gleich auf, was sich wiederholt und was nicht.
        Die sich wiederholenden URL-Schnipsel machen mir kopfzerbrechen. den Rest brauch ich ja für die Seitenübergabe.
        PHP-Code:
        index.php?s_id=14&m_id=18&site=2&var1=wert1&var2=wert2&site=1&var1=wert1&var2=wert2&site=2&var1=wert1&var2=wert2&site=1&var1=wert1&var2=wert2&site=2&var1=wert1&var2=wert2 
        Aussehen sollte nach jedem Aufruf der geblätterten Seite lediglich nur einmal das URL-Schnipsel ab "&site=1....", also so
        PHP-Code:
        index.php?s_id=14&m_id=18&site=2&var1=wert1&var2=wert2 
        Ich hoffe es ist jetzt etwas klarer, wo ich mit meinen kompliziert denkenden Hirnwindungen mich verrenne!

        Kommentar


        • #5
          Zitat von Zapper Beitrag anzeigen
          $query_url ist ein Array, das wiederum in die Bestandteile der URL zerlegt wird.

          danach ist es vermutlich ein assoziatives Array, du musst also dafür sorgen, dass "site" und alle anderen Werte, die in der Funktion hinzugefügt werden, die ursprünglichen Werte in diesem assoziativen Array überschreiben.


          allerdings sieht mir $query_url eher nach einem String aus.

          PHP-Code:
          $string .= '<a href="?'.$query_url.'&site=1'.$extVariables.'"><<</a>&nbsp;&nbsp;'
          an dieser Stelle beinhaltet $query_url bereits den Wert site=x. Diesen Wert musst du vorher entfernen, bevor du site=1 hinzufügst. Ebenso für die anderen Werte, die du mit $extVariables zufügst.

          Kommentar


          • #6
            Das sind Fehler, die man eigentlich sehr gut selber finden kann, wenn man sich daran hält:

            Richtig debuggen

            1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
            2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
            3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
            4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
            5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
            6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
            7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
            8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
            9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
            Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

            Kommentar


            • #7
              Danke uha für deine Unterstützung
              Punkt 1 bis 7 habe ich bereits abgearbeitet.
              hab sogar noch ein paar Zwischenpunkte eingeschoben - somit wäre ich ca bei Punkt 12
              Darum die Bitte an euch Profis. Könnt ihr mir helfen? Ich stehe mittlerweile völlig planlos und ratlos da!

              Kommentar


              • #8
                o.O

                steht doch schon alles da

                Kommentar


                • #9
                  Überarbeite deinen Quellcode. Berechne die meisten Dinge bereits im SQL-Query und erstelle eine ordentliche Ausgabe. Dein Quellcode ist unübersichtlich, kann an vielen Stellen verbessert werden und ist viel zu kompliziert geschrieben. Vereinfache und verbessere also deinen Quellcode und dein Problem sollte sich von selbst lösen.

                  Kommentar


                  • #10
                    Hab dir doch die Lösung schon gegeben...
                    Neu bei PHP, lerne aktuell OOP

                    Kommentar


                    • #11
                      Hey Leute!
                      Vielen Dank.
                      Mensch, ihr habt mir echt weitergeholfen.
                      @NewbieJoker - ich habs genauso getestet - nach 2 Anläufen hats auch geklappt.
                      Aber die Funktion hat mir dann an anderer Stelle wieder Schwierigkeiten gemacht.
                      Jetzt hab ichs nicht ganz so schön - aber zielführend gelöst.
                      Schauts euch an
                      PHP-Code:
                      if(preg_match("/&site=$seiteAktuell/"$query_url))
                              {
                              
                      $query_url str_replace("&site=$seiteAktuell"""$query_url);
                              } 
                      Ich schmeiß einfach alles aus meinem string raus was keine Miete zahlt ))
                      Ohmann, ob ich nochmal ein guter Programmierer werde - ich glaub nicht.
                      Aber ich bemüh mich wenigstens

                      Kommentar

                      Lädt...
                      X