Zum Inhalt springen
ThreadPHP & MySQL

Daten werden nicht übergeben

Kategorie
PHP & MySQL
Gelesen
3171
Antworten
16
Erstellt von: gelöschter BenutzerDatum: 14.06.2011, 20:06 Uhr
Archiv-KommentarArchiviert, nicht priorisiertCMS & technische Umsetzung

Redaktionelle Einordnung

Diese archivierte Diskussion behandelt Daten werden nicht übergeben aus Sicht der Rubrik PHP & MySQL.

CMS- und Technikfragen sind heute besonders dann relevant, wenn sie Indexierung, Rendering, interne Verlinkung oder Relaunch-Risiken beeinflussen.

Sinnvoll nutzbar bleibt der Thread vor allem als historischer Kontext, für typische Fragestellungen und zur Einordnung älterer Empfehlungen.

Einige im historischen Thread genannte Tools, Dienste oder externe Links könnten heute nicht mehr verfügbar oder inhaltlich überholt sein. Nutzen Sie sie bitte nur mit zusätzlicher Prüfung.

Startbeitrag

Originaler Foreninhalt in modernisierter Darstellung.

Zur Kategorie
gelöschter Benutzer
Threadstart · PHP & MySQL 3171 mal gelesen · 14.06.2011, 20:06 Uhr

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 berprfung noch einmal angezeigt werden.

Das soll eigentlich über folgenden Code laufen:

[html]




berprfen 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 berprfungsseite nicht an. So das logischerweise auch kein Datensatz in die DB geschrieben werden knnte.

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?

Antworten

10 Beiträge
gelöschter Benutzer
am 14.06.2011, 20:59 Uhr schrieb
Antwort

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

gelöschter Benutzer
am 14.06.2011, 21:17 Uhr schrieb
Antwort

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.

gelöschter Benutzer
am 14.06.2011, 22:02 Uhr schrieb
Antwort

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

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

$_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!
gelöschter Benutzer
am 15.06.2011, 13:22 Uhr schrieb
Antwort

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.

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

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

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

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!
Foren Moderator Evil Genius Content Halbgott (973 Beiträge)
am 15.06.2011, 14:25 Uhr schrieb matthes
Antwort

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!
JDev Xer Content Gott (1224 Beiträge)
am 15.06.2011, 14:39 Uhr schrieb romacron
Antwort

@matthes thx..

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

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