seppm: Dropdown-Menü: Wert nach Submit beibehalten

Ich habe ein Dropdownmenü und einen Submitknopf.
Wenn ich auf den Submitknopf drücke, wird der Wert der Dropdownmenüs normal übermittelt.

Was mich stört ist, dass das Dropdownmenü nach dem drücken des Submitknopfes wieder in die Grundstellung zurückgeht. Ich möchte erreichen, dass das Dropdownmenü auch nach dem drücken des Submitknopfes seine Einstellung behält.

<form name="FormArt" method="get" action="index1.php">
<select name="Art" onChange="index1.php">
<?php
$dbverb=mysql_connect("localhost", "root", "");
mysql_select_db("Witzdatenbank",$dbverb);
$res = mysql_query("SELECT DISTINCT Witzart FROM witz");
while ($row = mysql_fetch_array($res)) {
echo "<option>", $row["Witzart"],"</option>";
}
?>
</select>
<input type="submit" name="Submit" value="Senden">
</form>

  1. Hallo Sepp,
    seltsam das kleine Script hat so viele Fehler
    und dürfte [gar nicht] gehen.

    Wie dem auch sei...
    Schleife soll dynamisch erzeugt werden, dann innerhalb dieser Schleife eine If abfrage ob der übergebene Wert der gleiche ist,
    wie der aktuelle in der Schleife.

    zb.
    while ($row = mysql_fetch_array($res)) {
    $wert = $row['Witzart'];
    if($wert == $_GET['Art']){$tmp = 'selected';}
    echo "<option $tmp value="$wert">$wert</option>";
    if($tmp){unset ($tmp);}
    }

    Müsste so weit gehen , nicht getestet.
    Nur was mich wundert :

    echo "<option>", $row["Witzart"],"</option>";

    1. Kommas anstatt Punkte ? Das soll gehen ?
    2. Kein Value( zumindest nicht schön )
    3. Du benutzt für variabeln Namen gross/kleinschreibung
    gemischt, halte ich auch nicht für toll und sehr fehler
    anfällig.

    Aber na ja hoffe konnte dir helfen ;-)

    Gruss Nikki

    1. Wow, vielen Dank, es funktioniert so!

      Hier noch das gesamte Script, vielleicht kanns ja jemand brauchen.
      (Funktioniert trotz der Kommas:-)

      <html>
      <head>
      <title>Witzdb</title>
      </head>
      <body>
      <form name="FormArt" method="get" action="index1.php">

      <select name="Art" onChange="index1.php">
      <?php
         $dbverb=mysql_connect("localhost", "root", "");
         mysql_select_db("Witzdatenbank",$dbverb);
         $res = mysql_query("SELECT DISTINCT Witzart FROM witz");
         while ($row = mysql_fetch_array($res)) {
         $wert = $row['Witzart'];
         if($wert == $_GET['Art']){$tmp = 'selected';}
         echo "<option $tmp value="$wert">$wert</option>";
         if($tmp){unset ($tmp);}
      }

      ?>
      </select>
         <input type="submit" name="Submit" value="Senden">
      </form>

      <table>
      <tr>
      <?php
      $Art = $_GET[Art];

      $dbverb=mysql_connect("localhost", "root", "");
      mysql_select_db("Witzdatenbank",$dbverb);

      $res = mysql_query("SELECT Witztext FROM witz WHERE Witzart LIKE '$Art'");
         while ($row = mysql_fetch_array($res)) {
         echo "<td>",$row[Witztext],"</td>";
      }
      ?>
      </tr>
      </table>
      </body>
      </html>

      <!--
      Hier noch das SQL für die DB

      Tabellenstruktur für Tabelle witz

      CREATE TABLE witz (
        Witztext varchar(50) NOT NULL default '',
        Witzart varchar(30) NOT NULL default '',
        Bewertung char(2) NOT NULL default ''
      ) TYPE=MyISAM;

      Daten für Tabelle witz

      INSERT INTO witz VALUES ('Hier ist der Witz', 'Fun', '5');
      INSERT INTO witz VALUES ('der 2. Witz', 'Fun', '4');
      INSERT INTO witz VALUES ('der 3. Witz', 'Computer', '5');
      -->

      1. Hello,

        Hier noch das gesamte Script, vielleicht kanns ja jemand brauchen.
        (Funktioniert trotz der Kommas:-)

        <select name="Art" onChange="index1.php">

        Du hast aber den Witz mit dem onChange noch nicht erklärt. Was passiert da bzw. soll da passieren, wenn einer einen anderen Wert auswählt?

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. Ups, das ist ein Überbleibsel aus meinen zahlreichen erfolglosen Versuchen.
          Leider gab keine Fehlermeldung drum hab ich nix gemerkt.

          Richtig wäre:

          <select name="Art">

    2. Hello Nikki,

      Nur was mich wundert :

      echo "<option>", $row["Witzart"],"</option>";

      1. Kommas anstatt Punkte ? Das soll gehen ?

      Ja, echo kann das mit Kommata, genauso wie WriteLn() in Pascal. Beide sind keine Funktionen, sondern Sprachkonstrukte des Compilers bzw Parsers.
      Die Ausgaben werden dann automatisch angereiht und, ich glaube sogar, ins TAB-Raster geschoben. Das weiß ich aber nicht mehr bestimmt und will es jetzt auch nicht ausprobieren.

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
  2. Hello,

    Ich habe ein Dropdownmenü und einen Submitknopf.
    Wenn ich auf den Submitknopf drücke, wird der Wert der Dropdownmenüs normal übermittelt.

    Was mich stört ist, dass das Dropdownmenü nach dem drücken des Submitknopfes wieder in die Grundstellung zurückgeht. Ich möchte erreichen, dass das Dropdownmenü auch nach dem drücken des Submitknopfes seine Einstellung behält.

    <form name="FormArt" method="get" action="index1.php">

    <select name="Art" onChange="index1.php">                Was soll das onchange="..."?

    <?php
    $dbverb=mysql_connect("localhost", "root", "");
    mysql_select_db("Witzdatenbank",$dbverb);
    $res = mysql_query("SELECT DISTINCT Witzart FROM witz");
    while ($row = mysql_fetch_array($res)) {

    echo "<option>", $row["Witzart"],"</option>";            Hier fehlt der Vergleich mit den
                                                               POST-Werten für das 'selected'

    }
    ?>
    </select>
    <input type="submit" name="Submit" value="Senden">
    </form>

    Um sowas zu testen, baut man sich am Besten ein statisches Array.

    Aus diesem Array fütternt man seine Anzeigefunktion

    Ich schicke Dir hier mal eine kleine Musterlösung.
    Das Einzige was man (leider) noch nachbessern müsste, wäre ein Size-Attribut für das <select>, weil CSS scheinbar noch zu blöd ist dazu, die Abzahl der anzuzeigenden Optionen vorzugeben.

    <?php  ### make_selectbox.php ###

    #------------------------------------------------------------------------------
    function make_selectbox
    #------------------------------------------------------------------------------
    (
     $name,               # Name der Selectbox ohne []
     $type,               # S für sinlge, M für Multiple
     $_options,           # assoziatives Array mit den möglichen Optionen
     $_selection=array(), # indiziertes Array mit den letzten Post-Werten (Value=" ")
     $_classes=array()    # Array mit den Klassendefinitionen, die eingebunden werden
    )
    {
      $select = "\n<select name="".trim($name).'[]"'.
                          ((!empty($_classes['select']))?' class="'.$_classes['select'].'"':'').
                          ((strtolower($type)=='m')?' multiple':'').">\n";

    foreach($_options as $key => $val)
      {
        $select.='  <option'.(!empty($_classes['option'])?' class="'.$_classes['option'].'"':'')."\n".
                 "          value="$key"".(in_array($key,$_selection)?' selected="selected"':'').'>'.
                             htmlentities($val)."</option>\n";
      }

    $select .= "</select>\n";

    return $select;
    }

    #==============================================================================

    main section

    #==============================================================================

    $_options[1] = 'Hotel';
    $_options[2] = 'Gasthof';
    $_options[3] = 'Pension';
    $_options[4] = 'Ferienwohnung';
    $_options[5] = 'Ferienzimmer';
    $_options[6] = 'Schlafsaal';
    $_options[7] = 'Wohnwagen';
    $_options[8] = 'Zelt';

    if (isset($_POST['unterkunft']) and is_array($_POST['unterkunft']))
    {
      $_selection = $_POST['unterkunft'];
    }
    else
    {
      $_selection[] = 1;
    }

    $_classes['select'] = 'sel_unterkunft';
    $_classes['option'] = 'opt_unterkunft';

    $select = make_selectbox('unterkunft','M',$_options,$_selection,$_classes);

    ###############################################################################

    HTML-Output

    ###############################################################################
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <HTML>
    <HEAD>
      <TITLE>Selectbox</TITLE>
      <META NAME="Author" CONTENT="Thomas Schmieder, bitworks Deutschland">
      <META NAME="Keywords" CONTENT="Beispiele, HTML, PHP, Programmierung, Selectbox">
      <META NAME="Description" CONTENT="Kleine Tools für PHP-Programmierer">

    <style type="text/css">
      <!--
      .sel_unterkunft
      {
        font-family:Century Gothic,Helvetica,Arial,sans-serif;
        font-size:12pt;
        width:200px;
        height:10em;
      }
      -->
      </style>
    </HEAD>

    <BODY>

    <h3>Selectbox multiple</h3>

    <!-- Zum Anschauen der Post-Parameter Kommentierung wechseln
    <form action="http://selfhtml.bitworks.de/debug/kontrolle.php" method="POST">
    -->
    <form action="" method="POST">
      <?php echo $select; ?>
      <p><input type="submit" name="btn[test]" value="lass sehen"></p>
    </form>
    </BODY>
    </HTML>

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau