PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Auswahlboxen füllen



ramon
11-09-2005, 10:32
Hallo,

ich suche eine gute Anleitung für PHP.
Konkretes Thema :
Ich habe in einem Formular mehrere Auswahlboxen (<select>). Diese fülle ich über Abfragenergebisse aus einer Datenbank.
Wie schaffe ich es, eine Box als Abhängigkeit des Wertes aus der gerade ausgefüllten zu füllen.
Speziell interessiert mich, wo kann ich einstellen, daß die Seite erneut aufgerufen wird, wenn im Selectfeld ein Wert ausgewählt ist, ohne zusätzlich noch einen Submit zu anzuwählen ?

[0x[90]|
11-09-2005, 14:46
Die abhaengigkeit bewirkst du dadruch, dass du eben anfaenglich einen Eintrag der obersten Selectbox auswaehlst und dann die Daten der unteren Selectbox mittels WHERE parent='eintrag des ausgewaehlten eintrags' in die Box einbaust. Somit werden nur die Daten in die Child Box geladen, welche dem derzeit ausgewaehlten Parent angehoeren. Das Reload-On-Change ist eine JavaScript Sache, damit kenne ich zu wenig aus, aber such einmal bei Google, du findest sicher etwas.
Ich mache sowas meistens mittels Change-Button und uebergebe dann den neuen Inhalt des Parents in einer $_POST Variable an die selbige Seite. Im head der Seite checke ich dann, ob die Variable gesetzt wurde, falls nicht, soll fuer $i ein bestimmter Wert eingetragen werden. Falls doch, soll $i = $_POST['..'];. Abschliessend lade ich die Daten des Parents und checke wo $i auftaucht. Dort setze ich in der Form dann noch ein selected damit dies als Ausgewaehlt angezeigt wird. Im Child lade ich dann die daten mit WHERE parent = $i. Fertig. :)

ramon
11-09-2005, 21:29
Hallo,

mit dem Parent kenne ich mich nicht aus.
Funktioniert das den dann auch, wenn ich die Werte, die ich in die darunter angeordnete Select-Box schreiben will in der Datenbank dann ermitteln muß ?

[0x[90]|
11-09-2005, 22:17
Mit dem Parent musst du dich nicht auskennen, das war lediglich eine Bezeichnung von mir. Auf jeden Fall muessen deine Daten in der Datenbank eine Spalte haben, welche auf ihren Parent schliessen laesst. Damit du weisst, welche Child-Eintraege zu welchem Parent kommen.

ramon
12-09-2005, 07:30
Hallo,

das habe ich, durch eine Zuordnungstabelle.
Jetzt weiss ich aber immer noch nicht, wie das Stück php oder html aussehen muß, damit ich nach dem auswählen im Parent-Select (= gopersongruppe) die Seite neu geladen bekomme. Wie die MySQL-Abfrage aussehen muß weiss ich schon.
Derzeit sieht das Select so aus :

<table align="left" >
<tbody>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
<tr>
<td>&nbsp;</td>
<td> <font size="+1" ><b>- nach Personengruppe </b></font></td>
<td valign="top"><SELECT name="gopersongruppe">
<option selected value= "nix"> </option>
<option value=alle>Alle</option>
<?php
for ($j=0;$j<=$persongruppeanzahl-1;$j++) {
echo "<option value=".mysql_result($persongruppe,$j,0).">".mysql_result($persongruppe,$j,0)."</otion>\n";
}
?></SELECT></td>
<td><?php echo "Anzahl = ".$persongruppeanzahl; ?></td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td> <font size="+1" ><b>- nach Person </b></font></td>
<td valign="top"><SELECT name="goperson">
<option selected value="nix"> </option>
<option value=alle>Alle</option>
<?php
for ($j=0;$j<=$personanzahl-1;$j++) {
echo "<option value=".mysql_result($person,$j,0).">".mysql_result($person,$j,0)."</otion>\n";
}
?></SELECT></td>
<td><?php echo "Anzahl = ".$personanzahl; ?></td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>


Stör dich nicht an den leeren Tabellenfeldern, das Ganze ist in eine größere Tabelle eingefügt und ich möchte, daß alles an einem bestimmten Platz ist.
Die MySQL-Abfrage $person ist derzeit leer, weil ich zum Abfragezeitpunkt noch keinen wert für 'gopersongruppe' habe.

[0x[90]|
12-09-2005, 14:48
Codes kommen in [ code ]-tags :)
Ausserdem ist der Code schlimm, sehr schlimm. Tables sollen vermieden werden, wenn moeglich, da sie das layout brechen koennen. Ausserdem ist dein MySQL Code auch nicht atemberaubend. Uhm, ich sehe schon, ich komme hier mit blosser theorie nicht weiter. Hier ein Beispiel:



<html>
<head>
<title>Beispiel</title>
</head>
<body>
<?php

if(isset($_POST['parent']) and $_POST['parent']!="")
$parent_id = $_POST['parent'];
else
$parent_id = 0;

echo "<form action=\"".$SCRIPT_NAME."\" method=\"post\" enctype=\"text/plain\">";

echo "<select name=\"parent\" size=\"0\">";
$query ="SELECT parent_id, parent_name FROM parents ORDER BY parent_id ASC";
$result=mysql_query($query);
while(list($p_id,$p_name) = mysql_fetch_row($result))
{
echo "<option value=\"$p_id\"";
if($parent_id == $p_id) echo " selected";
echo ">$p_name</option>";
}
mysql_free_result($result);
echo "</select><br/>";

echo "<select name=\"child\" size=\"0\">";
$query ="SELECT child_id, child_name FROM childs WHERE child_parent = '$parent_id' ORDER BY child_id ASC";
$result=mysql_query($query);
while(list($c_id,$c_name) = mysql_fetch_row($result))
{
echo "<option value=\"$c_id\">$c_name</option>";
}
mysql_free_result($result);
echo "</select><br/>";

echo "<input name=\"change\" type=\"submit\" value=\"Change\"/>";

echo "</form>";

?>
</body>
</html>


Das ding habe ich kurz zusammengeschrieben und nicht getetestet, es sollte aber funktionieren.

ramon
12-09-2005, 17:21
danke,

werde es sofort ausprobieren.