Engin: Kontrolle über die URI für Ausklappmenu

Hi,

ich hab mir wieder mal was schönes zusammen geschustert, eine Art einfaches "Ausklapp Menu".

Man bekommt auf einer Seite Links angezeigt, wenn man jetzt auf einen Link klickt, klappen unter Menus auf,
das ist mittels isset/GET realisiert, man kann auch mehrere Menus auswählen und alle bleiben aufgeklappt,
wenn man aber jetzt _einen_ zuklappen möchte, klappen alle zu, desahlb die frage, wie bekomme ich die absolute Macht über die URI?

Hier mal Online bsp. wie es aussieht,

http://nimmet.de/beispiele/ausklapp-menu.php

Und hier der Relevante Code aufs nötigste gekürzt,

  
<?  
 if (isset($_GET['blastactionheroes'])) {  
echo '<li><a href="'.$_SERVER['PHP_SELF'].'?alben_a_bis_z&amp;buchstabe='.urlencode($_GET['buchstabe']).'">Blast Action Heroes</a>';  
# ist urlencode hier Richtig verwendet?  
echo    '<ul>  
      <li><span>Trackliste</span> </li>  
      <li><a href="#">*Wir sind back*</a></li>  
    </ul></li>';  
}  
else {  
echo '<li><a href="'.$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&blastactionheroes">Blast Action Heroes</a></li>';  
}  
?>  

Ich möchte das was jetzt ist, also das einzelne aufklappbar sind, auch rückwärts haben,
also das man einzelne ausblenden kann.

Ist das überhaupt über die URI lösbar oder muss hier eine Session ran oder ist der Ansatz komplett falsch?

Grüße aus H im R,
Engin

  1. Hi,

    ich hab mir wieder mal was schönes zusammen geschustert, eine Art einfaches "Ausklapp Menu".

    Man bekommt auf einer Seite Links angezeigt, wenn man jetzt auf einen Link klickt, klappen unter Menus auf,
    das ist mittels isset/GET realisiert, man kann auch mehrere Menus auswählen und alle bleiben aufgeklappt,

    Allerdings sind deine URLs nicht wirklich "schoen" -
    ausklapp-menu.php?&blastactionheroes&deluxesoundsystem

    • wenn du schon nur Parameter-Namen und keine zugehoerigen Werte verwendest (das normale Schema name=wert&name2=wert2), dann sollte aber doch zumindest das erste ?& kein ?&, sondern ein einfaches ? sein.

    wenn man aber jetzt _einen_ zuklappen möchte, klappen alle zu,

    Du musst natuerlich, wenn ich auf einen geoeffneten Menueeintrag klicke, um diesen wieder zu schliessen, im zugehoerigen Link die "Namen" der uebrigen Menuepunkte, die offen bleiben sollen, bereits drinstehen haben.

    Wenn ich also ueber obigen Aufruf von
    ausklapp-menu.php?blastactionheroes&deluxesoundsystem
    bereits die ersten beiden Menuepunkte geoeffnet habe, dann muss der Link, der den ersten wieder zuklappen soll, natuerlich wie lauten?

    ausklapp-menu.php?deluxesoundsystem

    desahlb die frage, wie bekomme ich die absolute Macht über die URI?

    Huh, wie meinen? :-)

    <?
    if (isset($_GET['blastactionheroes'])) {
    echo '<li><a href="'.$_SERVER['PHP_SELF'].'?alben_a_bis_z&amp;buchstabe='.urlencode($_GET['buchstabe']).'">Blast Action Heroes</a>';

      
    Wenn dieser Link lediglich zum Zuklappen dieses Menuepunktes sein soll - welche Bedeutung haben hier die zusaetzlichen Parameter alben\_a\_bis\_z und buchstabe?  
      
    Jedenfalls musst du an dieser Stelle natuerlich die Parameter fuer alle Menuepunkte, die "offen" bleiben sollen, ebenfalls einfuegen.  
      
    
    > # ist urlencode hier Richtig verwendet?  
      
    Da du hier einen Wert in den Kontext "URL" bringst, ja.  
      
    \*Eigentlich\* waere, da du anschliessend diesen Wert auch noch in den Kontext "HTML" bringst, noch ein htmlspecialchars angebracht - kann hier \*ausnahmesweise\* entfallen, da urlencode sowieso keine Zeichen mehr uebrig laesst, die in HTML eine Sonderbedeutung haetten.  
      
    
    > Ist das überhaupt über die URI lösbar  
      
    Theoretisch natuerlich schon.  
      
    
    > oder muss hier eine Session ran  
      
    Man koennte diskutieren, ob eine Session-Loesung eventuell "schoener" waere [1].  
    Wenn dein Menue mal zwei Dutzend Untermenues umfassen sollte, und ich die alle aufklappe - dann wuerde jeder einzelne Zuklapp-Link 23 (2\*12-1) Parameter fuer die Punkte, die offen bleiben sollen, enthalten ...  
    Das liesse sich sicherlich etwas schoener gestalten, wenn man sich in einer Session merkt, welche Punkte "offen" und welche "zu" sind, und dann nur \*einen\* Parameter uebergibt, um den aktuellen Zustand eines bestimmten Menuepunktes zu aendern.  
      
      
    [1] Sessions sind natuerlich in so fern per se "unschoen", dass sie bei fehlender Cookie-Unterstuetzung immer die Session-ID im URL mitschleppen. Und da Suchmaschinen generell keine Cookies unterstuetzen, tauchen die Session-IDs dann auch meist in deren Listings mit auf.  
      
    MfG ChrisB
    
    1. Hi ChrisB,

      • wenn du schon nur Parameter-Namen und keine zugehoerigen Werte verwendest (das normale Schema name=wert&name2=wert2), dann sollte aber doch zumindest das erste ?& kein ?&, sondern ein einfaches ? sein.

      Mein Fehler, an sich ist es ein ausklapp Menu im ausklapp Menu, hatte die erste aufzuklappende Funktion vergessen
      mit einzubauen.
      Ist jetzt korrigiert.

      Man muss erst Links eine Auswahl treffen, bevor man sich dann ein Album aufklappen lässt.
      Normalerweise hat jede Kategorie eine eigene Seite, daher sieht es jetzt Doof aus, wenn man direkt auf ein
      Album klickt.

      Wenn ich also ueber obigen Aufruf von
      ausklapp-menu.php?blastactionheroes&deluxesoundsystem
      bereits die ersten beiden Menuepunkte geoeffnet habe, dann muss der Link, der den ersten wieder zuklappen soll, natuerlich wie lauten?

      ausklapp-menu.php?deluxesoundsystem

      Bevor ich jetzt Anfang mit Kanonen auf Spatzen zu schiessen...Die einzige Möglichkeit die mir
      jetzt durch den kopf schiesst ist str_replace, also die URL auslesen,
      das Stück, das aus der URL entfernt
      werden soll mittels str_replace löschen und den Link generieren.

      Also bsp. weise, ich hab den Link

      ausklapp-menu.php?blastactionheroes&deluxesoundsystem

      und muss jetzt blastactionheroes entfernen, den halt mittels str_replace entfernen,
      oder denke ich zu kompliziert und das geht einfacher?

      desahlb die frage, wie bekomme ich die absolute Macht über die URI?
      Huh, wie meinen? :-)

      Da war für kurze Zeit der Größenwahn mit mir durchgegangen. :-))

      Wenn dieser Link lediglich zum Zuklappen dieses Menuepunktes sein soll - welche Bedeutung haben hier die zusaetzlichen Parameter alben_a_bis_z und buchstabe?

      Wie oben schon erwähnt, es sind eigentlich 2 ausklapp Geschichten, in letzter Zeit hab ich es mit den Klappen. :-)

      [1] Sessions sind natuerlich in so fern per se "unschoen", dass sie bei fehlender Cookie-Unterstuetzung immer die Session-ID im URL mitschleppen. Und da Suchmaschinen generell keine Cookies unterstuetzen, tauchen die Session-IDs dann auch meist in deren Listings mit auf.

      Ich probiere es erstmal ohne Session, ich bin ja froh, das ich das ganze soweit gekriegt hab, wie
      ich es hab. :-)

      Grüße aus H im R,
      Engin

      1. Hi ChrisB,

        Danke für den Hinweis, hast mich auf den Richtigen Pfad gelenkt. (hoffe ich zumindest)

        Habe es tatsächlich mit der str_ireplace Funktion hingekriegt.

        echo '<li><a href="'.$_SERVER['PHP_SELF'].'?'.str_ireplace("&blastactionheroes", "", $_SERVER['QUERY_STRING']).'">Blast Action Heroes</a>';

        Habe es auch schon Online, wie ist diese Lösung, ist das wirklich so unpraktikabel wie
        von Gunther erwähnt?
        Javasript für diese Geschichte ist ausgeschlossen, User die ohne Javascript
        unterwegs sind, möchte ich nicht ausschließen mit der Begründung "Pech gehabt".

        Zumal es für mich ein wichtiges Feature ist, _ich_ finde es nämlich schön. :-)

        Grüße aus H im R,
        Engin

        1. Hi,

          Habe es tatsächlich mit der str_ireplace Funktion hingekriegt.

          echo '<li><a href="'.$_SERVER['PHP_SELF'].'?'.str_ireplace("&blastactionheroes", "", $_SERVER['QUERY_STRING']).'">Blast Action Heroes</a>';

          Finde ich nicht so optimal.

          Du hast doch alle GET-Parameter in $_GET vorliegen - also warum nicht einfach das in einer Schleife durchlaufen, und daraus den neuen Querystring zusammensetzen?

          MfG ChrisB

          1. Hi ChrisB,

            Finde ich nicht so optimal.

            Mein Hühnerauge täuscht mich nie. :-)

            Du hast doch alle GET-Parameter in $_GET vorliegen - also warum nicht einfach das in einer Schleife durchlaufen, und daraus den neuen Querystring zusammensetzen?

            Ok, ich hab grade eine Denk Blockade, kannst du mir das ein wenig erläutern?

            Normalerweise Fantasiere ich gerne und manchmal kommt was bei rum, aber jetzt grade ist absolute
            Leere in meinem Kopf.

            Grüße aus H im R,
            Engin

            1. Hi,

              Du hast doch alle GET-Parameter in $_GET vorliegen - also warum nicht einfach das in einer Schleife durchlaufen, und daraus den neuen Querystring zusammensetzen?

              Ok, ich hab grade eine Denk Blockade, kannst du mir das ein wenig erläutern?

              $_GET - bekannt?
              Schleife - bekannt?

              Gut, loslegen:

              Nehmen wir an, du wuerdest folgenden Query-String uebergeben:
              ?menuepunkt1&menuepunkt2&menuepunkt3
              fuer den Aufruf einer Seite, auf der die Menuepunkte 1, 2 und 3 aufgeklappt sind.

              PHP macht daraus fuer dich Eintrage in $_GET mit den Indexnamen menuepunkt1, menuepunkt2 und menuepunkt3, sieht per print_r($_GET) so aus:

              Array
              (
                  [menuepunkt1] =>
                  [menuepunkt2] =>
                  [menuepunkt3] =>
              )

              (Werte haben diese Eintrage alle nicht, da du ja keine uebergibst.)

              Jetzt willst du den Link erstellen, der Menuepunkt 2 zuklappt - also muessen die Parameter fuer Punkt 1 und 3 im Resultat erhalten bleiben, und Nummer 2 fliegt raus.

              $newQueryString = '?';  
              $auszulassenderMenuePunkt = 'menuepunkt2'; // Bezeichner des Menuepunktes, der ausgelassen werden soll  
                
              foreach($_GET as $name => $value) { // $_GET durchlaufen  
                if($name != $auszulassenderMenuePunkt) { // pruefen, ob aktueller Eintrag auszulassen ist  
                  $newQueryString .= urlencode($name).'&'; // wenn nicht, zusammen mit nachfolgendem & anhaengen  
                }  
              }  
              $newQueryString = rtrim($newQueryString, '&'); // letztes, ueberfluessiges & wieder entfernen  
              $newQueryString = htmlspecialchars($newQueryString); // htmlspecialchars drauf anwenden, um aus den & fuer Verwendung im HTML-code &amp; zu machen
              

              ergibt: ?menuepunkt1&amp;menuepunkt3

              Funktion draus machen, der der auszulassende Menuepunkt als Parameter uebergeben wird - dann ganz einfach fuer jeden Link nach diesem Schema anwendbar.

              MfG ChrisB

              1. Hi ChrisB,

                erstmal Danke für deine Mühe.

                Funktion draus machen, der der auszulassende Menuepunkt als Parameter uebergeben wird - dann ganz einfach fuer jeden Link nach diesem Schema anwendbar.

                Jetzt sitz ich seit ungefähr Drei Stunden hier und guck mir die Datei an, hab auch
                ein Paar versuche gestartet,

                $auszulassenderMenuePunkt = 'blastactionheroes';

                diesen Punkt als Variable zu definieren, irgendwie weiss ich aber nichts damit anzufangen.

                Wenn ich es Original von dir übernehme Funktioniert es Hervorragend, endlich auch valides HTML, ich hatte
                die & nicht maskiert bekommen, aber wie mach ich daraus ne Funktion?

                  
                $newQueryString = '?';  
                $auszulassenderMenuePunkt = 'blastactionheroes';  
                ...  
                 if (isset($_GET['blastactionheroes'])) {  
                echo '<li><a href="'.$newQueryString.'">Blast Action Heroes</a>';
                

                So hab ich es jetzt erstmal für alle Links auf der Seite gemacht, das heisst jedes Album bekommt den selben Code, nur das sich ein Wort
                ändert.

                Ich hatte versucht, hier die Variable $auszulassenderMenuePunkt = $name; zu setzen, und
                bei den if (isset( abfragen den Wert von
                $name durch den Namen zu ersetzen, der da rein soll, funktioniert aber nicht.

                Funktion draus machen, der der auszulassende Menuepunkt als Parameter uebergeben wird

                Als Parameter hätte ich ja den Album Namen, der ja eh benötigt wird, um überhaupt aufzuklappen,
                aber wie übernehme ich diesen Paramter in deine Funktion?

                  
                $auszulassenderMenuePunkt = $name;  
                  
                 if (isset($_GET['deluxesoundsystem'])) {  
                $name == 'deluxesoundsystem';  
                echo '<li><a href="'.$newQueryString.'">Deluxe Sound System</a>';
                

                So z.b. geht es nicht, hab´s auch mit $value versucht und mit neu vergebenen  Variablen, alles Fruchtlos.

                Grüße aus H im R,
                Engin

                1. Mahlzeit,

                  hab auch ein Paar versuche gestartet,

                  $auszulassenderMenuePunkt = 'blastactionheroes';

                  diesen Punkt als Variable zu definieren, irgendwie weiss ich aber nichts damit anzufangen.

                  Ach, Engin ... das war doch BEISPIELCODE, was ChrisB gepostet hat. Ist es wirklich SO schwer, daraus eine Funktion zu machen, die Du in Deinem Skript verwenden kannst?

                  function QS($auszulassenderMenuePunkt) {  
                    $newQueryString = '?';  
                    
                    foreach($_GET as $name => $value) { // $_GET durchlaufen  
                      if($name != $auszulassenderMenuePunkt) { // pruefen, ob aktueller Eintrag auszulassen ist  
                        $newQueryString .= urlencode($name).'&'; // wenn nicht, zusammen mit nachfolgendem & anhaengen  
                      }  
                    }  
                    $newQueryString = rtrim($newQueryString, '&');  
                    $newQueryString = htmlspecialchars($newQueryString);  
                    return $newQueryString;  
                  }
                  

                  Und die rufst Du dann einfach z.B. per "echo QS($_GET['blastactionheroes']);" aufrufen.

                  So hab ich es jetzt erstmal für alle Links auf der Seite gemacht, das heisst jedes Album bekommt den selben Code, nur das sich ein Wort
                  ändert.

                  Das würde ich an Deiner Stelle SOFORT wieder ändern. Ansonsten wirst Du Dich selbst verfluchen, wenn Du später irgendwann was an der Funktionalität ändern willst und das dann in JEDEM Abschnitt durchführen musst. Genau dafür sind Funktionen und Prozeduren da!

                  Ich hatte versucht, hier die Variable $auszulassenderMenuePunkt = $name; zu setzen, und
                  bei den if (isset( abfragen den Wert von
                  $name durch den Namen zu ersetzen, der da rein soll, funktioniert aber nicht.

                  Hä? Was genau willst Du in welche Variable schreiben? Du weißt schon, dass die Variablennamen, die ChrisB benutzt hat, lediglich Schall und Rauch sind und Du den Code auch gern umschreiben oder eigene Variablennamen nutzen kannst?

                  Als Parameter hätte ich ja den Album Namen, der ja eh benötigt wird, um überhaupt aufzuklappen,
                  aber wie übernehme ich diesen Paramter in deine Funktion?

                  Schau noch mal ins PHP-Handbuch, Kapitel "Grundlagen" bzw. "Wie baue ich eine Funktion?" ...

                  $auszulassenderMenuePunkt = $name;

                  if (isset($_GET['deluxesoundsystem'])) {
                  $name == 'deluxesoundsystem';
                  echo '<li><a href="'.$newQueryString.'">Deluxe Sound System</a>';

                  
                  >   
                  > So z.b. geht es nicht, hab´s auch mit $value versucht und mit neu vergebenen  Variablen, alles Fruchtlos.  
                    
                  Ähm. Bitte VOLLSTÄNDIGEN Code, keine zusammenhanglosen Schnipsel. Und das Variablen erst dann Inhalte besitzen, wenn letztere ersteren zugewiesen wurden usw., weißt Du?  
                    
                    
                  MfG,  
                  EKKi  
                  
                  -- 
                  sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                  
                  1. Hi EKKi,

                    Ach, Engin ... das war doch BEISPIELCODE, was ChrisB gepostet hat. Ist es wirklich SO schwer, daraus eine Funktion zu machen, die Du in Deinem Skript verwenden kannst?

                    JA :(

                    Und die rufst Du dann einfach z.B. per "echo QS($_GET['blastactionheroes']);" aufrufen.

                    Selbst dafür bin ich zu ... siehe unten

                    Ansonsten wirst Du Dich selbst verfluchen, wenn Du später irgendwann was an der Funktionalität ändern willst und das dann in JEDEM Abschnitt durchführen musst

                    Das weiss ich, sonst würde ich garnicht erst dran sitzen und weiter fummeln.
                    Funktionieren tut es ja schon seit einigen Stunden.

                    Du weißt schon, dass die Variablennamen, die ChrisB benutzt hat, lediglich Schall und Rauch sind und Du den Code auch gern umschreiben oder eigene Variablennamen nutzen kannst?

                    Das weiss ich, hatte auch nur die Variablen genommen, weil die schon da waren,
                    es ging mir nur ums testen.

                    Schau noch mal ins PHP-Handbuch, Kapitel "Grundlagen" bzw. "Wie baue ich eine Funktion?" ...

                    Das werde ich die Tage auf jedenfall machen, mittlerweile habe ich ja wenigstens ein bisschen Basis Wissen,
                    da versteht es sich leichter was man da liest.

                    Ähm. Bitte VOLLSTÄNDIGEN Code, keine zusammenhanglosen Schnipsel.

                    <?  
                    function QS($auszulassenderMenuePunkt) {  
                      $newQueryString = '?';  
                      
                      foreach($_GET as $name => $value) { // $_GET durchlaufen  
                        if($name != $auszulassenderMenuePunkt) { // pruefen, ob aktueller Eintrag auszulassen ist  
                          $newQueryString .= urlencode($name).'&'; // wenn nicht, zusammen mit nachfolgendem & anhaengen  
                        }  
                      }  
                      $newQueryString = rtrim($newQueryString, '&');  
                      $newQueryString = htmlspecialchars($newQueryString);  
                      return $newQueryString;  
                    }  
                      
                     if (isset($_GET['blastactionheroes'])) {  
                      
                    echo '<li><a href="'.$newQueryString.QS($_GET['blastactionheroes']).'">Blast Action Heroes</a>';  
                    echo    '<ul>  
                          <li><span>Trackliste</span> </li>  
                          <li><a href="#">*Wir sind back*</a></li>  
                          <li><a href="#">*Musik*</a></li>  
                          <li><a href="#">*Hamburg City*</a></li>  
                        </ul></li>';  
                    }  
                    else {  
                    echo '<li><a href="'.$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&amp;blastactionheroes">Blast Action Heroes</a></li>';  
                    }  
                    ?>
                    

                    Nicht mal Copy&Paste krieg ich auf die Reihe, vielleicht liegt es aber an der Müdigkeit, sitz schon wieder seit 9 Stunden
                    vor dem Monitor.

                    Und das Variablen erst dann Inhalte besitzen, wenn letztere ersteren zugewiesen wurden usw., weißt Du?

                    Das hatte ich mir irgendwie schon gedacht, ganz Sicher war ich mir aber nicht.

                    Danke für dein Hilfe, ich leg erst mal ne Pause ein und schau mir das Heute Abend nochmal an.

                    Grüße aus H im R,
                    Engin

                    1. Hi ChrisB, hi EKKi,

                      ich gib auf, sitz schon seit Stunden und krieg es nicht auf die Kette, habe es jetzt
                      einfach für meine bedürfnisse angepasst und sollte auch so reichen. Da die einzusetzenden Namen aus der DB geholt werden
                      lass ich die Funktion für jeden Namen einmal aufrufen mit jeweils dem neuen Namen.

                      $interpret_name = 'Was auch immer';  
                      $interpret_name_url = $interpret_name;  
                      $interpret_name_url = trim($interpret_name_url);  
                      $interpret_name_url = preg_replace("/\s+/", "", $interpret_name_url);  
                        
                      $newQueryString = '?';  
                      $auszulassenderMenuePunkt = $interpret_name_url;  
                        
                      foreach($_GET as $name => $value) {  
                        if($name != $auszulassenderMenuePunkt) {  
                          $newQueryString .= urlencode($name).'&';  
                        }  
                      }  
                      $newQueryString = rtrim($newQueryString, '&');  
                      $newQueryString = htmlspecialchars($newQueryString);  
                        
                       if (isset($_GET[$interpret_name_url])) {  
                      echo '<li><a href="'.$newQueryString.'#'.$interpret_name_url.'" name="'.$interpret_name_url.'">'.$interpret_name.'</a>';  
                      echo    '<ul>  
                              <li><span>Album</span> <a href="#">*album1*</a></li>  
                            <li><span>Album</span> <a href="#">*album2*</a></li>  
                            <li> <span><a href="#">*Texte ohne Album Titel*</a></span></li>  
                            </ul></li>';  
                      }  
                      else {  
                      echo '<li><a href="'.$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&amp;'.$interpret_name_url.'#'.$interpret_name_url.'" name="'.$interpret_name_url.'">'.$interpret_name.'</a></li>';  
                      }
                      

                      Danke für die Hilfe, besonders Chris für den Code.

                      Grüße aus H im R,
                      Engin

                      1. Mahlzeit,

                        ich gib auf, sitz schon seit Stunden und krieg es nicht auf die Kette,

                        Du kennst die Tipps für Fragende - WAS GENAU kriegst Du nicht auf die Kette?

                        lass ich die Funktion für jeden Namen einmal aufrufen mit jeweils dem neuen Namen.

                        Ich sehe in Deinem Code keine Funktion!

                        $auszulassenderMenuePunkt = $interpret_name_url;

                        Ich habe das Gefühl, dass Du wirklich überhaupt nicht weißt, was Du tust. Wieso kopierst Du den Wert von $interpret_name_url in eine neue Variable $auszulassenderMenuePunkt? Welchen Sinn soll das haben? Du kannst in Deiner Schleife doch auch die vorhandene Variable zum Vergleich nutzen ...

                        foreach($_GET as $name => $value) {
                          if($name != $auszulassenderMenuePunkt) {

                        if ($name != $interpret_name_url) {

                        $newQueryString .= urlencode($name).'&';
                          }
                        }
                        $newQueryString = rtrim($newQueryString, '&');
                        $newQueryString = htmlspecialchars($newQueryString);

                        Und wieso lagerst Du diesen Teil des Codes, den Du jetzt anscheinend jedesmal, wenn Du ihn benötigst (und wie ich Dich verstanden habe, ist das einige Male pro Seite), einfach stumpf kopierst, nicht in eine allgemein gehaltene Funktion aus? Glaub mir: selbst DU willst Deinen Code in einem Vierteljahr nicht mehr sehen, geschweige denn warten!

                        echo '<li><a href="'.$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&amp;'.$interpret_name_url.'#'.$interpret_name_url.'" name="'.$interpret_name_url.'">'.$interpret_name.'</a></li>';

                        Mal ne grundsätzliche Frage: wieso nutzt Du nicht ganz einfach die klassische und lange und alt bewährte Funktionalität von GET-Parametern, in Du sie so aufrufst: name=wert

                        MfG,
                        EKKi

                        --
                        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                        1. Hi EKKi,

                          Du kennst die Tipps für Fragende - WAS GENAU kriegst Du nicht auf die Kette?

                          Ich krieg das, was Chris geschrieben hat nicht in eine Funktion untergebracht.

                          Eine Funktion, die Pro Seite je nach Auswahl 20 - 30 oder 50 mal aufgerufen werden soll.

                          Ich sehe in Deinem Code keine Funktion!

                          Ist ja auch nicht meiner. :-)
                          Das, was Chris angefertigt hat ist doch eine/keine Funktion!?

                          Ich habe das Gefühl, dass Du wirklich überhaupt nicht weißt, was Du tust.

                          Das kann ich bestätigen.

                          Wieso kopierst Du den Wert von $interpret_name_url in eine neue Variable $auszulassenderMenuePunkt? Welchen Sinn soll das haben? Du kannst in Deiner Schleife doch auch die vorhandene Variable zum Vergleich nutzen ...

                          Stimmt, da hatte ich nicht weiter gedacht, Danke für den Hinweis, hab ich jetzt so gemacht. Da war auch noch

                          echo '<li><a href="'.$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&amp;'.$interpret_name_url.'"  
                            
                          wo ich jetzt  
                            
                          echo '<li><a href="'.$newQueryString.'&amp;'.$album_name_url.'"  
                          
                          

                          draus gemacht hab.

                          Und wieso lagerst Du diesen Teil des Codes, den Du jetzt anscheinend jedesmal, wenn Du ihn benötigst (und wie ich Dich verstanden habe, ist das einige Male pro Seite), einfach stumpf kopierst, nicht in eine allgemein gehaltene Funktion aus?

                          Und genau das kriege ich nicht auf die Kette. Oder nicht gebacken oder nicht hin.

                          Mal ne grundsätzliche Frage: wieso nutzt Du nicht ganz einfach die klassische und lange und alt bewährte Funktionalität von GET-Parametern, in Du sie so aufrufst: name=wert

                          Für diesen Zweck reicht das ja mit nur name=, denke ich mal.

                          Grüße aus H im R,
                          Engin

                          1. Mahlzeit,

                            Ich krieg das, was Chris geschrieben hat nicht in eine Funktion untergebracht.

                            Ich hatte Dir doch auch ein Beispiel gepostet, wie Du das, was ChrisB vorgeschlagen hat, in eine Funktion kapseln könntest. Anpassen auf Deine individuellen Bedürfnisse (Ein- und Ausgabeparameter, Rückgabewert usw.) musst Du das natürlich selbst.

                            Das, was Chris angefertigt hat ist doch eine/keine Funktion!?

                            Nein. Aber im Prinzip kannst Du das, was er geschrieben hat, einfach in eine Funktion schreiben, die Parameter und Variablen etwas anpassen und fertig. Und komm ja nicht auf die Idee, andere globale Variablen außer die von PHP bereitgestellten $_GET, $_POST, $_SESSION o.ö. zu benutzen! ;-)

                            Und wieso lagerst Du diesen Teil des Codes, den Du jetzt anscheinend jedesmal, wenn Du ihn benötigst (und wie ich Dich verstanden habe, ist das einige Male pro Seite), einfach stumpf kopierst, nicht in eine allgemein gehaltene Funktion aus?

                            Und genau das kriege ich nicht auf die Kette. Oder nicht gebacken oder nicht hin.

                            Ja, dann lies halt die entsprechenden Kapitel bzw. Artikel im PHP-Handbuch, bei http://www.php.net/ oder auf der allwissenden Müllhalde nach. So schwer ist das wirklich nicht. Funktionen definieren und benutzen ist in fast jeder Programmiersprache, die ich kenne, sehr ähnlich und relativ einfach.

                            Und zum Thema "kriege ich nicht auf die Kette": Du weißt, dass das keine aussagekräftige Fehlermeldung bzw. Problembeschreibung ist? Wieso zeigst Du uns nichtmal das, was Du aus ChrisBs und meinen Vorschlägen gebastelt hast? Alternativ kannst mir auch gerne ne Glaskugel schicken ...

                            MfG,
                            EKKi

                            --
                            sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                            1. Hi EKKi,

                              Ich hatte Dir doch auch ein Beispiel gepostet, wie Du das, was ChrisB vorgeschlagen hat, in eine Funktion kapseln könntest. (Ein- und Ausgabeparameter, Rückgabewert usw.) musst Du das natürlich selbst.

                              Mit deinem bsp. kam ich überhaupt nicht weiter, bzw. weiss ich nicht, was ich damit machen soll.

                              Und komm ja nicht auf die Idee, andere globale Variablen außer die von PHP bereitgestellten $_GET, $_POST, $_SESSION o.ö. zu benutzen! ;-)

                              Bei meinen unzähligen Versuchen Gestern und Heute Nacht ist das sicherlich schon des öfteren passiert. :-) (unbewusst natürlich:)

                              Ja, dann lies halt die entsprechenden Kapitel bzw. Artikel im PHP-Handbuch, bei http://www.php.net/

                              Bis ich da durch bin sind Songtext Seiten wieder Out.

                              oder auf der allwissenden Müllhalde nach. So schwer ist das wirklich nicht.

                              Die allwissende Müllhalde hat mich eh als Dauer Gast, mittlerweile kenn ich die Ergebnisse,
                              die ich zu meinen Suchbegriffen finde auswendig.  *G

                              Und zum Thema "kriege ich nicht auf die Kette": Du weißt, dass das keine aussagekräftige Fehlermeldung bzw. Problembeschreibung ist?

                              Ich wollte erst funzt[TM] nicht schreiben, ist aber zu ausgelutscht.

                              Wieso zeigst Du uns nichtmal das, was Du aus ChrisBs und meinen Vorschlägen gebastelt hast?

                              Der derzeitige Stand der Dinge: (aber nicht lachen) (hat sich auch nicht Sonderlich viel getan)

                              $album_name = 'Blast Action Heroes';  
                              $album_name_url = $album_name;  
                              $album_name_url = trim($album_name_url);  
                              $album_name_url = preg_replace("/\s+/", "", $album_name_url);  
                                
                              $newQueryString = '?';  
                              foreach($_GET as $name => $value) {  
                                if($name != $album_name_url) {  
                                  $newQueryString .= urlencode($name).'&';  
                                }  
                              }  
                              $newQueryString = rtrim($newQueryString, '&');  
                              $newQueryString = htmlspecialchars($newQueryString);  
                                
                               if (isset($_GET[$album_name_url])) {  
                                
                              echo '<li><a href="'.$newQueryString.'#'.$album_name_url.'" name="'.$album_name_url.'">'.$album_name.'</a>';  
                                
                              echo    '<ul>  
                                    <li><span>Trackliste</span> </li>  
                                    <li><a href="#">*Wir sind back*</a></li>  
                                    <li><a href="#">*Musik*</a></li>  
                                    </ul></li>';  
                              }  
                              else {  
                              echo '<li><a href="'.$newQueryString.'&amp;'.$album_name_url.'#'.$album_name_url.'" name="'.$album_name_url.'">'.$album_name.'</a></li>';  
                              }  
                              
                              

                              Alternativ kannst mir auch gerne ne Glaskugel schicken ...

                              Hab leider nur die eine.

                              Grüße aus H im R,
                              Engin

                              1. Mahlzeit,

                                Mit deinem bsp. kam ich überhaupt nicht weiter, bzw. weiss ich nicht, was ich damit machen soll.

                                Hm. Und wieso schreibst Du das nicht gleich? :-)

                                Wieso zeigst Du uns nichtmal das, was Du aus ChrisBs und meinen Vorschlägen gebastelt hast?

                                Der derzeitige Stand der Dinge: (aber nicht lachen) (hat sich auch nicht Sonderlich viel getan)

                                Ich meinte zwar eigentlich Deine(n) Versuch(e), eine Funktion zu implementieren, aber gut. Ich versuche dann mal, Deinen Code anzupassen (mittels der Schleife von ChrisB):

                                  
                                // Erstmal definieren wir uns eine Funktion, der Du einfach den  
                                // auszulassenden Menüpunkt als String übergibst und die als  
                                // Rückgabe den fertigen neuen QueryString liefern soll  
                                function buildQueryString($auszulassenderMenuePunkt = '') {  
                                  $ret = '?'; // Rückgabewert initialisieren  
                                  
                                  foreach($_GET as $name => $value) { // $_GET durchlaufen  
                                    if ($name != $auszulassenderMenuePunkt) { // pruefen, ob aktueller Eintrag auszulassen ist  
                                      $ret .= urlencode($name).'&'; // wenn nicht, zusammen mit nachfolgendem & anhaengen  
                                    }  
                                  }  
                                  
                                  $ret = rtrim($ret, '&'); // letztes, ueberfluessiges & wieder entfernen  
                                  $ret = htmlspecialchars($ret); // htmlspecialchars drauf anwenden, um aus den & fuer Verwendung im HTML-code &amp; zu machen  
                                  return $ret; // Rückgabewert zurückgeben  
                                }  
                                  
                                // Jetzt kommt Dein bisheriger Code  
                                  
                                $album_name = 'Blast Action Heroes';  
                                $album_name_url = $album_name;  
                                $album_name_url = trim($album_name_url);  
                                $album_name_url = preg_replace("/\s+/", "", $album_name_url);  
                                  
                                // Hier wird der Variablen $newQueryString der neue QueryString  
                                // in Abhängigkeit vom ausgewählten Albumnamen zugewiesen  
                                $newQueryString = buildQueryString($album_name_url);  
                                  
                                if (isset($_GET[$album_name_url])) {  
                                  echo '<li><a href="'.$newQueryString.'#'.$album_name_url.'" name="'.$album_name_url.'">'.$album_name.'</a>';  
                                  echo '<ul><li><span>Trackliste</span></li>';  
                                  echo '<li><a href="#">*Wir sind back*</a></li>';  
                                  echo '<li><a href="#">*Musik*</a></li>';  
                                  echo '</ul></li>';  
                                } else {  
                                  echo '<li><a href="'.$newQueryString.'&amp;'.$album_name_url.'#'.$album_name_url.'" name="'.$album_name_url.'">'.$album_name.'</a></li>';  
                                }
                                

                                Und jetzt die Frage: WAS GENAU funktioniert daran nicht?

                                MfG,
                                EKKi

                                --
                                sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                                1. Hi EKKi,

                                  Hm. Und wieso schreibst Du das nicht gleich? :-)

                                  Ich kürze das immer ab auf "ich krieg´s nicht auf die Kette"  :) (Wegen Semantik und so :)

                                  Ich meinte zwar eigentlich Deine(n) Versuch(e), eine Funktion zu implementieren, aber gut. Ich versuche dann mal, Deinen Code anzupassen (mittels der Schleife von ChrisB):

                                  Beim basteln und machen gehen bis auf die letzten 3 versuche alle verloren, ich lösch und schreib
                                  und vergesse meistens kopien zu machen.
                                  Wobei ich bei dem versuch, die Funktion zu bauen fast nichts hingekriegt hab, ich wusste ja garnicht, was ich da machen soll.

                                  // Erstmal definieren wir uns eine Funktion, der Du einfach den
                                  // auszulassenden Menüpunkt als String übergibst und die als
                                  // Rückgabe den fertigen neuen QueryString liefern soll
                                  function buildQueryString($auszulassenderMenuePunkt = '') {
                                    $ret = '?'; // Rückgabewert initialisieren

                                  foreach($_GET as $name => $value) { // $_GET durchlaufen
                                      if ($name != $auszulassenderMenuePunkt) { // pruefen, ob aktueller Eintrag auszulassen ist
                                        $ret .= urlencode($name).'&'; // wenn nicht, zusammen mit nachfolgendem & anhaengen
                                      }
                                    }

                                  $ret = rtrim($ret, '&'); // letztes, ueberfluessiges & wieder entfernen
                                    $ret = htmlspecialchars($ret); // htmlspecialchars drauf anwenden, um aus den & fuer Verwendung im HTML-code &amp; zu machen
                                    return $ret; // Rückgabewert zurückgeben
                                  }

                                    
                                  
                                  > Und jetzt die Frage: WAS GENAU funktioniert daran nicht?  
                                    
                                  Das ist unfair, ich hatte noch gar keine Zeit zu sagen das daß nicht funktioniert.  
                                    
                                  Jetzt, nachdem ich es getestet habe, würde ich das auch garnicht erst tun. :-)  
                                    
                                  `$newQueryString = buildQueryString($album_name_url);`{:.language-php}  
                                    
                                  Über diese Zeile bin ich wohl gestolpert, die hatte ich bei meinen Versuchen nicht.  
                                    
                                  Danke vielmals.  
                                    
                                  Grüße aus H im R,  
                                  Engin  
                                  
                                  -- 
                                  [Von wegen "Geld wächst nicht auf Bäumen"!](http://nimmet.de/nimmet-dateien/GeldAufBaum)  
                                    
                                  ![](http://nimmet.de/nimmet-bilder/valigator.gif)[Der Valligator](http://old.atomic-eggs.com/old_forum/messages/237.html#a1)  
                                    
                                  ["Computer sagt Nein"](http://www.comedycentral.de/index.php/Video/Detail/vid/541168/playerMode/fullscreen)
                                  
                                  1. Hi,

                                    $newQueryString = buildQueryString($album_name_url);

                                    Über diese Zeile bin ich wohl gestolpert, die hatte ich bei meinen Versuchen nicht.

                                    Na ja, wenn du Code in eine Funktion auslagerst, musst du die Funktion schon auch *aufrufen*, damit dieser Code ausgefuehrt wird ... :-)

                                    MfG ChrisB

                                    1. Hi ChrisB,

                                      Na ja, wenn du Code in eine Funktion auslagerst, musst du die Funktion schon auch *aufrufen*, damit dieser Code ausgefuehrt wird ... :-)

                                      Auch auf die Gefahr hin, jetzt lacher zu ernten,

                                      mein erster Versuch mit EKKIs beispiel, (nur ungefähr, die Originale habsch nicht mehr gefunden)

                                      function QS($auszulassenderMenuePunkt) {  
                                       $newQueryString = '?';  
                                        foreach($_GET as $name => $value) { // $_GET durchlaufen  
                                         if($name != $auszulassenderMenuePunkt) { // pruefen, ob aktueller Eintrag auszulassen ist  
                                          $newQueryString .= urlencode($name).'&'; // wenn nicht, zusammen mit nachfolgendem & anhaengen  
                                          }  
                                       }  
                                        $newQueryString = rtrim($newQueryString, '&');  
                                        $newQueryString = htmlspecialchars($newQueryString);  
                                       return $newQueryString;  
                                      }
                                      

                                      und dann Funktion aufrufen

                                       if (isset($_GET['deluxesoundsystem'])) {  
                                      $name == 'deluxesoundsystem';  
                                      echo '<li><a href="'.$newQueryString.QS($_GET['deluxesoundsystem']).'">Deluxe Sound System</a>';
                                      

                                      Das hat natürlich _nicht_ funktioniert.

                                      Grüße aus H im R,
                                      Engin

  2. Hi,

    ich hab mir wieder mal was schönes zusammen geschustert, eine Art einfaches "Ausklapp Menu".

    also mir erscheint der ganze Ansatz wenig praktikabel. Denn neben den bereits von Chris aufgezeigten Schwierigkeiten, kommen ja noch weitere hinzu.

    So ist jedes "Aufklappen" ein neuer Seitenaufruf, was sich zum einen extrem negativ auf die History auswirkt, und zum anderen steht die Seite jedes Mal wieder am Seitenanfang, was auch wenig benutzerfreundlich ist.

    Also ich sehe hier wohl eher den klassischen Javascript-Ansatz (mit Cookies) als Favorit für solche Zwecke an.

    Schließlich stellt es ja eine Form von "Mehrwert" für den User dar, und wer darauf verzichtet (JS/ Cookies deaktiviert) ist eben selber schuld. Allerdings resultieren dann daraus keine Nachteile (sieh Punkt mit Suchmaschinen) für die eigentliche Seite.

    Gruß Gunther

  3. Hi,

    mal ne ganz Doofe frage nebenbei.

    Ich bekomme aus meiner DB aus einer Tabellenspalte '4' durch Komma getrennte Zahlen,
    diese pack ich dann in ein array um sie mir mit array_sum addieren zu  lassen, nur
    gibt mir das array statt int die Zahlen als string zurück.
    Kann ich dem array irgendwie sagen, das es Zahlen sind? Ich sitz schon seit 4 Stunden dran und steig da nicht durch.

    <?  
      
      $ergebnis = mysql_query("SELECT * FROM meine_umfragen");  
       while ($row = mysql_fetch_array($ergebnis)) {  
      
       $umfrage_ergebnisse = $row['votes'];  
      
        }  
      
       $addiere = array($umfrage_ergebnisse);  
       echo array_sum($addiere);  
      
       var_dump($addiere);  
      
    ?>
    

    Ergebnis

      
    array(1) {  
      [0]=>  
      string(22) "350, 142, 187, 199, 53"  
    }
    

    Grüße aus H im R,
    Engin

    1. Hi,

      Ich bekomme aus meiner DB aus einer Tabellenspalte '4' durch Komma getrennte Zahlen,

      Also einen String in der Form '1,2,3,4'?

      (Abgesehen davon, wenn du mehrere Werte in einer Spalte hast, klingt das nach keinem guten Datenbankaufbau.)

      diese pack ich dann in ein array um sie mir mit array_sum addieren zu  lassen, nur gibt mir das array statt int die Zahlen als string zurück.

      Du hast ja auch - wenn obiges zutrifft, ueberhaupt keine Zahlen.

      Kann ich dem array irgendwie sagen, das es Zahlen sind?

      Nimm den Zahlenstring auseinander, bevor du ihn weiterbearbeitest - damit ueberhaupt erst mal Zahlen bekommst.

      MfG ChrisB

      1. Hi ChrisB,

        Also einen String in der Form '1,2,3,4'?

        Ja.

        (Abgesehen davon, wenn du mehrere Werte in einer Spalte hast, klingt das nach keinem guten Datenbankaufbau.)

        Das ist ein Umfrage Script das ich irgendwo mal gefunden hatte, jetzt möchte ich die Umfrage Ergebnisse
        aus diesem Script in meine Seite direkt einfügen.

        Arrgghh, schwer zu erklären, wenn man abstimmt, kommt man auf die Umfrage Seite, wo man das
        gesamt Resultat sieht, das Gesamt Resultat baut sich aus 5 Zahlen zusammen (5 Antwort möglichkeiten), in der DB werden
        diese Zahlen in einer Spalte durch Kommas getrennt gespeichert.

        Du hast ja auch - wenn obiges zutrifft, ueberhaupt keine Zahlen.

        Eigentlich schon, nur das Script ist ein wenig unübersichtlich.

        Nimm den Zahlenstring auseinander, bevor du ihn weiterbearbeitest - damit ueberhaupt erst mal Zahlen bekommst.

        Gibt es da ein Stichwort, hab schon nach all möglichem gegooglet, werd aber
        irgendwie nicht fündig bzw. gehen mir die Suchworte aus.

        Grüße aus H im R,
        Engin

        1. Hi,

          Nimm den Zahlenstring auseinander, bevor du ihn weiterbearbeitest - damit ueberhaupt erst mal Zahlen bekommst.

          Gibt es da ein Stichwort

          explode().

          (Explizite Konvertierung der daraus resultierenden einzelnen Teile von String in Zahlen waere auch noch moeglich, sollte aber eigentlich nicht noetig sein, das kann PHP dann wieder selber machen.)

          MfG ChrisB

          1. GuMo ChrisB,

            Nimm den Zahlenstring auseinander, bevor du ihn weiterbearbeitest - damit ueberhaupt erst mal Zahlen bekommst.
            Gibt es da ein Stichwort
            explode().

            Das hatte ich gesucht, Danke. Lustiger weise war explode() einer meiner treffer während meiner suche,
            ich hatte aber fälschlicher Weise angenommen, das ich was anderes suche.

              
            $umfrage_ergebnisse = explode(",",$umfrage_ergebnisse);  
            echo array_sum($umfrage_ergebnisse);
            

            Alleine hätte ich wahrscheinlich noch 2 Wochen gesucht bis ich wieder bei explode() gelandet wäre.  :)

            Grüße aus H im R,
            Engin