Dynamische Auswahlliste mit eigener Funktion

Kenney

Mitglied
Das ist mein Anfang zum dynamischer Auswahlliste.

Die $id Variable gebe ich mit dynAuswahl vor.
Die $name Variable ebenfalls aber mit dynamisch1 bzw. dynamisch2.
Ich versuche die Listen (Brot, Butter, Milch, Eier, Käse, Wurst) und (Schrauben, Nägel, Haken, Nadeln, Dübel) in die Variable $options zu stecken.
Jetzt benötige ich nur noch eine Abfrage ob die $multiple vorhanden ist und damit ich mir bei $options As $key geben lassen kann, der dann im size="eine aktuelle Ziffer der Listengröße bzw. Array-Einträge" einsetzt. Es ist viel gezaubert, mit meinen gefährlichen Halbwissen. Die Idee kann ich nicht umsetzen, weil mir gewaltiges Wissen fehlt. Ich hoffe, Ihr könnt mir helfen, ich weiss echt nicht mehr weiter.

PHP:
<!doctype html>
<html lang="de">
<head>
  <meta charset="utf-8">
  <title>1. Aufgabe dynamische Auswahlliste generieren</title>
</head>
<body>
  <?php
  function dynAuswahl($id, $name, $options, $multiple)
            {
               $ausgabe = "<option value='$options'";
                              if(isset($_POST["dynamisch1"]))
                                {
                                  if($_POST[$id] == $name)
                                  {
                                    $ausgabe .= " selected";
                                  }
                                }
                                if(empty($options))
                                  {
                                  }
                                  $ausgabe .= ">$options</option>\n";
                                  echo $ausgabe;
            }
  ?>
  <form method="post">
    <p>
      <h1>Einkaufsliste:</h1>
    </p>
    <p>
      <select id="dynAuswahl" name="dynamisch1" size="">
        <?php dynAuswahl("dynamisch1", "auswahl1", "Brot", "");?>
        <?php dynAuswahl("dynamisch1", "auswahl1", "Butter", "");?>
        <?php dynAuswahl("dynamisch1", "auswahl1", "Milch", "");?>
        <?php dynAuswahl("dynamisch1", "auswahl1", "Eier", "");?>
        <?php dynAuswahl("dynamisch1", "auswahl1", "Käse", "");?>
        <?php dynAuswahl("dynamisch1", "auswahl1", "Wurst", "");?>
      </select>
    </p>
    <p>
      <select id="dynAuswahl" name="dynmisch2" size="" multiple="">
        <?php dynAuswahl("dynmisch2", "auswahl2", "Schrauben", "");?>
        <?php dynAuswahl("dynmisch2", "auswahl2", "Nägel", "");?>
        <?php dynAuswahl("dynmisch2", "auswahl2", "Haken", "");?>
        <?php dynAuswahl("dynmisch2", "auswahl2", "Nadeln", "");?>
        <?php dynAuswahl("dynmisch2", "auswahl2", "Dübel", "");?>
      </select>
    </p>
    <p>
    <input type="submit" value="Abschicken">
   </p>
  </form>
</body>
</html>
 
Zuletzt bearbeitet von einem Moderator:
Bei HTML, habe ich es so verstanden, das Infos von HTML an PHP gehen können aber nicht so ohne weiteres von PHP an HTML.
Meines Wissens ist es eher umgekehrt:

PHP-Variable in HTML eintragen ist einfach:
Code:
<input type="text" value="<?php echo $val; ?>">
Setzt natürlich voraus, dass die Variable $val zuvor definiert wurde.

Infos, die von HTML an PHP gehen, sind normaler Weise die Eingaben in Inputs, die Auswahlen in Selects etc. Die Übertragung an PHP kann durch Abschicken des Formulars oder Senden mit Ajax bzw. fetch erfolgen.
 
Meines Wissens ist es eher umgekehrt:

PHP-Variable in HTML eintragen ist einfach:
Code:
<input type="text" value="<?php echo $val; ?>">
Setzt natürlich voraus, dass die Variable $val zuvor definiert wurde.

Infos, die von HTML an PHP gehen, sind normaler Weise die Eingaben in Inputs, die Auswahlen in Selects etc. Die Übertragung an PHP kann durch Abschicken des Formulars oder Senden mit Ajax bzw. fetch erfolgen.
Dann ist doch es doch mehr Aufwand von PHP nach HTML?

Schönes Ding mit der anderen Möglichkeit der Elemente Zählung, hat ganz schön gedauert, dass zu finden.

Mir gefällt nur nicht, dass die Auswahllisten nicht mit wachsen bzw. jetzt auf Standard 4 Zielen anzeigen.....

Code:
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<title>dynamische Auswahlliste generieren</title>
<?php
error_reporting(-1);
ini_set("display_errors", 1);
?>
</head>
<body>
<?php
  function dynAuswahl(
        $id, // Die ID des Select
        $name, // Der Name des Select
        $options, // Die Optionen des Select (array)
        $multiple // Gibt an, ob mehrere Optionen auswählbar sind (boolean)
    ) {            
        if ($multiple) //Abfrage ob $multiple true ist
            {
            $multAttribute = "multiple";//belegt die Variable mit multiple, wenn vorhanden, true
            $nameAttribute = $name . '[]';//belegt die Variable mit der Variable $name(legst du es in eine Array?)
            if($multAttribute){
                $arrZahl = count($options);
            } else {
                $arrZahl = 1;
            }
        } else {
            $multAttribute = '';//alternativ wird die Variable mit Null gefüllt, false
            $nameAttribute = $name;//alternativ wird die Variable mit der Variable $name gefüllt
        }
        $html = "<select id='$id' name='$nameAttribute' sitze='$arrZahl' multiple='$multAttribute'>\n";
        foreach ($options as $opt) {            
               $html .= "<option value='$opt'> $opt </option>\n";
            }
        $html .= "</select>";
        return $html;
        }
?>

<h1>Einkaufsliste PHP</h1>
<form method="post">
<p>
<?php
echo dynAuswahl("dynamisch1", "auswahl1", array("Brot", "Butter", "Milch", "Eier", "Käse", "Wurst"), false);
?>
</p>
<p>
<?php
echo dynAuswahl("dynamisch2", "auswahl2", array("Schrauben", "Nägel", "Haken", "Nadeln", "Dübel"), true);
?>
</p>
<p>
<input type="submit" value="Abschicken">
</p>
<br>
<hr>
<h1>Einkaufsliste HTML</h1>
 <p>
    <select $id="dynamisch1" name="auswahl1[]" size="" multiple"">
        <option value="Brot"> Brot </option>
        <option value="Butter"> Butter </option>
        <option value="Milch"> Milche </option>
        <option value="Eier"> Eier </option>
        <option value="Käse"> Käse </options>
        <option value="Wurst"> Wurst </option>
    </select>
 </p>
 <p>
    <select id="dynamisch2" name="auswahl2[]" size="" multiple="multiple">
        <option value="Schrauben"> Schrauben </option>
        <option value="Nägel"> Nägel </option>
        <option value="Haken"> Haken </option>
        <option value="Nadeln"> Nadeln </option>
        <option value="Dübel"> Dübel </option>
    </select>
 </p>
 <p>
  <input type="submit" value="Abschicken">
 </p>
</form>

</body>
</html>
 
Mir gefällt nur nicht, dass die Auswahllisten nicht mit wachsen bzw. jetzt auf Standard 4 Zielen anzeigen.....
Hier verstehe ich nicht ganz, was Du meinst. Du hast jetzt 4 Auswahllisten, 2 dynamisch mit PHP und 2 statisch in HTML definiert. Die mit PHP wachsen schon denn sie zeigen genau die Optionen an, die Du im Array options übergibst.

Hier hast Du anscheinend die Zusammenhänge noch nicht richtig verstanden, siehe meine Kommentare:
Code:
        if ($multiple) //Abfrage ob $multiple true ist
            {
            $multAttribute = "multiple";//belegt die Variable mit multiple, wenn vorhanden, true
            $nameAttribute = $name . '[]';//belegt die Variable mit der Variable $name(legst du es in eine Array?)
            // Hier ist auf jeden Fall der Parameter "multiple" true,
            // es macht keinen Sinn, dies erneut abzufragen:
            if($multAttribute){
                $arrZahl = count($options);
            } else {
                $arrZahl = 1;
            }
        } else {
            $multAttribute = '';//alternativ wird die Variable mit Null gefüllt, false
            $nameAttribute = $name;//alternativ wird die Variable mit der Variable $name gefüllt
            // Hier musst Du $arrZahl auf 1 setzen.
        }
So sollte es richtig sein also viel einfacher:
Code:
        if ($multiple) //Abfrage ob $multiple true ist
            {
                $multAttribute = "multiple";//belegt die Variable mit multiple, wenn vorhanden, true
                $nameAttribute = $name . '[]';//belegt die Variable mit der Variable $name(legst du es in eine Array?)
                $arrZahl = count($options);
        } else {
            $multAttribute = '';//alternativ wird die Variable mit Null gefüllt, false
            $nameAttribute = $name;//alternativ wird die Variable mit der Variable $name gefüllt
            $arrZahl = 1;
        }
 
Hier verstehe ich nicht ganz, was Du meinst. Du hast jetzt 4 Auswahllisten, 2 dynamisch mit PHP und 2 statisch in HTML definiert. Die mit PHP wachsen schon denn sie zeigen genau die Optionen an, die Du im Array options übergibst.

Hier hast Du anscheinend die Zusammenhänge noch nicht richtig verstanden, siehe meine Kommentare:
Code:
        if ($multiple) //Abfrage ob $multiple true ist
            {
            $multAttribute = "multiple";//belegt die Variable mit multiple, wenn vorhanden, true
            $nameAttribute = $name . '[]';//belegt die Variable mit der Variable $name(legst du es in eine Array?)
            // Hier ist auf jeden Fall der Parameter "multiple" true,
            // es macht keinen Sinn, dies erneut abzufragen:
            if($multAttribute){
                $arrZahl = count($options);
            } else {
                $arrZahl = 1;
            }
        } else {
            $multAttribute = '';//alternativ wird die Variable mit Null gefüllt, false
            $nameAttribute = $name;//alternativ wird die Variable mit der Variable $name gefüllt
            // Hier musst Du $arrZahl auf 1 setzen.
        }
So sollte es richtig sein also viel einfacher:
Code:
        if ($multiple) //Abfrage ob $multiple true ist
            {
                $multAttribute = "multiple";//belegt die Variable mit multiple, wenn vorhanden, true
                $nameAttribute = $name . '[]';//belegt die Variable mit der Variable $name(legst du es in eine Array?)
                $arrZahl = count($options);
        } else {
            $multAttribute = '';//alternativ wird die Variable mit Null gefüllt, false
            $nameAttribute = $name;//alternativ wird die Variable mit der Variable $name gefüllt
            $arrZahl = 1;
        }
Ich verstehe wirklich nicht ganz. Der Quelltext soll doch bewirken, dass eine Auswahlliste mit dem Inhalt der Liste "dynamisch" reagiert. Ich vermute mal, das es wenn ich 7 Elemente habe, das Auswahlfenster größer ist, als wenn ich 4 Elemente enthalten habe.

Mit der doppelten Abfrage, gebe ich zu, im Nachgang, doch etwas umständlich.
 
Ich verstehe wirklich nicht ganz. Der Quelltext soll doch bewirken, dass eine Auswahlliste mit dem Inhalt der Liste "dynamisch" reagiert. Ich vermute mal, das es wenn ich 7 Elemente habe, das Auswahlfenster größer ist, als wenn ich 4 Elemente enthalten habe.
Würde es auch, wenn man die richtig Syntax verwendet :ROFLMAO: sitze :ROFLMAO:

Wenn man den anderen Thread noch mitberechnet, sind für dieses simple Problem schon über 100 Postings geschrieben worden. Glückwunsch! :rolleyes:
 
Zurück