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:
Verstehe, die Schrägstriche sind Kommentarzeichen, das hätte mir eigentlich klar sein müssen.

Was für Bücher nutzt ihr für PHP, oder schreibt ihr selber?
Ich benutze keine Bücher weil ich genug im Netz finde und damit alle Probleme lösen kann. Was PHP betrifft finde ich die Doku in php.net sehr gut, dort gibt es auch sehr viele Beispiele.

Was den Code, den Du zuletzt gepostet hast, betrifft, so ist es zunächst so, dass dass Du durch das Auskommentieren einzelner Zeilen das HTML verstümmelt hast. Weiter musst Du berücksichtigen, dass $options ein Array ist, das Du nicht ohne weiteres z. B. in einem if mit einem String vergleichen kannst.

Meine Empfehlung: Versuche zunächst, den Code, den ich in #13 gepostet habe, zu verstehen und mit dem Aufruf in #22 zu einer vollständigen und lauffähigen Seite zusammen zu setzen.
 
Verstehe, die Schrägstriche sind Kommentarzeichen, das hätte mir eigentlich klar sein müssen.


Ich benutze keine Bücher weil ich genug im Netz finde und damit alle Probleme lösen kann. Was PHP betrifft finde ich die Doku in php.net sehr gut, dort gibt es auch sehr viele Beispiele.

Was den Code, den Du zuletzt gepostet hast, betrifft, so ist es zunächst so, dass dass Du durch das Auskommentieren einzelner Zeilen das HTML verstümmelt hast. Weiter musst Du berücksichtigen, dass $options ein Array ist, das Du nicht ohne weiteres z. B. in einem if mit einem String vergleichen kannst.

Meine Empfehlung: Versuche zunächst, den Code, den ich in #13 gepostet habe, zu verstehen und mit dem Aufruf in #22 zu einer vollständigen und lauffähigen Seite zusammen zu setzen.
Alles gut, ich bin neu hier. Wir müssen uns auch erstmal finden.

Man kann Zeilen mit zu vielen Kommas verstümmeln. Finde ich bei m.scatello´s Link auch etwas über Strukturen, die man meiden sollte?
Obwohl ich keine Array definiert habe ist $options ein Array, ich dachte das wäre ein zufälliges, glückliches Ereignis.

Ich werde mir #13 und #22 morgen annehmen, weil ich das heute Abend nicht mehr hinbekomme.
 
Obwohl ich keine Array definiert habe ist $options ein Array, ich dachte das wäre ein zufälliges, glückliches Ereignis.
Das ergibt sich aus der Aufgabenstellung, die Du in #10 gepostet hast:
An das Array $options werden die option-Elemente übergeben.

Außerdem machen die Parameter der Funktion anders keinen Sinn, denn wenn man name, id und multiple an die Funktion übergibt, muss man das komplette Select einschl. des öffnenden select-Tags darin erzeugen. Und alle Optionen übergeben.
 
Das ergibt sich aus der Aufgabenstellung, die Du in #10 gepostet hast:


Außerdem machen die Parameter der Funktion anders keinen Sinn, denn wenn man name, id und multiple an die Funktion übergibt, muss man das komplette Select einschl. des öffnenden select-Tags darin erzeugen. Und alle Optionen übergeben.
Wollte ich als Anfänger doch zu viel auf einmal......tztz
 
Hallo

Dank euch habe ich etwas Verständnis erlangen können.

Hier ist der noch nicht fertige Entwurf

Code:
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<title>dynamische Auswahlliste generieren</title>
<?php
error_reporting(-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){//Wenn true, soll er die Werte, später, auszählen
                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
        }
        $html = '<select id="' . $id . '" name="' . $nameAttribute . '"' . $multAttribute . '>';
        foreach ($options as $opt) {          
               $html .= '<option value="' . $opt . '">' . $opt . '</option>';
               var_dump(count($options));//Ein Versuch, zu prüfen ob Werte zum berechnen da sind.
        }
        $html .= '</select>';
        return $html;
        }
?>

<h1>Einkaufsliste:</h1>
<form method="post">
 <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="<?php echo $arrZahl; ?>" 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>

Da sind Ideen um die Ziffer zu generieren für die dynamische Auswahlliste enthalten.

Vielleicht könntet ihr mir auch Tipps geben. Da mir die Praxis fehlt. Bitte denkt daran, ich bin kein Profi.

@m.scatello
Ich weiss jetzt, was du meintest. Das ich die Variable für die eig. Funktion, von html und php aus befüllen wollte. Das möglicherweise unlogisch bzw. nichts Halbe und nichts Ganzes ist. Der Fehler ist mir am Mittwoch, 2. Nov. um 04:33 Uhr, bewusst geworden, nachdem ich das Handbuch durchsucht habe. Vielen Dank für den Link.
 
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
        }
 
Zurück