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:
Nachdem ich da weiter drüber reflektiert habe, scheint mir jetzt klar zu sein, wo das Ganze hin gehen soll:
Die vorgegebenen Parameter der Funktion geben einfach die Attribute und Optionen des zu generierenden Select an:
Code:
function dynAuswahl(
    $id, // Die ID des Select
    $name, // Der Name des Select
    $options, // Die Optionen des Select
    $multiple // Gibt an, ob mehrere Optionen auswählbar sind (boolean)
    ) {
Dann müsste man das select-Tag in die Funktion hinein nehmen:
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) {
            $multAttribute = " multiple";
            $nameAttribute = $name . '[]';
        } else {
            $multAttribute = '';
            $nameAttribute = $name;
        }

        $html = '<select id="' . $id . '" name="' . $nameAttribute . '"' . $multAttribute . '>';
        foreach ($options as $opt) {
            // An dieser Stelle kannst Du zusätzlich prüfen, ob die Option
            // ausgewählt ist und entspr. das Attr. "selected" setzen
            $html .= '<option value="' . $opt . '">' . $opt . '</option>';
        }
        $html .= '</select>';
        return $html;
    }
(ungetestet)
Das könntest Du noch verfeinern indem Du das Array mit den Optionen zweidimensional anlegst um value und Text getrennt zu definieren.
Stunden sind wieder vergangen und ich habe es jetzt kaputt gemacht.

Code:
?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?)
        } 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 . '"' . $multAttribute . '>';
        foreach ($options as $opt) {            
            // An dieser Stelle kannst Du zusätzlich prüfen, ob die Option
            // ausgewählt ist und entspr. das Attr. "selected" setzen
            if([$options] == $opt){
                $html .= " selected";
            }
            $html .= '<option value="' . $opt . '">' . $opt . '</option>';
        }
        $html .= '</select>';
        return $html;
    }
?>
<?php
    //zweidimensionale Array angelegt
    $options = array($auswahl1 = array("Brot", "Butter", "Milche", "Eier", "Käse", "Wurst"),
                    $auswahl2 = array("Schrauben", "Nägel", "Haken", "Nadeln", "Dübel"));
?>

Ich würde sagen, dass ich den Wald voller Bäume nicht sehen.

Die logische Reihenfolge kann ich nicht erkennen, von den anderen Dingen erstmal nicht zu reden.
 
Dieses hier am besten erst Mal zurück stellen, da es nicht in der Aufgabenstellung steht und ein wenig komplizierter ist:
Code:
            // An dieser Stelle kannst Du zusätzlich prüfen, ob die Option
            // ausgewählt ist und entspr. das Attr. "selected" setzen
            if([$options] == $opt){
                $html .= " selected";
            }

In diesem Fall erkenne ich keinen Nutzen in der Verwendung eines mehrdimensionalen Arrays, einfach mehrere Array definieren:
Code:
$lebensmittel = array("Brot", "Butter", "Milche", "Eier", "Käse", "Wurst");
$befestigungstec = array("Schrauben", "Nägel", "Haken", "Nadeln", "Dübel");
Diese kannst Du dann jeweils beim Aufruf übergeben:
Code:
echo dynAuswahl(
        'lebensmittel', // Die ID des Select
        'lebensmittel', // Der Name des Select
        lebensmittel, // Die Optionen des Select (array)
        true // Gibt an, ob mehrere Optionen auswählbar sind (boolean)
    );
und ebenso für die Befestigungstechnik.
 
Zuletzt bearbeitet:
Dieses hier am besten erst Mal zurück stellen, da es nicht in der Aufgabenstellung steht und ein wenig komplizierter ist:
Code:
            // An dieser Stelle kannst Du zusätzlich prüfen, ob die Option
            // ausgewählt ist und entspr. das Attr. "selected" setzen
            if([$options] == $opt){
                $html .= " selected";
            }

In diesem Fall erkenne ich keinen Nutzen in der Verwendung eines mehrdimensionalen Arrays, einfach mehrere Array definieren:
Code:
$lebensmittel = array("Brot", "Butter", "Milche", "Eier", "Käse", "Wurst");
$befestigungstec = array("Schrauben", "Nägel", "Haken", "Nadeln", "Dübel");
Diese kannst Du dann jeweils beim Aufruf übergeben:
Code:
echo dynAuswahl(
        'lebensmittel', // Die ID des Select
        'lebensmittel', // Der Name des Select
        lebensmittel, // Die Optionen des Select (array)
        true // Gibt an, ob mehrere Optionen auswählbar sind (boolean)
    );
und ebenso für die Befestigungstechnik.
Okay, ich streiche die Selektierung.

Ich versuche gerade eure Quelltexte zu verstehen, z. B. Reihenfolge (Klammern), Warum (diese Abfrage) und wie ich es ins Formular bekomme.
 
Wenn Du etwas nicht verstehst, am besten bald fragen bevor Du stundenlang herum rätselst.
Hey, das ist etwas, was ich gut kann.

Wenn ich ein Ausgabe-String teile durch z. B. //..name="$name"";/ und mehr als eine Verzweigung habe /.= "size="...//
Bekomme ich da Schwierigkeiten, wenn es zu viele sind?

Weil er das andere Teil nicht findet.
 
Wenn ich ein Ausgabe-String teile durch z. B. //..name="$name"";/ und mehr als eine Verzweigung habe /.= "size="...//
Das verstehe ich jetzt nicht ganz, was Du meinst. Was bedeuten die Schrägstriche?
Poste am besten den Code, um den es geht, vollständig.
 
Das verstehe ich jetzt nicht ganz, was Du meinst. Was bedeuten die Schrägstriche?
Poste am besten den Code, um den es geht, vollständig.
Code:
$ausgabe1 = "<select id=".$id." name=".$name."";
            
           
            
            //$opt = "<option value='$options'";
                if($_POST[$name] == $options)
                    {
                   $opt .= " selected";
                    }
                    if(empty($options))
                    {
                    }
                    //$opt .= ">$options</option>\n";
                    $ausgabe1 .= "size=". count($options) ." multiple=".$multiple.">\n";
                    for($arrZ = 0; $arrZ < count($options); $arrZ++)
                    {
                    }
                                  
                                   
            
            //return $opt;
                                                                
                                      
                                  
                                
            $ausgabe1 .= "</select>";
            echo $ausgabe1;

Ich habe die <option> mit // entschärft, damit ich mich erstmal nur mit <select> die Auswirkungen probieren kann.

Da kam es vor, das er bei TAG <select>......></select> das Gegenstück bzw. das Ende nicht finden könnte. Warum findet er es nicht?

Was für Bücher nutzt ihr für PHP, oder schreibt ihr selber?
 
Was für Bücher nutzt ihr für PHP
Keine. Doku lesen und dort die Beispiele beachten hilft schon mal. Und Tutorials findet man auch reichlich im Netz. Bücher sind häufig schon beim Erscheinungsdatum veraltet, also nicht das Gelbe von Ei.

Und sorry, wenn ich das jetzt mal sage, aber ich habe den Eindruck, dass du mehr Try&Error betreibst, als versuchst, logisch an die Sache zu gehen.
 
Keine. Doku lesen und dort die Beispiele beachten hilft schon mal. Und Tutorials findet man auch reichlich im Netz. Bücher sind häufig schon beim Erscheinungsdatum veraltet, also nicht das Gelbe von Ei.

Und sorry, wenn ich das jetzt mal sage, aber ich habe den Eindruck, dass du mehr Try&Error betreibst, als versuchst, logisch an die Sache zu gehen.
Es gibt auch viel nichts aussagendes Material im Netz. Ich benötige in der Tat mehr Beispiele als andere.

Ich gehe mal davon aus, dass du es deutlich länge betreibst als ich. Deshalb würde ich behaupt, was das "Try&Error" auch ist, recht hast.

Wenn es beschreibt, dass ich mich in einer ungewohnten Umgebung zurecht finden versuche und nicht alles gleich von Anfang verstehe. OOO, ich habe vor gut einen Monat damit angefangen.

Ich finde auch, wenn man ein gewisse Form halten kann, ist Ehrlichkeit nicht schlimm. Also hau immer raus, was dir auf dem Herzen liegt.
 
Zurück