Marcus
Themenersteller
Guru (223 Beiträge)
Mehrere Auswahlfelder und nur ein Submit-Button
Hallo zusammen!
Es würde mich freuen, wenn ich Eure Hilfe in Anspruch nehmen könnte:
Ich habe ein Formular mit mehreren Auswahlfeldern.
Das Formular habe ich nun so umgestaltet, das ich nur noch ein Reset bzw. Submit-Button habe.
Bislang funktioniert es leider nur, wenn man den Wochentag auswählt. Die anderen Auswahlfelder ignoriert die Routine.
<form action="kurssuche.php" method="post" accept-charset="utf-8"> <br> <tr> <br> <td><strong>Angebot:</strong></td> <br> <td width="600"> <br> <br> <select name="searchterm" size="1" id="Angebot" class="select"> <br> <?php <br> //Angebot auslesen <br> $sqlbefehl =" <br> Select distinct <br> Angebot <br> From <br> programm <br> ORDER BY <br> Angebot <br> "; <br> $erg_cats = mysql_query($sqlbefehl)or die(mysql_error().$sqlbefehl); <br> while($cat = mysql_fetch_assoc($erg_cats)){ <br> echo '<option value="'.$cat['Angebot'].'">'.$cat['Angebot'].'</option>'; <br> } <br> ?> <br> </select> <br> <br> <br> </td> <br> <td width="550"> <br> <style="text-align:left;">Der MTV Treubund behält sich das Recht vor,<br> Angebote mit schwacher Resonanz unangekündigt einzustellen <br> </td> <br> </tr> <br> <tr> <br> <td><strong>Ort:</strong></td> <br> <td> <br> <br> <select name="searchterm" size="1" id="Ort" class="select"> <br> <?php <br> //Ort auslesen <br> $sqlbefehl =" <br> Select distinct <br> Ort <br> From <br> programm <br> ORDER BY <br> Ort <br> "; <br> $erg_cats = mysql_query($sqlbefehl)or die(mysql_error().$sqlbefehl); <br> while($cat = mysql_fetch_assoc($erg_cats)){ <br> echo '<option value="'.$cat['Ort'].'">'.$cat['Ort'].'</option>'; <br> } <br> ?> <br> </select> <br> <br> <!--<input type = "submit" value="Suchen" /> <br /> <input type = "reset" value="Abbrechen" /> <br /> </form>--> <br> </td> <br> <td width="550"> <br> <style="text-align:left;">Der MTV Treubund behält sich das Recht vor,die Kurs-Orte bei Bedarf zu wechseln <br> </td> <br> </tr> <br> <tr> <br> <td><strong>Ãœbungsleiter:</strong></td> <br> <td> <br> <br> <select name="searchterm" size="1" id="Uebungsleiter" class="select"> <br> <?php <br> //Ãœbungsleiter auslesen <br> $sqlbefehl =" <br> Select distinct <br> Uebungsleiter <br> From <br> programm <br> ORDER BY <br> Uebungsleiter <br> "; <br> $erg_cats = mysql_query($sqlbefehl)or die(mysql_error().$sqlbefehl); <br> while($cat = mysql_fetch_assoc($erg_cats)){ <br> echo '<option value="'.$cat['Uebungsleiter'].'">'.$cat['Uebungsleiter'].'</option>'; <br> } <br> ?> <br> </select> <br> <br> <br> </td> <br> <td width="700"> <br> <style="text-align:left;">Der MTV Treubund behält sich vor, Kursleiter (auch sehr kurzfristig) auszuwechslen <br> </td> <br> </tr> <br> <tr> <br> <td><strong>Tageszeit:</strong></td> <br> <td> <br> <br> <select name="searchterm" size="1" id="Tageszeit" class="select"> <br> <option value="0">Uhrzeit</option> <br> <option value="Vormittags">08 h - 12 h</option> <br> <option value="Nachmittag">12 h - 18 h</option> <br> <option value="Abends">18 h - 22 h</option> <br> </select> <br> <br> <br> </td> <br> <td width="550"> <br> <style="text-align:left;">mögliche zeitliche Verlegungen durch den MTV Treubund sind nicht ausgeschlossen <br> </td> <br> </tr> <br> <tr> <br> <td><strong>Wochentag:</strong></td> <br> <td> <br> <br> <select name="searchterm" size="1" id="Tage" class="select"> <br> <option value="0">Wochentag</option> <br> <option value="Montag">Montag</option> <br> <option value="Dienstag">Dienstag</option> <br> <option value="Mittwoch">Mittwoch</option> <br> <option value="Donnerstag">Donnerstag</option> <br> <option value="Freitag">Freitag</option> <br> <option value="Samstag">Samstag</option> <br> <option value="Sonntag">Sonntag</option> <br> </select> <br> <br> <br> </td> <br> <td width="550"> <br> <style="text-align:left;">Der MTV Treubund behält sich die örtliche Verlegung von Kursen (bei Bedarf auch sehr kurzfristig) vor <br> </td> <br> </tr> <br> <td></td><td><input name="reset" type="reset" id="reset2" value="Zurücksetzen"> <br> <br> <input type="submit" id="send2" name="send" value="Ergebnisse anzeigen"></td> <br> <td width="12"></td> <br> <br> <br></form>
Funktioniert das nur mit js? Weil dann kann ich es wohl abhaken, da ich mich damit überhaupt nicht auskenne!
Danke im voraus!
Marcus
Das Regional-Magazin für Lüneburg und die Region:
salzsau-panorama.de
matthes
Foren Moderator
Evil Genius
Content Halbgott (973 Beiträge)
Du benutzt gleiche Namen für alle Felder.
Damit bekommt die Variable den Wert des letzten Feldes dieses Namens.
Entweder aus den Namen ein "searchterm[]" machen, dann hast Du die Auswahlen als Array, oder unterschiedliche Namen verwenden.
Du machst das aber nicht beruflich, oder...?
Wenn sowas nicht klappt, lass Dir $_POST ausgeben (var_export, print_r, ...) und lies die Anzeige aufmerksam. In der Regel fällt einem dann schon auf, dass man gleiche Namen verwendet.
Make Seitenreport great again!
Hallo Matthes!
Danke soweit!
Beruflich?
Um Gottes Willen, nee. Ich bastel das in meiner Freizeit, und um das vielleicht mal irgendwann zu lernen.
Beruflich würde ich ja am langen Arm verhungern... *lol*
Das Regional-Magazin für Lüneburg und die Region:
salzsau-panorama.de
gelöschter Benutzer
Dafür brauchst du kein JavaScript. Wie Matthes schon sagte, gib allen Suchkriterien unterschiedliche Bezeichnungen. Danach einfach prüfen welche gesetzt wurden und daraus entsprechend die WHERE Bedingungen bilden für die SQL Abfrage.
So kannst du auch die Anzeige eingrenzen oder besser gesagt die User können gezielter suchen.
JS brauchst du erst wenn du die Ergebnisse direkt einblenden willst ohne die Seite neu zu laden.
Schöne Grüße
Thomas
Hallo Ultima!
Auch Dir Danke für Deine Antwort.
Dann weiß ich schon mal ein wenig weiter. Und da ihr mir bei der Abfrage damals ja auch schon so gut geholfen habt, brauche ich die ja eigentlich \'nur\' entsprechend anzupassen :lol:
Das, denke ich, sollte sogar ich hinbekommen.
Das Regional-Magazin für Lüneburg und die Region:
salzsau-panorama.de
So, ich habs tatsächlich gebacken bekommen.
Aber ich würde gerne noch von den Experten wissen, obs da Optimierungspotenzial gibt. Meistens ist das bei so zusammengeschusterten Code ja der Fall:
if (isset($_POST[\'Angebot\']) && !empty($_POST[\'Angebot\']) || ($_POST[\'Ort\']) && !empty($_POST[\'Ort\']) || ($_POST[\'Uebungsleiter\']) && !empty($_POST[\'Uebungsleiter\']) || ($_POST[\'Tageszeit\']) && !empty($_POST[\'Tageszeit\']) || ($_POST[\'Tage\']) && !empty($_POST[\'Tage\'])) {
$db = mysql_connect("localhost","xxxxx","xxxxx") or die(mysql_error());
mysql_select_db("xxxxx") or die ("Die Datenbank existiert nicht.");
mysql_query(\'SET NAMES `utf8`\');
$begriff = mysql_real_escape_string($_POST[\'Angebot\']. $_POST[\'Ort\']. $_POST[\'Uebungsleiter\']. $_POST[\'Tageszeit\']. $_POST[\'Tage\']);
Danke und Gruß Marcus
Das Regional-Magazin für Lüneburg und die Region:
salzsau-panorama.de
romacron
JDev Xer
Content Gott (1224 Beiträge)
Was auf den ersten Blick auffällt
$_POST vars im Code
zu aller allererst Alle Variablen aus dem $_POST nehmen.
in etwa so:
$validatetPostVars
~~query( (string)$validatetPostVars[\'Angebot\'] .(int)$validatetPostVars[\'leiter\']);
...so diese Richtung.
ggf noch prüfen ob die übergebenen Werte eine maximale Länge nicht übersteigen.
Spassvögel submitten gern eine Textdatei mit 1.99MB.
Damit quält sich das Script
ich glaube Matthes oder Oscar hatten zum Abfangen von Posts und Gets gleich am Anfang des Scripts kommentiert
Hallo Roman!
Wahrscheinlich ein völlig depperte Frage, aber eben Anfänger:
Auch wenn alles nur Select-Felder sind und keine Eingabe-Felder?
Weil das Formular nur aus Aswahlfeldern besteht: Hier zu finden
Gruß
Marcus
Das Regional-Magazin für Lüneburg und die Region:
salzsau-panorama.de
matthes
Foren Moderator
Evil Genius
Content Halbgott (973 Beiträge)
Das kann selbst das schlechteste Scriptkiddie innerhalb einer Minute umbasteln und eigene Werte übergeben.
Wann immer Du Werte vom Besucher erhälst, musst Du sie prüfen und ggf. entschärfen. Egal ob das jetzt GET-Parameter sind, ob Du ein Formular verarbeitest, ob es Cookies sind, oderoderoder. Alle Daten, die von außerhalb kommen, sind potentiell böse, jederzeit.
PS: Wobei Du die POST-Variablen ja durch mysql_real_escape_string jagst, so schlimm ist es dann nicht mehr.
PPS: Entferne doch bitte einer das Passwort aus Marcus\' Codeschnippsel...
Make Seitenreport great again!
Also müsste das ähnlich diesem hier sein:
$sqlbef = "insert into programm (angebot, tage, ort, von, bis, uebungsleiter, tageszeit, zielgruppe, anmerkung) values (\'$angebot\', \'$tage\', \'$ort\', \'$von\', \'$bis\', \'$uebungsleiter\', \'$tageszeit\', \'$zielgruppe\', \'$anmerkung\')";
Nur das das nicht insert into heißt, sondern $Validate PostVars?
Das Regional-Magazin für Lüneburg und die Region:
salzsau-panorama.de
romacron
JDev Xer
Content Gott (1224 Beiträge)
Ja, escaped ist das ganze (glückwunsch)
Von aussen betrachtet, sollte das soweit gehen.
Der Trick warum
$_Post[\'angebot\']
zu
$angebot wird ist recht simple. Du musst die Angebot aus $_Post rausziehen. Dann vilidiert man die Variable gleich mit.
Wenn wie zuerst in der Query $_Post[\'angebot\']; stand, weisst du nicht ob du sie bereits validiert hattest. Eine Variable nicht validiert ist nicht so toll.
Zur Tabellenstruktur:
Es ist üblich mit "id" und "bezeichnung" zu arbeiten
|id|angebot|
|1|gutes angebot|
|2|sonderangebot|
|3|sondersonder ja, auch angebot|
dann in den Angebots select-feldern
<option>
<select value="1">gutes angebot</select>
<select value="2">sonderangebot</select>
</option>
wenn alle Werte über id\'s laufen können die bei der Validierung nach dem Senden
$angebot = (int)$_Post[\'angebot\'];
geschrieben werden (bitte auch escapen m.e gehörts zu ordentlichen Schreibweise)
Die Query
natürlich sollte die id Spalte in der Tabelle als int oder tinyint erstellt sein.
SELECT ~~~ id=`$angebot`
Mit den ziffern als id\'s arbeitet das ganze system schneller direkter und ist im Code weniger anfällig für tippefehler
Addresse
Adresse
adrsse
...usw. 1 ist 1
Das Seitenreport Forum hat aktuell 5275 Themen und 36110 Beiträge.
Insgesamt sind 48360 Mitglieder registriert.
Beitrag erstellen
EinloggenKostenlos registrieren