Auswahl aus einem Pulldown speichern

fotia1980

Mitglied
Hallo Leute,

habe ein Problem, bei dem ich nicht weiter komme. Ich hoffe ich kann es verständlich erklären:

Ich möchte ein Formular erstellen unter anderem mit 2 Pulldown Menüs wobei man beim ersten die Kategorie auswählt und in Abhängigkeit dieser Auswahl sollen dann im zweiten Pulldown die entsprechenden Unterkategorien auftauchen! Das klappt auch soweit.

Nun das eigentliche Problem: Nach dem der Filter nun die Unterkategorien im zweiten Pulldown korrekt aufgelistet hat, springt im ersten Pulldown die auswahl wieder auf den ersten Eintrag und bleibt nicht auf den zuletzt gewählten Wert stehen!

Daraus resultiert das Problem, sobald ich dann das Formular an die Datenbank weitergeben will. wir natürlich nicht der Wert der Richtigen Kategorie übergeben sondern immer der Wert der ersten Kategorie.

Ich habe mal meinen Code mit gepostet, damit das etwas verständlicher wird.

PHP:
<?php
	include("dbconnect.inc.php");
	
	$LoadSection = $_POST['Section'];
	
	$SubSection = $_POST['SubSection'];
	$content = $_POST['content'];
?>

<form id="form1" name="form1" method="post" action="">
<?php
if (isset($_POST["senden"])) 
{ 
	echo "$LoadSection <br>";
	echo "$SubSection <br>";
	echo "$content";
} else { 
?><p> Section:
          <select name="Section" id="Section">
            <?php
   $sql = "SELECT id, name FROM HP_Section ORDER BY ID ASC ";
   $result = mysql_query($sql);
   while ($rows = mysql_fetch_object($result)){
      echo '<option value="'.$rows->id.'">'.$rows->name.'</option>';
   }
	?>
          </select>
          <label>
            <input type="submit" name="Sectionsubmit" id="Sectionsubmit" value="laden">
          </label>
        </p>
        <p> Untermenü:
          <select name="SubSection" id="SubSection">
            <?php
   $sql = "SELECT id, name FROM HP_SubSection WHERE section_id = $LoadSection ORDER BY id ASC ";
   $result = mysql_query($sql);
   while ($rows = mysql_fetch_object($result)){
	   
      echo '<option value="'.$rows->id.'">'.$rows->name.'</option>';
   }
	?>
          </select>
        </p>
        <p>
          <label> Text<br />
            <textarea name="content" id="content" cols="45" rows="5"></textarea>
          </label>
          <br />
        </p>

<input name="senden" type="submit" />
<label>
  <input type="reset" name="löschen" value="löschen">
</label>
</form>
<?php }?>
wie bekomme ich nun das erste Pulldown dazu, auf dem vorab ausgewählten Wert stehen zu bleiben?
 
Du musst den gewählten Wert in der Liste beim erneuten Laden wieder markieren.

Ungetestet, aber es müsste so aussehen:

PHP:
echo '<option value="'.$rows->id.'" ($_POST['selection'] == $rows->id) ? 'selected' : ''>'.$rows->name.'</option>';
 
@tombe
Danke für den Tipp, aber ich blicke nicht hinter die Logik des Codes. :-(

Desweiteren kommt in der Zeile wo dieser Code steht der Fehler:

Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in /homepages/31/d153414705/htdocs/2011/admin/test.php on line 27

vor allem dieser Teil
PHP:
($_POST['selection'] == $rows->id) ? 'selected' : ''>
verwirrt mich! Könntest du mir das bitte erklären?
 
Zuletzt bearbeitet:
Nein das Bezog sich auf die Zeile die mir tombe gepostet hat, das was ich gepostet habe ist ein Teil einer Zeile, weil ich gerade diese Passage nicht verstehe, deshalb war kein ";" am Ende

Ich weiß insbesondere nicht was das "?" und der ":" in der Zeile herkommt und was diese machen sollen, denn im reinen HTML Code kommen diese beim "selected" nicht vor!

vielleicht bin ich auch zu Blöde aber ich blick das nicht so wirklich, wie ich die Auswahl im Pulldown erneut lade
 
Zuletzt bearbeitet:
Oh sorry, hab ich übersehen. Versuch es mal so:

PHP:
echo '<option value="'.$rows->id.'"' .($_POST['selection'] == $rows->id ? ' selected="selected"' : '') . '>'.$rows->name.'</option>';
 
Zuletzt bearbeitet:
Ich weiß insbesondere nicht was das "?" und der ":" in der Zeile herkommt und was diese machen sollen, denn im reinen HTML Code kommen diese beim "selected" nicht vor!

Richtig, die kommen deshalb nicht im HTML vor, weil das PHP-Code ist. Man nennt diese verkürzte if-Abfrage auch ternär.

Beispiel:

Man kann notieren

PHP:
if( $a == 1 )
{
  echo "a ist eins";
}
else
{
  echo "a ist nicht eins";
}

oder so:

PHP:
echo $a == 1 ? 'a ist eins' : 'a ist nicht eins';

Sieht komplizierter aus, als es ist ;-)
 
Du kannst damit eine Bedingungen kürzer schreiben:
PHP:
$foo = true;
$output = '';
if( $foo ){
  $output = 'foo ist true';
}
else{
  $output = 'foo ist false';
}

// Gleich zu
$foo = true;
$output = ($foo)?'foo ist true' : 'foo ist false';
 
Zurück