<a href="-online-1"></a> <a href="-online-2"></a> <a href="-online-4"></a> <a href=""></a> <a…
von:
VPNwelt.com sucht Feedback Wie der Name schon sagt handelt es sich um eine Review Website für…
von: florian.berg.privat
Hallo zusammen!
Ich habe folgendes Anliegen:
Aus einer Datenbank werden über verschiedene SELECT-Boxen die entsprechenden Daten angezeigt.
Das passiert mit folgendem Code <?php
$db = mysql_connect("localhost","db","password") or die(mysql_error());
mysql_select_db("db") or die ("Die Datenbank existiert nicht.");
mysql_query('SET NAMES `utf8`');
?>
| Tageszeit | Wochentag | Von | Bis | |
|---|---|---|---|---|
<select name="Tagzeit" size="1" id="Tagzeit"> <option value="vormittags">vormittags</option> <option value="nachmittags">nachmittags</option> <option value="abends">abends</option> </select> | <select name="Tage" size="1" id="Tage"> <option value="Montag">Montag</option> <option value="Dienstag">Dienstag</option> <option value="Mittwoch">Mittwoch</option> <option value="Donnerstag">Donnerstag</option> <option value="Freitag">Freitag</option> <option value="Samstag">Samstag</option> <option value="Sonntag">Sonntag</option> </select> | <input name="von" type="text" size="10" maxlength="8"> | <input name="bis" type="text" size="10" maxlength="8"> | <input type="submit" value=" Absenden "> <input type="reset" value=" Abbrechen"> |
Das sieht so aus.
Nun möchte ich es erreichen, das aus diesen Angaben ein neuer Datensatz zusammengestellt werden kann. Mit der händischen Eingabe der Uhrzeit von bis.
Die Daten sollen zur Überprüfung noch einmal angezeigt werden.
Das soll eigentlich über folgenden Code laufen:
[html]
| Überprüfen Sie Ihre Eingaben: <form action="senden.php" method="post" name="form" id="form">
|
Hast du mal überprüft, ob die Daten überhaupt ankommen? <?php
var_dump($_POST);
//?>
Mein Tipp für dein Problem wäre: Du setzt deine Variablen nicht. Wenn, was ich sehr hoffen will, register_globals deaktiviert ist, musst du die einzelnen Werte erst noch zuordnen: <?php
$Angebot = $_POST[\'Angebot\'];
//?>
Zudem solltest du alle Daten aus der Datenbank bzw. die vom User stammen unbedingt escapen, bevor du sie ausgibst: <?php
print htmlspecialchars($Angebot);
//?>
Hi!
Danke schon mal für deine Antwort!
Globals sind Off,
In der Bildschirmanzeige des zweiten Formular werden die Daten über den Dump ausgegeben, wie sie im vorherigen Bildschirm eingegeben wurde. Muss sie jezt also \'nur noch\' über das Formular angezeigt bekommen.
Das mit dem Escape schnall ich irgendwann auch noch.
Danke schonmal soweit.
Hallo
Das wären dann ja wohl nur noch die Uhrzeiten die man derzeit modifizieren oder überprüfen müsste. Oder man setzt an der Stelle halt eben auch eine Auswahl ein.
Aus <input name="Angebot" txpe="text" size="20" maxlength="20" value="<?php echo $Angebot; ?>">
müsste wohl <input name="Angebot" txpe="text" size="20" maxlength="20" value="<?php echo $_POST[\'Angebot\']; ?>">
werden. Und halt eben analog bei den anderen Feldern vorgehen.
Also Fehler Nummer eins nicht mit error Reporting gearbeitet, dann wären die nicht initiierten Variablen aufgefallen.
Tabbellendesign ist etwas stark übertrieben für so ein einfaches Formular und sich etwas mit HTML und CSS zu beschäftigen wäre wohl nicht das übelste.
Gruß
Jörg
$_POST[\'Angebot\'] (und jede andere wiederverwendete Variable) aber dann bitte prüfen und ggf. filtern, um Cross-Site-Scripting und ähnlichem Schabernack keine Türen zu öffnen.
Hallo zusammen!
Vielen Dank für Eure hilfreichen Tipps.
Ich hab das gestern abend noch durch echo $_POST["Angebot"] selbst soweit hinbekommen, das er das im Prüfformular anzeigt und mithilfe einer dritten Datei zumindest meldet, er hätte das in die DB eingetragen.
Bei dem Test ist das anscheinend nicht passiert.
Wobei ich da jetzt mal eine vermutlich völlig blöde Frage habe:
Folgendes ist der Inhalt der Datei, die die Daten in die DB schreiben soll - nach Vorbild aus dem I-Net) <?php
$db=mysql_connect("localhost","db", "password") or exit ("Keine Verbindung hergestellt!");
mysql_select_db("db") or exit ("Datenbank nicht geöffnet!");
$sqlbef = "insert into DB-Tabelle(angebot, tage, Ort, von, bis, Uebungsleiter, Tageszeit) values (\'$Angebot\', \'$Tage\', \'$Ort\', \'$von\', \'$bis\', \'$Uebungsleiter\', \'$Tageszeit\')";
$sqlerg = mysql_query($sqlbef, $db);
if ($sqlerg)
echo"Datensatz hinzugefügt!";
else
echo"Kein Datensatz hinzugefügt!";
mysql_close($db);
?>
Muss die Reihenfolge in der Klammer hinter dem sqlerg so sein, wie die wirkliche Reihenfolge in der DB ist? Oder spielt die keine Geige?
Das mit der Uhrzeit habe ich jetzt auch über ein select-Feld gelöst.
Daher eine zweite Frage hintendran:
Erreiche ich mit dem folgenden Befehl, das die beiden Select-Felder als Beispiel bei \'Von\' in der DB zusammengefasst werden zu hh:mm:00? $von = $_POST["Stunde"] . \':\' . $_POST["min"] . \':00\';
Das da die Tabelle überflüssig ist, streite ich nicht ab. Und das da ein bisschen CSS auch gut tun würde auch nicht.
Das sind für mich aber momentan zweitrangige Dinge, da ich jetzt erstmal schauen wollte, ob ich das überhaupt hinbekomme.
Das wird keine öffentlich zugängliche Geschichte, sondern soll Passwortgeschützt von der Geschäftsstelle eines Sportvereins bearbeitet werden können.
Insert überträgt gewiss keine Daten
"insert into DB-Tabelle(angebot, tage, Ort, von, bis, Uebungsleiter, Tageszeit) values (\'$Angebot\', \'$Tage\', \'$Ort\', \'$von\', \'$bis\', \'$Uebungsleiter\', \'$Tageszeit\')";
/*zum Vergleich*/
$dummyVar="dummyvar";
$tester=$dummyVar;
echo $tester;
$tester="$dummyVar";
echo $tester;
$tester=\'$dummyVar\';
echo $tester;
$tester="\'$dummyVar\'";
echo $tester;
das Problem sind hier die singlequots and doubleqoutes
Zu Frage 1:
Wenn du die Felder angibst, ist die Reihenfolge egal, du ordnest die Felder und Werte durch "(Feldx, Feldy) values (Wertx, Werty)" einander zu.
Man kann die Auflistung der Felder auch weglassen, dann musst du aber die Reihenfolge einhalten und für jedes Feld in der Tabelle auch einen Wert übergeben.
Der Codeschnippsel sieht eigentlich auch korrekt aus...
Zu Frage 2:
Ja.
romacron schrieb:
das Problem sind hier die singlequots and doubleqoutes
Wieso? Die Variablen werden korrekt aufgelöst, es sind ja Doublequotes außen, also stellen die Singlequoutes innen kein Problem dar.
@matthes thx..
Matthes schrieb:
Man kann die Auflistung der Felder auch weglassen, dann musst du aber die Reihenfolge einhalten und für jedes Feld in der Tabelle auch einen Wert übergeben.
Damit sollte man erst gar nicht Anfangen, wenn man eine Tabelle erweitert (die meisten Projekte wachsen) kann man dann erst mal einige SQL-Statements korrigieren. Je nach Umfang des Projektes kann das schon mal einige Zeit dauern. Das selbe gilt für SELECT *, so praktisch es auch ist, verwenden sollte man es trotzdem nie.
Gruß Thomas
Beitrag erstellen
EinloggenKostenlos registrieren