Dynamische Funktion / 2 Dropdownmenüs

m.scatello

Erfahrenes Mitglied
Dann mal eine der wichtigsten Grundlagen:

Richtig debuggen
  1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
  2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
  3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
  4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
  5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
  6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
  7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
  8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
  9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
 

Kenney

Mitglied
Dann mal eine der wichtigsten Grundlagen:

Richtig debuggen
  1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
  2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
  3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
  4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
  5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
  6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
  7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
  8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
  9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
Deine Liste versuche ich nebenbei umzusetzen.

Aber ich habe bei der Aufgabe keinen Fehler. Ich weiss nur nicht wie ich das mit dem dynamischen Feld realisieren kann. Ich habe den Zähler (for()) mit count(), foreach(), if() versucht und dabei baue ich Müll zusammen.

Könnt Ihr mir da ein kleinen Tipp geben?
 

Sempervivum

Erfahrenes Mitglied
Wie hast Du denn diese Seite aufgerufen? Bist Du schon mit POST-Variablen vertraut?
Wegen dieser Abfrage:
if(isset($_POST["dynamisch1"]))
werden die Optionen des betr. Selects nur angelegt wenn eine POST-Variable "dynamisch1" existiert.
 

Kenney

Mitglied
Wie hast Du denn diese Seite aufgerufen? Bist Du schon mit POST-Variablen vertraut?
Wegen dieser Abfrage:
if(isset($_POST["dynamisch1"]))
werden die Optionen des betr. Selects nur angelegt wenn eine POST-Variable "dynamisch1" existiert.
Ich rufe den Quelltext in der simUmgebung in Firefox auf. Ich weiss, dass POST-Variablen Supber-Globale-Variablen sind. Bei der if(isset($_POST["dynamisch1"])) Abfrage wird beim erstmaligen Aufruf geprüft ob dynamisch1 was beinhaltet, somit erhalte ich keine Fehler wegen unbekannte Variablen. Die Variable $Option beinhaltet auch die Liste, Brot, Butter usw., wenn ich diese abrufe.

Meine Ideen war, dass ich mit if() prüfe ob multiple vorhanden ist, dann mit foreach bei $Options die Ziffern der belegten Array ($Options) auszählen und irgenwie in size="<?php ....... ?> hinein zu bekommen. 3 Wochen habe ich gebastelt.
 

Sempervivum

Erfahrenes Mitglied
Ich weiss, dass POST-Variablen Supber-Globale-Variablen sind.
Dieses Wissen ist IMO nicht ausreichend. Wichtiger ist, dass die POST-Variablen auch gesetzt werden. Das geschieht in der Regel, indem ein Formular mit einem Element, das, in diesem Fall, das name-Attribut "dynamisch1" hat, abgeschickt wird.
Dein Code kommt mir irgend wie unentschieden vor. Ich sehe zwei Möglichkeiten, die Optionen anzulegen:
1. Mit einer Funktion, die mehrfach aufgerufen wird, so wie Du es jetzt hast
oder
2. Mit einem Array, das Du in einer foreach-Schleife abarbeitest und die Optionen generierst. Letzteres kannst Du natürlich auch in eine Funktion legen, damit Du verschiedene Selects damit anlegen kannst.
 

Kenney

Mitglied
Dieses Wissen ist IMO nicht ausreichend. Wichtiger ist, dass die POST-Variablen auch gesetzt werden. Das geschieht in der Regel, indem ein Formular mit einem Element, das, in diesem Fall, das name-Attribut "dynamisch1" hat, abgeschickt wird.
Dein Code kommt mir irgend wie unentschieden vor. Ich sehe zwei Möglichkeiten, die Optionen anzulegen:
1. Mit einer Funktion, die mehrfach aufgerufen wird, so wie Du es jetzt hast
oder
2. Mit einem Array, das Du in einer foreach-Schleife abarbeitest und die Optionen generierst. Letzteres kannst Du natürlich auch in eine Funktion legen, damit Du verschiedene Selects damit anlegen kannst.
Ich stimme dir zu, dass mir einiges Wissen fehlt. Vielleicht mache ich es mir deshalb so schwer. Die Aufgabe zu erledigen.

Ich würde gerne die 1. Möglichkeit mit der eigenen Funktion weiterführen wollen. Aber da bin ich an meinen Grenzen gestoßen, die Unwissenheit ist stark in mir.

Ich versuche mit Beispielen das Verständnis für das Thema zu erhalten.
 

Sempervivum

Erfahrenes Mitglied
Mit der 1. Möglichkeit bist Du schon auf einem guten Wege. Mir ist nur noch nicht klar, was Du mit den POST-Variablen bezwecken willst.
 

Kenney

Mitglied
Leider komme ich aber nicht weiter mit der 1. Möglichkeit.

Gelesen habe ich, diese Möglichkeit der POST-Variable, um Fehler beim erstaufruf des Fomulars zu vermeiden. Es hat funktioniert, was jetzt wirklich dahinter steht, kann ich noch nicht beantworten.
 

m.scatello

Erfahrenes Mitglied
Eigentlich bin ich kein Freund davon, fertige Lösungen zu posten, aber da du in der Lernphase bist und dich in eine umständliche Version verrennst, hier mal eine Möglichkeit:

PHP:
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<title>dynamische Auswahlliste generieren</title>
</head>
<body>
<?php
  function dynAuswahl($name, $data)
  {
    $result = "";
   
    foreach ($data as $value)
    {
       $selected = "";
     
       if (isset($_POST[$name]))
       {
          if (is_array($_POST[$name]))
              $selected = in_array($value, $_POST[$name]) ? "selected" : "";
          else if ($_POST[$name] == $value)
              $selected = "selected";        
       }
     
       $result .= "<option value='$value' $selected>$value</option>\n";
    }
   
    return $result;
  }
?>
<h1>Einkaufsliste:</h1>
<form method="post">
 <p>
  <select id="dynAuswahl" name="dynamisch1" size="">
    <?php
       $data = array("Brot", "Butter", "Milch", "Eier", "Käse", "Wurst");
     
       echo dynAuswahl("dynamisch1", $data);
    ?>
  </select>
  </p>
  <p>
  <select id="dynAuswahl1" name="dynamisch2[]" size="" multiple="">
    <?php
       $data = array("Schrauben", "Nägel", "Haken", "Nadeln", "Dübel");
     
       echo dynAuswahl("dynamisch2", $data);
    ?>
  </select>
  </p>
  <input type="submit" value="Abschicken">
</form>
</body>
</html>
 

Kenney

Mitglied
Eigentlich bin ich kein Freund davon, fertige Lösungen zu posten, aber da du in der Lernphase bist und dich in eine umständliche Version verrennst, hier mal eine Möglichkeit:

PHP:
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<title>dynamische Auswahlliste generieren</title>
</head>
<body>
<?php
  function dynAuswahl($name, $data)
  {
    $result = "";
 
    foreach ($data as $value)
    {
       $selected = "";
   
       if (isset($_POST[$name]))
       {
          if (is_array($_POST[$name]))
              $selected = in_array($value, $_POST[$name]) ? "selected" : "";
          else if ($_POST[$name] == $value)
              $selected = "selected";      
       }
   
       $result .= "<option value='$value' $selected>$value</option>\n";
    }
 
    return $result;
  }
?>
<h1>Einkaufsliste:</h1>
<form method="post">
 <p>
  <select id="dynAuswahl" name="dynamisch1" size="">
    <?php
       $data = array("Brot", "Butter", "Milch", "Eier", "Käse", "Wurst");
   
       echo dynAuswahl("dynamisch1", $data);
    ?>
  </select>
  </p>
  <p>
  <select id="dynAuswahl1" name="dynamisch2[]" size="" multiple="">
    <?php
       $data = array("Schrauben", "Nägel", "Haken", "Nadeln", "Dübel");
   
       echo dynAuswahl("dynamisch2", $data);
    ?>
  </select>
  </p>
  <input type="submit" value="Abschicken">
</form>
</body>
</html>
m.scatello,
es ist sehr nett von dir aber leider ist das mit der eigenen Funktion eine Vorgabe. Ich kann diese nicht so abwandeln.
Du findest meine Version umständlich und ohne Ausweg?
Die dynamische Auswahlliste verlänger bzw. verkürzt sich nicht mit dem Inhalt. Bei Fr1tz, hat nur das funktioniert.
 
Zuletzt bearbeitet:

Neue Beiträge