PHP Formular dropdown

phoenix430

Lt. Commander
Registriert
Juni 2008
Beiträge
1.446
Hallo zunächst einmal. Ich bin anfänger und probiere (learning by doing) ein bisschen rum. Ich habe bei mir xampp und mysql drauf.
So nun zu meinem "Problem". Ich habe ein Formular mit dropdown Feldern erstellt( 11dropdowns). Die Dropdowns werden mit Daten aus der SQL Datenbank gefüllt(funktioniert auch).
Meine Frage ist wie kann ich die Ergebnisse übermitteln lassen? Wäre Nett, wenn mir jemand einen Stoß in die richtige Richtung geben könnte ( ich möchte keine fertige Lösung).
Ich poste euch mal meinen Code:
PHP:
<?php
$root=mysql_connect("Server", "Benutzer", "Passwort");
mysql_select_db("mediathek");

function Liste ($abfrage){
   $ergebnis = mysql_query($abfrage);
   $anzeige = array();
while($row = mysql_fetch_object($ergebnis))
   {
   $anzeige[] = $row->bezeichnung;
   }
foreach($anzeige as $value){
   echo '<option value="'.$value.'">'.$value.'</option>';
   }
}

echo '
<form>
Typ: <select name="top1" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
Liste ("SELECT bezeichnung FROM kat_typ INNER JOIN titel ON kat_typ.id = titel.KAT_typ GROUP BY kat_typ.id");
echo '</select>';
echo '
Titel enthält <input type="text" name="suche" size="40"/> ';
echo '
Herausgeber enthält <select name="top2" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
Liste ("SELECT Herausgeber AS bezeichnung FROM titel WHERE (Herausgeber IS NOT NULL AND Herausgeber <>'') GROUP BY Herausgeber");
echo '</select>';
echo '
Ort enthält <select name="top3" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
Liste ("SELECT Ort AS bezeichnung FROM titel WHERE (Ort IS NOT NULL AND Ort <>'') GROUP BY Ort");
echo '</select>';
echo '
Standort enthält <select name="top4" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
Liste ("SELECT Standort AS bezeichnung FROM titel WHERE Standort IS NOT NULL GROUP BY Standort");
echo '</select>';
echo '
Beschreibung enthält <input type="text" name="suche" size="40"/> ';
echo '
Begleitmaterial enthält <input type="text" name="suche" size="40"/> ';
echo '
Art <select name="top5" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
Liste ("SELECT Bezeichnung AS bezeichnung FROM kat_art INNER JOIN titel ON kat_art.ID = titel.KAT_art GROUP BY kat_art.ID");
echo '</select>';
echo '
Fachbereich <select name="top6" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
Liste ("SELECT Bezeichnung AS bezeichnung FROM kat_fachbereich INNER JOIN titel ON kat_fachbereich.ID = titel.KAT_fachbereich GROUP BY kat_fachbereich.ID");
echo '</select> ';
echo '
Schwierigkeit <select name="top7" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
Liste ("SELECT Bezeichnung AS bezeichnung FROM kat_schwierigkeit INNER JOIN titel ON kat_schwierigkeit.ID = titel.KAT_schwierigkeit WHERE(kat_schwierigkeit.Bezeichnung IS NOT NULL AND kat_schwierigkeit.Bezeichnung <> '') GROUP BY kat_schwierigkeit.ID");
echo '</select> ';
echo '
Komponist enthält <select name="top8" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
Liste ("SELECT Komponist AS bezeichnung FROM titel WHERE (Komponist IS NOT NULL AND Komponist <> '')GROUP BY Komponist");
echo '</select> ';
echo '
Verlag enthält <select name="top9" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
Liste ("SELECT Verlag AS bezeichnung FROM titel WHERE (Verlag IS NOT NULL AND Verlag <> '')GROUP BY Verlag");
echo '</select> ';
echo '
Bezeichnung <select name="top10" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
Liste ("SELECT Bezeichnung AS bezeichnung FROM kat_besetzung INNER JOIN titel ON kat_besetzung.ID = titel.KAT_besetzung GROUP BY kat_besetzung.ID");
echo '</select> ';
echo '
Genre <select name="top11" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
Liste ("SELECT Bezeichnung AS bezeichnung FROM kat_genre INNER JOIN titel ON kat_genre.ID = titel.KAT_Genre WHERE(kat_genre.Bezeichnung IS NOT NULL AND kat_genre.Bezeichnung <>'') GROUP BY kat_genre.ID");
echo '</select>
</form>';
?>
 
ein form element sieht in HTML so aus <form action="xxx" method="xxx">

action - entspricht dabei die seite, die aufgerufen wird, wenn man das Formular abschickt, dort werden dann die Formulardaten verarbeitet

method - hier kannste zwischen "post" und "get" wählen, entsprechend kannst du im nächsten Step dann mit den globalen PHP Variablen $_POST oder $_GET darauf zugreifen. Zur Info, wenn du "get" nimmst, werden die Daten beim absenden mit an die URL gehängt, bei "post" sieht der User seine Eingaben nicht mehr, dies läuft dann im Hintergrund ab
 
Du mußt deinem <form>-Tag noch ein paar Infos mitgeben: die "action" und die "method". Bei "action" trägst du den URL zu dem Skript ein, das die Daten bekommen soll. Bei "method" entweder "get" oder "post", was dann bestimmt, auf welche Art die Daten geschickt werden. "get" hängt sie einfach an den URL an, "post" macht das anders (und ist daher bei größeren Datenmengen besser).

Das sieht dann z. B. so aus:
Code:
<form action="skript.php" method="post">

In der Datei skript.php kannst du die Daten dann aus den vordefinierten Variablen $_GET bzw. $_POST (je nachdem, was du bei form method eingetragen hast) auslesen. Dabei handelt es sich um Arrays, und $_POST['feldname'] enthält den Wert aus dem Eingabefeld mit dem name-Attribut "feldname". Beachte: Dafür darf natürlich jeder Feldname nur einmal in deinem Formular vorkommen. Ich sehe da oben z. B. mehrere Textfelder mit dem Namen "suche". Die würden sich gegenseitig in die Quere kommen.

Edit: Bißchen langsam gewesen ;)
 
Vielen Dank für die Antworten. Ich werde es mal probieren. Ich hoffe ich darf mich bei fragen wieder melden :)
Ergänzung ()

Vielen dank ich kann nun die Werte aus den textfeldern und aus den dropdowns übermitteln.
Ich habe dazu eine ausgabe.php erstellt.

Ich habe nun einmal
Formular
PHP:
<?php
$root=mysql_connect("Server", "Benutzer", "Passwort");
mysql_select_db("mediathek");

function Liste ($abfrage){
   $ergebnis = mysql_query($abfrage);
   $anzeige = array();
while($row = mysql_fetch_object($ergebnis))
   {
   $anzeige[] = $row->bezeichnung;
   }
foreach($anzeige as $value){
   echo '<option value="'.$value.'">'.$value.'</option>';
   }
}

echo '
<form action="ausgabe.php" method="post">
Typ: <select name="typ" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
Liste ("SELECT bezeichnung FROM kat_typ INNER JOIN titel ON kat_typ.id = titel.KAT_typ GROUP BY kat_typ.id");
echo '</select>';
echo '
Titel enthält <input type="text" name="titel" size="40"/>';
echo '
Herausgeber enthält <select name="herausgeber" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
Liste ("SELECT Herausgeber AS bezeichnung FROM titel WHERE (Herausgeber IS NOT NULL AND Herausgeber <>'') GROUP BY Herausgeber");
echo '</select>';
echo '
Ort enthält <select name="ort" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
Liste ("SELECT Ort AS bezeichnung FROM titel WHERE (Ort IS NOT NULL AND Ort <>'') GROUP BY Ort");
echo '</select>';
echo '
Standort enthält <select name="standort" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
Liste ("SELECT Standort AS bezeichnung FROM titel WHERE Standort IS NOT NULL GROUP BY Standort");
echo '</select>';
echo '
Beschreibung enthält <input type="text" name="beschreibung" size="40"/> ';
echo '
Begleitmaterial enthält <input type="text" name="begleitmaterial" size="40"/> ';
echo '
Art <select name="art" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
Liste ("SELECT Bezeichnung AS bezeichnung FROM kat_art INNER JOIN titel ON kat_art.ID = titel.KAT_art GROUP BY kat_art.ID");
echo '</select>';
echo '
Fachbereich <select name="fachbereich" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
Liste ("SELECT Bezeichnung AS bezeichnung FROM kat_fachbereich INNER JOIN titel ON kat_fachbereich.ID = titel.KAT_fachbereich GROUP BY kat_fachbereich.ID");
echo '</select> ';
echo '
Schwierigkeit <select name="schwierigkeit" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
Liste ("SELECT Bezeichnung AS bezeichnung FROM kat_schwierigkeit INNER JOIN titel ON kat_schwierigkeit.ID = titel.KAT_schwierigkeit WHERE(kat_schwierigkeit.Bezeichnung IS NOT NULL AND kat_schwierigkeit.Bezeichnung <> '') GROUP BY kat_schwierigkeit.ID");
echo '</select> ';
echo '
Komponist enthält <select name="komponist" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
Liste ("SELECT Komponist AS bezeichnung FROM titel WHERE (Komponist IS NOT NULL AND Komponist <> '')GROUP BY Komponist");
echo '</select> ';
echo '
Verlag enthält <select name="verlag" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
Liste ("SELECT Verlag AS bezeichnung FROM titel WHERE (Verlag IS NOT NULL AND Verlag <> '')GROUP BY Verlag");
echo '</select> ';
echo '
Bezeichnung <select name="bezeichnung" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
Liste ("SELECT Bezeichnung AS bezeichnung FROM kat_besetzung INNER JOIN titel ON kat_besetzung.ID = titel.KAT_besetzung GROUP BY kat_besetzung.ID");
echo '</select> ';
echo '
Genre <select name="genre" id="dropdown">
<option value="0" selected="selected">Bitte wählen</option>';
Liste ("SELECT Bezeichnung AS bezeichnung FROM kat_genre INNER JOIN titel ON kat_genre.ID = titel.KAT_Genre WHERE(kat_genre.Bezeichnung IS NOT NULL AND kat_genre.Bezeichnung <>'') GROUP BY kat_genre.ID");
echo '</select>
<input type="submit" value="Suche starten" name="abschicken">
</form>';
?>
und
ausgabe
PHP:
<?php
$titel=$_POST['titel'];
echo $titel;
$beschreibung=$_POST['beschreibung'];
echo $beschreibung;
$begleitmaterial=$_POST['begleitmaterial'];
echo $begleitmaterial;
$typ=$_POST['typ'];
echo $typ;
$herausgeber=$_POST['herausgeber'];
echo $herausgeber;
$ort=$_POST['ort'];
echo $ort;
$standort=$_POST['standort'];
echo $standort;
$art=$_POST['art'];
echo $art;
$fachbereich=$_POST['fachbereich'];
echo $fachbereich;
$schwierigkeit=$_POST['schwierigkeit'];
echo $schwierigkeit;
$komponist=$_POST['komponist'];
echo $komponist;
$verlag=$_POST['verlag'];
echo $verlag;
$besetzung=$_POST['besetzung'];
echo $besetzung;
$genre=$_POST['genre'];
echo $genre;
?>
Ich würde jetzt gerne nach den Ausgabewerten in der Datenbank suchen. Also wenn man z.B. im drop down CD und Mozart eingibt, dann soll mir im Ergebniss alles was mit Mozart und CD zu tun hat ausgegeben werden.
Kann mir jemand dazu auch vlt einen kleinen Schubs in die richtige Richtung geben?
 
Zuletzt bearbeitet:
Problem noch aktuell?

Mit $_POST['bezeichnung'] hast du nun ja zugriff auf die Formulardaten. Diese Daten musst du nun in ein SELECT Befehl packen und den SELECT auf MySQL ausführen. So kommst du zum Ergebnis aus der DB, diese Ergebnismenge muss du nun noch verarbeiten und wieder ausgeben bzw. darstellen.

Ein bisschen Detaillierter im Spoiler...
$SelectQuery = „SELECT * FROM tbl_name WHERE name LIKE‘“.$_POST[‘name’].”’;”;
Jetzt noch Query ausführen, testen ob Abfrage ein Ergebnis gibt und Ergebnismenge ausgeben.
Je nach Tabellen must du alle entsprechenden bzw. beteiligten Tabellen halt noch „joinen“.
 
Hallo Volcem

Vielen Dank für deinen Input. Du hasst natürlich recht, ist "nicht schön" bzw. gefährlich POST & GET direkt in ein SQL Statment einzufügen. Für den Anfang und zum "herum testen" gehts aber auch so.

Habe mir am Anfang beim herumtesten auch noch keine Gedanken zu SQL Injections gemacht. Das wird dann "Thema" wenn es "ernst" wird. War zumindes bei mir so... Am Anfang sollte es in erster Linie "mal funktionieren ohne viel Aufwand".

$SelectQuery = „SELECT * FROM tbl_name WHERE name LIKE‘“.$_POST[‘name’].”’;”;
Jetzt noch Query ausführen, testen ob Abfrage ein Ergebnis gibt und Ergebnismenge ausgeben.
Je nach Tabellen must du alle entsprechenden bzw. beteiligten Tabellen halt noch „joinen“.

NEU, da Hinweis von Volcem:
BESSER die POST Werte zuerst in Variablen speichern und überpüfen mit diversen Funktionen und Methoden -> THEMA: "SQL Injections". Erst danach entsprechend "sicher" in ein SQL Statment einbauen.
 
Natürlich sollte es auch "erstmal" funktionieren... Doch.. Wenn man sich das von Anfang an angewöhnt es richtig zu schreiben bzw paar Sachen zu beachten, hat man später keine Probleme.
 
Zurück
Oben