bedingte Auswahl/ im Formular

schlimbim

Grünschnabel
Hallo,

mein Ziel ist es, einen sogenannten "PC-builder" zu programieren.
meine Vorstellung:
°man hat z.B. 4 Listen/Boxen (html Formular)
°sobald man in der ersten Liste ein Mainboard auswählt, erschein in der zweiten Liste cpu´s, die zu diesem passen. Danach wählt man die Festplatte ( es solen mehrer zur Auswahl stehen), Arbeitsspeicher usw.

ein Beispiel: http://www.nvidia.com/content/drivers/drivers.asp
[PS: durch den Quelltext steig ich leider nicht durch :( ]

Mein Problem:
Ich würde es gern mit php machen, aber ich habe keine Ahnung wie ich das angehen soll?
Müsste man dabei nicht den ersten Wert aus der ersten Auswahl irgendwie zwischen speichern?


ich bin bin für jede Hilfe dankbar :)
 
Das Problem ist, dass PHP eine serverseitige Skriptsprache ist und daher jede einzelne Auswahl serverseitig verarbeitet werden müsste. Dabei könntest du die bisherige Auswahl serverseitig in einer PHP-Sitzung speichern.
Zusätzlich könntest du noch Ajax einsetzen, damit die benötigten Daten im Hintergrund geladen und eingesetzt werden und die Auswahl wie gewünscht in Echtzeit läuft.
 
Aber auch mit PHP geht es. Es dauert halt immer etwas, bis die Seite nachgeladen hat.

Die Daten kannst du über 3 bzw. 4 Wege beim Neuladen übergeben.

1. Über Sessionvariablen http://php.net/session
2. Über Cookies (würde ich mich nicht drauf verlassen, können abgeschaltet werden)

oder
3. über die URL bzw. per Post.

Deine Konfig wirst du wahrscheinlich in einem Array speichern.
Das kannst du dann mit serialize() in einen linearen String verwandeln ihn weitergeben und dann mit unserialize() wieder zum Array machen.

Inwiefern kennst du dich mit PHP aus?
 
Auskennen... ich würde sagen, dass ich noch Änfänger bin, ich hab Grundwissen über Php vermittelt bekommen und sollte schon einmal ein Gästebuch mit mehreren Funktionen schreiben.

Mit diesem Pc-builder, habe ich mich wohl überschätzt :( ,


"3. über die URL bzw. per Post" -->meinst du damit, dass nach der ersten Auswahl einfach per POST auf die nächste Seite gesprungen wird, in der man aus der zweite Box/Liste Hardware auswählen kann?
(...stimmt, eigentlich eine einfache Lösung wenn es so klappen wird:) )


PS: "Das kannst du dann mit serialize() in einen linearen String verwandeln ihn weitergeben und dann mit unserialize() wieder zum Array machen."
--> kling verdammt coll ;) __//jedoch versteh ich davon garNichts :-)
 
Zuletzt bearbeitet:
:-)

Ich versuche es schöner zu erklären.
Gehen wir mal von den drei Feldern wie bei nvidia aus.
Bei der ersten Anfrage des Clients gibt deine PHP Datei die Textfelder aus und befüllt das erste mit den Mainboards. Der Rest bleibt leer.
Nun klickt der Client auf ein's der Boards und löst so einen JavaScript aus, der das Formular versendet (Per POST oder GET; kannst du einstellen)
Der Server schaut nach welches Board gewählt ist und befüllt das zweite Textfeld mit passenden CPU's (ebenfalls mit Javascriptereignis).
Danach könnten z.B. noch Lüfter zur Auswahl stehen.

Mit dieser Variante brauchst du nicht mal Arrays ;) , da bei jedem senden immer alle drei Informationen aus den drei Textfeldern mitgesendet werden.
Wenn der Server dann alle drei Informationen hat könnte er noch einen weiter Button einfügen.

Ich hoffe das hat dir ein wenig Klarheit in meinen Erklärungsversuch gebracht

"3. über die URL bzw. per Post" -->meinst du damit, dass nach der ersten Auswahl einfach per POST auf die nächste Seite gesprungen wird, in der man aus der zweite Box/Liste Hardware auswählen kann?
(...stimmt, eigentlich eine einfache Lösung wenn es so klappen wird )
Das könntest du auch machen, nur müsstest du dann immer einen Zurückbutton einfügen, falls der User z.B. doch ein anderes Board will.

Ps: Denk dran! Es gibt kein zu schwer, es gibt nur ein zu faul. ;)
 
Zuletzt bearbeitet:
Hallo;

ich habe mich für die umsetzung jetzt mit javascript beschäftigt.
Jetzt möchte ich es mit der method="post" variante probieren , damit ich schon mal etwas habe, auf das ich auf bauen kann.

Leider hab ich ein kleines Problem dabei:

ich stelle eine Verbindung zur datenbank her, lese die datensätze aus und lasse diese in einer Liste anzeigen.


PHP:
      <form action="anzeigen_2.php" method="post">

         <select name="mainboard" size="">
<?


	$dbh=mysql_connect("localhost","root","");
	mysql_select_db("pcbuilder");

$sql = "SELECT * FROM mainboard";

$result= mysql_query ($sql);



while ($row=mysql_fetch_array($result)){


?>
  	
<option value=<?php echo $row["anschluss"];?>> <?php echo $row["name"];}  ?>
 </select>

 <br>
<input type="Submit">
<input type="reset">

also in der Liste werden die Mainboards schon richtig angeigt, aber :

<option value=<?php echo $row["anschluss"];?>>

in option value= [soll der Anschluss rein] //ebenso aus der Datenbank

:( bei mir klappt es nicht, ich weiß nicht wie man das anstellen soll.


°selbst wenn ich das so schreibe:

<option value="<?=$row['anschluss']?>"> <?=$row["name"];} ?>

---------------------------------------------------------------------------------------------
und soe sieht anzeigen_2.php aus:

PHP:
<?

         $mainboard=$_POST['mainboard'];
          
if ($mainboard==""){
echo "FEHLER!  Variable ist leer!";};


echo $mainboard;

 ?>
 
Zuletzt bearbeitet:
Möglicherweise enhalten die Werte HTML-Schlüsselzeichen:
PHP:
<?php

	$dbh = mysql_connect('localhost', 'root', '')
		or die('Verbindungsaufbau mit Datenbankserver schlug fehl: '.mysql_error());
	mysql_select_db('pcbuilder')
		or die('Auswahl der Datenbank schlug fehl: '.mysql_error());

	$sql = 'SELECT * FROM mainboard';
	$result = mysql_query($sql)
		or die('Datenbankabfrage schlug fehl: '.mysql_error());

	echo '<select name="mainboard">';
	while( $row = mysql_fetch_assoc($result) ) {
		echo '<option value="'.htmlspecialchars($row['anschluss']).'">'.htmlspecialchars($row['name']).'</option>';
	}
	echo '</select>';

?>
Zusätzlich solltest du vielleicht noch PHPs Fehlermeldungssensibilität höher setzen.
 
Nun gut es functioniert endlich!

also hiermit, kann ich das entsprechende Mainboard auswählen:
PHP:
	<option value="<?=$row['Anschluss']?>"> <?=$row["name"];}  ?>

wird an die zweite PHP Seite geschickt und mit

PHP:
$sql = ("SELECT * FROM festplatte WHERE (Anschluss='$mainboard')");

<option value=""><?=$row["name"];}  ?>

werden mir nur Festplatten angezeigt, die als Anschluss IDE haben.

ABER sobald ich diese Listen um CPU, Arbeitsspeicher erweitern möchte, glaube ich, dass es gar nicht möglich ist.
Denn:

in der Tabelle Mainboard sollen mehrer Anschlüsse gespeichert werden z.B:
Anschluss_festplatte , Anschluss_cpu, Anschluss_arbeitsspeicher.

Das würde bedeuten, dass
PHP:
<option value="<?=$row['Anschluss']?>"> <?=$row["name"];}  ?>

im value= theoretisch alle drei Anschlüsse stehen müssten
z.B.
PHP:
<option value="<?=$row['Anschluss']; $row['Anschluss_cpu']; $row['Anschlus_arbeitsspeicher']?>">

Dann wäre ich aber nicht mehr in der Lage, um diesen Vergleich durchzuführen

PHP:
$sql = ("SELECT * FROM festplatte WHERE (Anschluss='$mainboard')");
:confused:

("also ich hoffe das, dass da Oben verständlich ist")

Deshalb bin ich mir Momentan im Unklaren, wie ich das Script weiter schreiben kann.
 
Mache 2 Listen...eine mit den Mainboards, eine mit den Anschlüssen, dann kann man das gewünschte auswählen...und du Anhand der Auswahl das entsprechende ausgeben.
 
Zurück