Listbox-Auswahl in Session speichern

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

  • Listbox-Auswahl in Session speichern

    Hallo,

    ich habe eine Listbox mit 4 vorgegebenen Werten in einem Formular. Nun soll der zuletzt gewählte Eintrag in der Session gespeichert werden damit beim nächsten Aufruf des Formulars voreingestellt zu sein. Eigentlich eine einfache Aufgabenstellung.

    Nun ist mir zur Umsetzung leider nichts besseres eingefallen als zunächst den Wert aus der Session zu holen und mit 4 String-Vergleichen jeweils abzufragen, ob der Wert nun der gewünschte Wert ist. Und falls das der Fall ist, schreibe ich in eine Variable $option1 bis $option4 den String "selected=\"selected\"" um dann in der echo-Ausgabe die variable mit auszugeben die nur beim richtigen, selektierten Wert das selected ausgibt.

    Das funktioniert auch alles so wie es soll, mein Problem ist eher das dieses triviale Problem 20 Codezeilen und einen enormen Aufwand produziert. In ASP.net ist das ein Zweizeiler, in php ein 20-Zeiler. Das muss doch besser gehen.

  • #2
    Hi,

    zeig bitte deinen 20 Zeiler und dann kürzen wir den mal ;-)!

    mfg streuner
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
    der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

    "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

    Kommentar


    • #3
      gesamter Code

      Das ist jetzt die gesamte Seite:

      PHP-Code:
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

      <html xmlns="http://www.w3.org/1999/xhtml">

      <head>
        <title></title>
      </head>

      <body>

      <?php

      $testWert 
      $_POST['textboxTest'];
      $ausSession $_SESSION['wert'];

      if (
      strcmp($testWert"") != 0)
      {
        
      $_SESSION['wert'] = $testWert;
        
      $ausSession $testWert;
      }

      if (
      strcmp($ausSession"rot") == 0
        
      $rot "selected=\"selected\"";
      if (
      strcmp($ausSession"gruen") == 0
        
      $gruen "selected=\"selected\"";
      if (
      strcmp($ausSession"blau") == 0
        
      $blau "selected=\"selected\"";
      if (
      strcmp($ausSession"gelb") == 0
        
      $gelb "selected=\"selected\"";
      if (
      strcmp($ausSession"magenta") == 0
        
      $magenta "selected=\"selected\"";
      if (
      strcmp($ausSession"cyan") == 0
        
      $cyan "selected=\"selected\"";
      if (
      strcmp($ausSession"schwarz") == 0
        
      $schwarz "selected=\"selected\"";
        
        
      echo <<< EOD

      <form name="form1" method="post" action="" target="_self">

        <select name="textboxTest" size="1">
        <option value="rot" 
      $rot>rot</option>
        <option value="gruen" 
      $gruen>gruen</option>
        <option value="blau" 
      $blau>blau</option>
        <option value="gelb" 
      $gelb>gelb</option>
        <option value="magenta" 
      $magenta>magenta</option>
        <option value="cyan" 
      $cyan>cyan</option>
        <option value="schwarz" 
      $schwarz>schwarz</option>
        </select>

        <br /><br />
        <input type="submit" name="Senden" value="Senden" />

      </form>

      EOD;
      ?>

      </body>

      </html>

      Kommentar


      • #4
        Eine Möglichkeit:

        PHP-Code:
        <form name="form1" method="post" action="">
          <select name="textboxTest" size="1">
          <option value="rot" <?php if($_POST["textboxTest"] == "rot"){ echo "selected=\"selected\""; } ?>>rot</option>
          <option value="gruen" <?php if($_POST["textboxTest"] == "gruen"){ echo "selected=\"selected\""; } ?>>gruen</option>
          <option value="blau" <?php if($_POST["textboxTest"] == "blau"){ echo "selected=\"selected\""; } ?>>blau</option>
          <option value="gelb" <?php if($_POST["textboxTest"] == "gelb"){ echo "selected=\"selected\""; } ?>>gelb</option>
          <option value="magenta" <?php if($_POST["textboxTest"] == "magenta"){ echo "selected=\"selected\""; } ?>>magenta</option>
          <option value="cyan" <?php if($_POST["textboxTest"] == "cyan"){ echo "selected=\"selected\""; } ?>>cyan</option>
          <option value="schwarz" <?php if($_POST["textboxTest"] == "schwarz"){ echo "selected=\"selected\""; } ?>>schwarz</option>
          </select>
          <br /><br />
          <input type="submit" name="Senden" value="Senden" />
        </form>
        ...möglich auch z.B. mit ner Whitelist und in ner Foreach-Schleife usw.

        mfg streuner
        Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
        der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

        "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

        Kommentar


        • #5
          Vielen Dank schonmal für die Antwort.

          Ist es auch möglich die if-Abfragen direkt in der EOD oder EOT ausgabe abzuarbeiten? Denn es ist mir leider vorgegeben dass die komplette Datei eine php-Datei ist. Ich kann nicht php ins html einbetten.

          Kommentar


          • #6
            ...speicher das doch als PHP File ab (war ja auch so gedacht)

            PHP-Code:
            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

            <html xmlns="http://www.w3.org/1999/xhtml">

            <head>
              <title></title>
            </head>

            <body> 
            <form name="form1" method="post" action="">
              <select name="textboxTest" size="1">
              <option value="rot" <?php if($_POST["textboxTest"] == "rot"){ echo "selected=\"selected\""; } ?>>rot</option>
              <option value="gruen" <?php if($_POST["textboxTest"] == "gruen"){ echo "selected=\"selected\""; } ?>>gruen</option>
              <option value="blau" <?php if($_POST["textboxTest"] == "blau"){ echo "selected=\"selected\""; } ?>>blau</option>
              <option value="gelb" <?php if($_POST["textboxTest"] == "gelb"){ echo "selected=\"selected\""; } ?>>gelb</option>
              <option value="magenta" <?php if($_POST["textboxTest"] == "magenta"){ echo "selected=\"selected\""; } ?>>magenta</option>
              <option value="cyan" <?php if($_POST["textboxTest"] == "cyan"){ echo "selected=\"selected\""; } ?>>cyan</option>
              <option value="schwarz" <?php if($_POST["textboxTest"] == "schwarz"){ echo "selected=\"selected\""; } ?>>schwarz</option>
              </select>
              <br /><br />
              <input type="submit" name="Senden" value="Senden" />
            </form> 

            </body>
            </html>

            wo ist das Problem?!?

            mfg streuner
            Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
            der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

            "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

            Kommentar


            • #7
              Das Problem ist, das im eigentlichen Projekt (das war ja nur eine Testdatei) die Ausgabeseite noch sehr viel aufwändiger zusammengebaut wird. Da werden Sachen aus der Datenbank gelesen und solche Geschichten.

              Der Teil der Seite mit der Listbox ist nur so ein kleiner Teil einer EOT-Ausgabe. Und da muss das rein.

              Das html wird also komplett und ausschließlich mit EOD und echo zusammengebaut.

              Wenn es also geht if-Abfragen direkt im EOD auswerten zu lassen wäre das die Lösung. Ansonsten ist die massig-Variablen-Lösung wieder der einzige Weg...

              edit: Ja, ich kann natürlich das EOD unterbrechen und echo nutzen. Das würde gehen. Unfassbar umständlich ist das aber trotzdem. Naja, son 2Zeiler wie bei ASP.net ist mit php vermutlich gar nicht hinzubekommen. Das liegt ja allein schon daran, dass man ne Listbox nicht als Objekt anfassen kann sondern ne Listbox in php nur ne Stringausgabe ist.
              Zuletzt geändert von zumWinkel321; 13.03.2012, 13:35.

              Kommentar


              • #8
                Untebrich doch dein EOD, wen nes nicht anders geht?!?


                Naja, son 2Zeiler wie bei ASP.net ist mit php vermutlich gar nicht hinzubekommen. Das liegt ja allein schon daran, dass man ne Listbox nicht als Objekt anfassen kann sondern ne Listbox in php nur ne Stringausgabe ist.
                zeig bitte den Zweizeiler mal! Möglich ist alles - das war jetzt eine Lösungsmöglichkeit von vielen!?!

                mfg streuner
                Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
                der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

                "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

                Kommentar


                • #9
                  In ASP.net kann ich es einfach so machen:


                  String wert = (String)Session["foobar"];
                  if (wert != null) meineListBox.SelectedValue = wert;



                  Fertig is. Wenn man die Auswertung auf der gleichen Seite macht wie die Listbox muss man noch ein bisschen aufpassen mit der Auswertungsreihenfolge von Button-Ereignissen. Das ist ein bisschen gewöhnungsbedürftig. Aber die Funktionalität ist in ASP.net mit den 2 Zeilen abgedeckt.

                  Edit: Nagut um den Wert selbst in die Session zu schreiben kommt noch eine Zeile hinzu. Also ist es ein 3-Zeiler.

                  Kommentar


                  • #10
                    Fertig is. Wenn man die Auswertung auf der gleichen Seite macht wie die Listbox muss man noch ein bisschen aufpassen mit der Auswertungsreihenfolge von Button-Ereignissen. Das ist ein bisschen gewöhnungsbedürftig. Aber die Funktionalität ist in ASP.net mit den 2 Zeilen abgedeckt.
                    ...z.B. in Kombination mit JavaScript geht das auch !

                    mfg streuner
                    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
                    der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

                    "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

                    Kommentar


                    • #11
                      Aber danke auf jeden Fall für die schnelle Hilfe!

                      Kommentar


                      • #12
                        ...anbei: falls Du die Daten aus ner Datenbank in ner Schleife ausliest, gibt es natürlich auch noch ne elegantere/schnellere Lösung!?

                        mfg streuner

                        P.S. Wenn man ganz pingelig ist, hat meins noch weniger Zeilen(!), da alles in der jeweiligen Zeilte "erledigt" wird ;-))!
                        Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
                        der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

                        "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

                        Kommentar


                        • #13
                          Ja, ich weiß worauf du hinaus willst. Leider wird da nicht ausgelesen, welche Felder die Listbox haben soll. Diese Einträge sind fest im HTML verdrahtet.

                          Kommentar


                          • #14
                            P.S. Wenn man ganz pingelig ist, hat meins noch weniger Zeilen(!), da alles in der jeweiligen Zeilte "erledigt" wird ;-))!

                            Naja, bei ASP.net klickt man sich ne Listbox zusammen, da wird der eigentliche HTML-Code erst später zu generiert. In dem Sinne hat man in ASP.net nichtmal die <option value...>-Tags im HTML (jedenfalls wenn man im Editor ist). Für den Client wird das natürlich dann doch generiert. Dann hat ASP eben doch wieder weniger Zeilen ;-)

                            Kommentar


                            • #15
                              Naja, bei ASP.net klickt man sich ne Listbox zusammen, da wird der eigentliche HTML-Code erst später zu generiert.
                              Stichwort bei PHP: MVC

                              In dem Sinne hat man in ASP.net nichtmal die <option value...>-Tags im HTML (jedenfalls wenn man im Editor ist).
                              Ähnlich.

                              Dann hat ASP eben doch wieder weniger Zeilen ;-)
                              Wenn ich nachher noch Zeit habe, versuche ich das mal alles in einer Zeile zu machen

                              mfg streuner
                              Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
                              der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

                              "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

                              Kommentar

                              Lädt...
                              X