Dynamische Auswahlliste mit eigener Funktion

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Kenney

Mitglied
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.
 

Kenney

Mitglied
Wieviele Möglichkeiten hättet ihr um diese Aufgabe zu erfüllen?

Nur mal so, wo ich stehe und vielleicht hinkommen.
 

Sempervivum

Erfahrenes Mitglied
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.
 

Kenney

Mitglied
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.
 

Kenney

Mitglied
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.
 

m.scatello

Erfahrenes Mitglied
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.
 

Sempervivum

Erfahrenes Mitglied
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:

Kenney

Mitglied
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.
 

Kenney

Mitglied
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.
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Neue Beiträge