Marcus
Avatar Marcus
Themenersteller
Guru (224 Beiträge)

Daten werden nicht übergeben

am 14.06.2011, 20:06 Uhr eröffnete Marcus folgenden Thread
PHP & MySQL    3171 mal gelesen    16 Antwort(en).

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`');
?>



<form action="pruefen.php" method="post" name="form" id="form"> <br> <thead> <br> <tr> <br> <th><b>Angebot</b></th> <br> <th><b>Ort</b></th> <br> <th><b>Ãœbungsleiter</b></th> <br> </tr> <br> </thead> <br><tbody> <br> <tr> <br> <td class="oben"> <br> &lt;select name="Angebot" size="1" id="Angebot"&gt; <br> &lt;?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 '&lt;option value="'.$cat['Angebot'].'"&gt;'.$cat['Angebot'].'&lt;/option&gt;'; <br> } <br> ?&gt; <br> &lt;/select&gt; <br> </td> <br> <td class="oben"> <br> &lt;select name="Ort" size="1" id="Ort"&gt; <br> &lt;?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 '&lt;option value="'.$cat['Ort'].'"&gt;'.$cat['Ort'].'&lt;/option&gt;'; <br> } <br> ?&gt; <br> &lt;/select&gt; <br> </td> <br> <td class="oben"> <br> &lt;select name="Uebungsleiter" size="1" id="Uebungsleiter"&gt; <br> &lt;?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 '&lt;option value="'.$cat['Uebungsleiter'].'"&gt;'.$cat['Uebungsleiter'].'&lt;/option&gt;'; <br> } <br> ?&gt; <br> &lt;/select&gt; <br> </td> <br> </tr> <br></tbody> <br></form>























TageszeitWochentagVonBis

<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">
































Angebot:
<input name="Angebot" txpe="text" size="20" maxlength="20" value="<?php echo $Angebot; ?>">
Ort:<input name="Ort" type="text" size="4" maxlength="3" value="<?php echo $Ort; ?>">
Ãœbungsleiter:<input name="Uebungsleiter" type="text" size="50" maxlength="50" value="<?php echo $Uebungsleiter; ?>" >
Tageszeit<input name="Tagzeit" type="text" size="50" maxlength="50" value="<?php echo $Tagzeit; ?>">
Wochentag<input name="Tage" type="text" size="50" maxlength="50" value="<?php echo $Tage; ?>">
Von<input name="von" type="text" size="50" maxlength="50" value="<?php echo $von; ?>">
Bis<input name="bis" type="text" size="50" maxlength="50" value="<?php echo $bis; ?>">
<input name="Submit" type="submit" id="Submit" value="Absenden">

[/html]

Nur kommt auf der Ãœberprüfungsseite nicht an. So das logischerweise auch kein Datensatz in die DB geschrieben werden könnte.

Woran kann das liegen??

Ich bin schon seit 2 - 3 Stunden am Fehler suchen. Wobei ich mir aber auch nicht sicher bin, ob das so überhaupt funktioniert.

Kann da jemand helfen?


Das Regional-Magazin für Lüneburg und die Region:
salzsau-panorama.de

UFOMelkor
Avatar UFOMelkor
Student
Content Meister (350 Beiträge)
am 14.06.2011, 20:59 Uhr schrieb UFOMelkor

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);
//?>


Naturkosmetik in Bochum

Steppenhahn Ultramarathon-Community

Marcus
Avatar Marcus
Guru (224 Beiträge)
am 14.06.2011, 21:17 Uhr schrieb Marcus

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.


Das Regional-Magazin für Lüneburg und die Region:
salzsau-panorama.de

joerg
Avatar joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
am 14.06.2011, 22:02 Uhr schrieb joerg

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


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools

matthes
Avatar matthes
Foren Moderator
Evil Genius
Content Halbgott (973 Beiträge)
am 14.06.2011, 23:26 Uhr schrieb matthes

$_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.


Make Seitenreport great again!

Marcus
Avatar Marcus
Guru (224 Beiträge)
am 15.06.2011, 13:22 Uhr schrieb Marcus

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.


Das Regional-Magazin für Lüneburg und die Region:
salzsau-panorama.de

romacron
JDev Xer
Content Gott (1224 Beiträge)
am 15.06.2011, 14:19 Uhr schrieb romacron

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


matthes
Avatar matthes
Foren Moderator
Evil Genius
Content Halbgott (973 Beiträge)
am 15.06.2011, 14:22 Uhr schrieb matthes

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.


Make Seitenreport great again!

matthes
Avatar matthes
Foren Moderator
Evil Genius
Content Halbgott (973 Beiträge)
am 15.06.2011, 14:25 Uhr schrieb matthes

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.


Make Seitenreport great again!

romacron
JDev Xer
Content Gott (1224 Beiträge)
am 15.06.2011, 14:39 Uhr schrieb romacron

@matthes thx..



gelöschter Benutzer
am 15.06.2011, 17:21 Uhr schrieb

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




« zurück zu: PHP & MySQL

Das Seitenreport Forum hat aktuell 5273 Themen und 36107 Beiträge.
Insgesamt sind 48345 Mitglieder registriert.