letzte Auswahl im Selector "merken"

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

Zvoni

Erfahrenes Mitglied
Und da fällt dir nichts auf?
Nur mal überflogen (und von html habe ich keine Ahnung, davon aber jede Menge):
a) das erste BR Tag steht in einfachen Gänsefüsschen
b) die option "selected" ist ein boolean, du weist aber einen text zu, und zwar bei jedem einzelnen Eintrag, also auch beim letzten. Vermutung: html ignoriert alles was nach "selected" kommt (also ='selected') und interpretiert es als "wahr", ergo ist letzter Eintrag selected

EDIT: Müsste mMn so aussehen:
das letzte <BR> ist auch falsch. Fehlt Schrägstrich und an falscher Position
und "selected" kommt jetzt nur bei der Option rein, welche zuletzt gewählt wurde.
In meinem Beispiel "North America"
HTML:
Region <select name ='auswahl' id = 'auswahl'>
<br>
<option value = 'Antarctica'>Antarctica</option>
<option value = 'Australia and New Zealand'>Australia and New Zealand</option>
<option value = 'Baltic Countries'>Baltic Countries</option>
<option value = 'British Islands'>British Islands</option>
<option value = 'Caribbean'>Caribbean</option>
<option value = 'Central Africa'>Central Africa</option>
<option value = 'Central America'>Central America</option>
<option value = 'Eastern Africa'>Eastern Africa</option>
<option value = 'Eastern Asia'>Eastern Asia</option>
<option value = 'Eastern Europe'>Eastern Europe</option>
<option value = 'Melanesia'>Melanesia</option>
<option value = 'Micronesia'>Micronesia</option>
<option value = 'Micronesia/Caribbean'>Micronesia/Caribbean</option>
<option value = 'Middle East'>Middle East</option>
<option value = 'Nordic Countries'>Nordic Countries</option>
<option value = 'North America' selected>North America</option>
<option value = 'Northern Africa'>Northern Africa</option>
<option value = 'Polynesia'>Polynesia</option>
<option value = 'South America'>South America</option>
<option value = 'Southeast Asia'>Southeast Asia</option>
<option value = 'Southern Africa'>Southern Africa</option>
<option value = 'Southern and Central Asia'>Southern and Central Asia</option>
<option value = 'Southern Europe'>Southern Europe</option>
<option value = 'Western Africa'>Western Africa</option>
<option value = 'Western Europe'>Western Europe</option>
</select>   
<br>
 
Zuletzt bearbeitet:

m.scatello

Erfahrenes Mitglied
Leider hat Zvoni dir jetzt alles vorgekaut, allerdings reden wir hier von Grundlagen, die man sich mit Hilfe von w3schools sich durchaus selber aneignen kann, wenn man denn wollte. Siehe z.B. HTML option selected Attribute

Und da du überall selected stehen hast, kann der Fehler ja nur hier liegen:
PHP:
$selected = $auswahl==$daten ? "selected='selected'" : "";

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.
 

Zvoni

Erfahrenes Mitglied
Leider hat Zvoni dir jetzt alles vorgekaut, allerdings reden wir hier von Grundlagen, die man sich mit Hilfe von w3schools sich durchaus selber aneignen kann, wenn man denn wollte. Siehe z.B. HTML option selected Attribute

Und da du überall selected stehen hast, kann der Fehler ja nur hier liegen:
PHP:
$selected = $auswahl==$daten ? "selected='selected'" : "";
scatello
ich übertreibe nicht, wenn ich sage, dass ich von html oder php keine Ahnung habe.
Ist wirklich so,
aber nach Eingabe in Google von "html option selected" bin ich genau auf deinem Link zu W3Schools gelandet, und da reichte ein Blick auf das Beispiel
 

m.scatello

Erfahrenes Mitglied
aber nach Eingabe in Google von "html option selected" bin ich genau auf deinem Link zu W3Schools gelandet, und da reichte ein Blick auf das Beispiel
Richtig, und warum kann das @phpnewguest nicht? Ich bin kein Freund davon, immer gleich fertige Lösungen zu liefern, wenn es sich um so simple Gundlagen handelt. Im Endeffekt wird dann per Copy/Paste alles übernommen, ohne überhaupt zu verstehen, warum das so ist und was der Quellcode macht.
 

Zvoni

Erfahrenes Mitglied
Das hier kommt mir auch sehr seltsam vor:
PHP:
$auswahl = isset($_POST['auswahl']) ? isset($_POST['auswahl']) : "";
isset gibt doch boolean zurück
Hätte sowas erwartet (damit $auswahl dann auch den Wert der Auswahl bekommt, und nicht True)
PHP:
$auswahl = isset($_POST['auswahl']) ? $_POST['auswahl'] : "";
Weil dann sollte das hier funktionieren
PHP:
$selected = $auswahl==$daten ? "selected" : "";

EDIT: Wobei das hier ja eigentlich auch Quatsch ist
PHP:
$auswahl = isset($_POST['auswahl']) ? $_POST['auswahl'] : "";
einfach direkt
PHP:
$auswahl = $_POST['auswahl'];
Wenn nix ausgewählt ist, gibt $_POST['auswahl'] eh nen leeren String zurück
Oder verstehe ich das falsch?
 
Zuletzt bearbeitet:

phpneuling_

Grünschnabel
vielen Dank,
Es funktioniert jetzt.
Das isset war das Problem. Nein, eigentlich war ich es, da ich es nicht gesehen habe.
Danke euch :)
 

m.scatello

Erfahrenes Mitglied
Wenn nix ausgewählt ist, gibt $_POST['auswahl'] eh nen leeren String zurück
Oder verstehe ich das falsch?
Jein, aber wenn die Seite über den Browser das erste Mal aufgerufen wird, ist $_POST nicht gesetzt und mit
PHP:
$auswahl = $_POST['auswahl'];
würdest du trotzdem darauf zugreifen. PHP wird dann meckern, aber das würde man auch nur sehen, wenn das Error-Reporting hochgedreht ist. Daher sollte man das schon mit isset prüfen.
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…