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:
1. Da Du die Selects dynamisch generieren willst, macht des keinen Sinn, diese schon im HTML zu notieren. Statt dessen musst Du die Funktion zwei Mal aufrufen und den Rückgabewert mit echo ausgeben, wie ich es in Posting #22 gezeigt habe.

2. Siehe meine Kommentare im Code:
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?)
            // An dieser Stelle weißt Du schon, dass es sich um eine Mehrfachauswahl handelt,
            // eine erneute Abfrage ist überflüssig:
            if($multAttribute){//Wenn true, soll er die Werte, später, auszählen
                // Mit count bist Du schon auf dem richtigen Wege aber Du musst es auf $options anwenden
                // um die die Anzahl zu ermitteln. Ich empfehle, gleich hier das vollständige size-Attribut
                // $sizeAttribute mit Name und Wert bereit zu stellen und später nur noch in das HTML
                // einzufügen:
                var_dump(count($multAttribute));//Ein Versuch, zu prüfen ob Werte zum berechnen da sind.
                }
        
        } else {
            $multAttribute = '';//alternativ wird die Variable mit Null gefüllt, false
            $nameAttribute = $name;//alternativ wird die Variable mit der Variable $name gefüllt
        }
Die #22 könnte ich bis jetzt nicht wirklich einordnen.

Ich werde es morgen einpflegen und euch dann wieder nerven.
 
Der Aufruf von dynAuswahl gibt das fertige Select an der Stelle im HTML aus wo Du es notiert hast:

Code:
<form method="post">
<?php
echo dynAuswahl(
        'befestigungstec', // Die ID des Select
        'befestigungstec', // Der Name des Select
        befestigungstec, // Die Optionen des Select (array)
        true // Gibt an, ob mehrere Optionen auswählbar sind (boolean)
    );
echo dynAuswahl(
        'lebensmittel', // Die ID des Select
        'lebensmittel', // Der Name des Select
        lebensmittel, // Die Optionen des Select (array)
        false // Gibt an, ob mehrere Optionen auswählbar sind (boolean)
    );
?>
  <input type="submit" value="Abschicken">
</form>
Natürlich musst Du auch die beiden Arrays definieren.
 
Der Aufruf von dynAuswahl gibt das fertige Select an der Stelle im HTML aus wo Du es notiert hast:

Code:
<form method="post">
<?php
echo dynAuswahl(
        'befestigungstec', // Die ID des Select
        'befestigungstec', // Der Name des Select
        befestigungstec, // Die Optionen des Select (array)
        true // Gibt an, ob mehrere Optionen auswählbar sind (boolean)
    );
echo dynAuswahl(
        'lebensmittel', // Die ID des Select
        'lebensmittel', // Der Name des Select
        lebensmittel, // Die Optionen des Select (array)
        false // Gibt an, ob mehrere Optionen auswählbar sind (boolean)
    );
?>
  <input type="submit" value="Abschicken">
</form>
Natürlich musst Du auch die beiden Arrays definieren.
Vielen Dank für den HInweis.
 
Vielen Dank für den HInweis.
Hey,
im Browser-Quelltext zählt er die Einträge bei auswahl2, Browser-Formular wird es aber nicht berücksichtigt.
Ich muss für heute aufhöre, hoffe ihr könnt mir da wieder ein paar Tipp geben. Danke im Voraus.

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){
            for($arrZahl = 0; $arrZahl < count($options); $arrZahl++){
                $arrZahl;
                }
                
            }
        } 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>

P.S.: Ich habe es in PHP und HTML unterteilt um besser zu sehen, wo sich was verändert.
 
Wieso hast du denn jetzt die Selects einmal als PHP-generiert und einmal als HTML-Code? Und wieso ist im HTML-Code auswahl1 auf multiple gesetzt? So langsam glaube ich, du gibst hier den Forentroll. Wir reden hier vom Einfachsten vom Einfachen und du schaffst es immer wieder, irgendwelche Böcke einzubauen.
 
Ich habe wieder Kommentare in deinen Code eingetragen:
Code:
    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?)
            // Viel einfacher: Du brauchst nur die Anzahl der Elemente im Array options
            // bereit zu stellen:
            $arrZahl = count($options);
            // if ($multAttribute) {
            //     for ($arrZahl = 0; $arrZahl < count($options); $arrZahl++) {
            //         $arrZahl;
            //     }
            // }
        } else {
            $multAttribute = ''; //alternativ wird die Variable mit Null gefüllt, false
            $nameAttribute = $name; //alternativ wird die Variable mit der Variable $name gefüllt
            // Auch hier im else-Zweig ($multiple steht auf false) musst Du die Variable $arrZahl
            // definieren, weil es sonst im weiteren Verlauf zu einem Fehler kommt:
            $arrZahl = 1;
        }
        // Hier hattest Du einen Schreibfehler: sitze - size
        $html = "<select id='$id' name='$nameAttribute' size={$arrZahl} $multAttribute>\n";
        // $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;
    }

Hier:
Code:
        $html = "<select id='$id' name='$nameAttribute' size={$arrZahl} $multAttribute>\n";
        // $html = "<select id='$id' name='$nameAttribute' sitze={$arrZahl} multiple='$multAttribute'>\n";
hattest Du einen weiteren Fehler:
Durch dieses: multiple='$multAttribute' bekommst Du, wenn es keine Mehrfachauswahl ist, folgendes HTML:
<select id='dynamisch1' name='auswahl1' sitze=1 multiple=''>
Das Attribut "multiple" braucht keinen Wert um wirksam zu werden. Auch mit einem Leerstring bekommst Du eine Mehrfachauswahl.
 
Zuletzt bearbeitet:
Ich habe wieder Kommentare in deinen Code eingetragen:
Code:
    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?)
            // Viel einfacher: Du brauchst nur die Anzahl der Elemente im Array options
            // bereit zu stellen:
            $arrZahl = count($options);
            // if ($multAttribute) {
            //     for ($arrZahl = 0; $arrZahl < count($options); $arrZahl++) {
            //         $arrZahl;
            //     }
            // }
        } else {
            $multAttribute = ''; //alternativ wird die Variable mit Null gefüllt, false
            $nameAttribute = $name; //alternativ wird die Variable mit der Variable $name gefüllt
            // Auch hier im else-Zweig ($multiple steht auf false) musst Du die Variable $arrZahl
            // definieren, weil es sonst im weiteren Verlauf zu einem Fehler kommt:
            $arrZahl = 1;
        }
        // Hier hattest Du einen Schreibfehler: sitze - size
        $html = "<select id='$id' name='$nameAttribute' size={$arrZahl} $multAttribute>\n";
        // $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;
    }

Hier:
Code:
        $html = "<select id='$id' name='$nameAttribute' size={$arrZahl} $multAttribute>\n";
        // $html = "<select id='$id' name='$nameAttribute' sitze={$arrZahl} multiple='$multAttribute'>\n";
hattest Du einen weiteren Fehler:
Durch dieses: multiple='$multAttribute' bekommst Du, wenn es keine Mehrfachauswahl ist, folgendes HTML:
<select id='dynamisch1' name='auswahl1' sitze=1 multiple=''>
Das Attribut "multiple" braucht keinen Wert um wirksam zu werden. Auch mit einem Leerstring bekommst Du eine Mehrfachauswahl.
Danke, ich werde mich gleich daran machen.
 
Ich habe wieder Kommentare in deinen Code eingetragen:
Code:
    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?)
            // Viel einfacher: Du brauchst nur die Anzahl der Elemente im Array options
            // bereit zu stellen:
            $arrZahl = count($options);
            // if ($multAttribute) {
            //     for ($arrZahl = 0; $arrZahl < count($options); $arrZahl++) {
            //         $arrZahl;
            //     }
            // }
        } else {
            $multAttribute = ''; //alternativ wird die Variable mit Null gefüllt, false
            $nameAttribute = $name; //alternativ wird die Variable mit der Variable $name gefüllt
            // Auch hier im else-Zweig ($multiple steht auf false) musst Du die Variable $arrZahl
            // definieren, weil es sonst im weiteren Verlauf zu einem Fehler kommt:
            $arrZahl = 1;
        }
        // Hier hattest Du einen Schreibfehler: sitze - size
        $html = "<select id='$id' name='$nameAttribute' size={$arrZahl} $multAttribute>\n";
        // $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;
    }

Hier:
Code:
        $html = "<select id='$id' name='$nameAttribute' size={$arrZahl} $multAttribute>\n";
        // $html = "<select id='$id' name='$nameAttribute' sitze={$arrZahl} multiple='$multAttribute'>\n";
hattest Du einen weiteren Fehler:
Durch dieses: multiple='$multAttribute' bekommst Du, wenn es keine Mehrfachauswahl ist, folgendes HTML:
<select id='dynamisch1' name='auswahl1' sitze=1 multiple=''>
Das Attribut "multiple" braucht keinen Wert um wirksam zu werden. Auch mit einem Leerstring bekommst Du eine Mehrfachauswahl.
@Sempervivum

Doch ich bekomme einen Fehler in PHP, unbekannte Variable im Ort: <select ....... size=.

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.

Ich gucke mir deine Anmerkungen an und versuche sie umzusetzen.
 
Zurück