Formular in Ordnung - Bestätigungsseite Kauderwelsch
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
bild
code
datenbank
email
ergebnis
fehler
fehlermeldung
formular
header
hilfe
http
kauderwelsch
message
sagen
schau
text
type
verbindung
zeile
-
Liebe Community,
ich habe sage und schreibe ein Formular gebastelt, das nach dem Abschicken eine dynamische PHP-Bestätigungsseite anzeigt. Das Absenden hat soweit wunderbar geklappt, wie mir mein Postfach schließlich zeigte. Dann allerdings habe ich versucht die $name-Variable in doppelten Anführungszeichen zu schreiben, damit Vor- und Nachname mit einem Leerzeichen getrennt sind.
So weit, so schlecht. Jetzt geht gar nichts mehr. Also habe ich den String wieder zum Ursprungstand zurückgeführt. Noch immer funktioniert es nicht mehr.
Allerdings erhalte ich nach dem Absenden keine Fehlermeldung, sondern Kauderwelsch:
http://createtheweb.lima-city.de/kauderwelsch.JPG
Für den Fall, dass ich schon wieder Mist mache, weil keine Bilder o.ä. gepostet werden dürfen (was mich dann aber wundern würde, warum Youtube-Videos zugelassen sind), dann erkläre mir bitte einer, wie ich das auf dem Bild dargestellten in Worte fassen soll, bitte.
Beitrag zuletzt geändert: 17.3.2010 0:31:11 von createtheweb -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
fatfreddy schrieb:
Sorry, alle Glaskugeln sind zur Inspektion.
Ohne den Code deines Skriptes zu kennen wird Hilfe kaum möglich sein. Kauderwelsch, erst recht als Jpeg-Bild wird hie niemand übersetzen und ergründen können.
FF
Ich hatte gehofft, dass es einen bestimmten, bekannten Fehler in solchen Skripten gibt, der sonen Kram zur Folge hat. Schade.
Hier 'mein' Skript (aus nem Lehrbuch abgeschrieben und eigenen Bedürfnissen angepasst):
<?php $firstname = $_POST['firstname']; $lastname = $_POST['lastname']; $name = $_POST['firstname'] .''. $_POST['lastname']; $email = $_POST['email']; $comment = $_POST['comment']; $an = 'email@serverdeinerwahl.de'; $betreff = 'Post from your website'; $message = "$name schreibt folgende Nachricht: $comment"; mail($an, $betreff, $message, 'From:' . $email); echo "Success!<br />"; echo 'Your message could have been sent.<br />'; echo "You wrote: <p><span font-style='italic'>$comment</span></p>"; ?>
-
Das script sieht eigentlich ganz normal aus.
Wahrscheinlich "weiß" der Webserver nicht welchen Documenttyp und welche Zeichencodierung er ausliefern soll, und der Browser auch nicht ...
Schau dir bei deiner Seite, dann wenn der "Kauderwelsch" angezeigt wird, doch einmal den "Seietenquelltext" an.
(rechte Maustaste auf die Seite -> Quelltext anzeigen)
das sollte am anfang ein Header stehen.
z.B. der header von lima-city:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <base href="http://www.lima-city.de/" /> <title>Formular in Ordnung - Bestätigungsseite Kauderwelsch </title> <link rel="stylesheet" type="text/css" href="/css/all.css" /> <link rel="shortcut icon" href="/images/layout/favicon.ico" type="image/x-icon" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="robots" content="index,follow" /> <meta http-equiv="content-language" content="de" /> </head>
Der Doctype (html) und der charset (utf-8) werden hier unter anderem eingestellt.
Wie sieht der header Deiner Kauderwelsch-Seite aus ? -
Das ganze Drumherum des Skripts habe ich der Übersicht wegen erst einmal weggelassen. Hier ist er:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Thank you!</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <?php ?> </body> </html>
Mir geht halt das Verständnis ab, wieso die Bestätigungseite nicht mehr funktioniert. Ich habe ja lediglich die Definition für $name verändert. Und als dann dieser Kauderwelsch auftauchte, hab ich die Veränderung rückgängig gemacht. Ohne Erfolg.
Zum besseren Verständnis:
Statt:
$name = $_POST['firstname'] .''. $_POST['lastname'];
Hatte ich
verändert, damit ich ein Leerzeichen zwischen Vor- und Nachname habe.$name = "$_POST['firstname'] $_POST['lastname']";
Beitrag zuletzt geändert: 17.3.2010 22:27:53 von createtheweb -
Das ist sehr seltsam.
Es sieht alles gut aus.
es müßte also funktionieren ...
Schau' Dir am besten nocheinmal mit "Quelltext anzeigen" an was eigentlich bei Deinem Browser ankommt.
Ich war mal eben auf deiner Seite da kommt (Als Kauderwelsch weil fälschlich als UTF-16 erkannt da kein header ...)
<br /> <b>Parse error</b>: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in <b>/home/webpages/lima-city/createtheweb/html/warum.php</b> on line <b>18</b><br />
Beitrag zuletzt geändert: 18.3.2010 20:53:11 von franco-bez -
franco-bez schrieb:
(Als Kauderwelsch weil fälschlich als UTF-16 erkannt da kein header ...)
YEAH!
Jetzt hab ich die Charsetangabe im Header durch UTF-8 ersetzt. Und es funktioniert wieder!
Dabei habe ich herausgefunden, dass nicht auf den eigenen Webspace zugegriffen werden kann, wenn man gerade mit dem ftp-Client darauf zugreift. Wer Lust und Zeit hat, kann mir gerne erklären warum das so ist. Für meine Ausbildung lohnt sichs sicher.
Vielen Dank für die viele Hilfe. Vielleicht spinnt mein Formular in ein paar Minuten wieder - dann bin auch ich wieder zurück. :)
Edit: Und zack. Jetzt habe ich wieder Kauderwelsch und verliere so langsam die Geduld. Ich habe jetzt statt der Mailfunktion einfach eine Verbindung zur Datenbank hergestellt. Die funktioniert. Nur wird die Seite wieder als UTF-16 erkannt - obwohl ich sie als utf-8 definiert habe. Wieso klappt das bei der Mailseite, aber nicht bei der Datenbankverbindung?
Ich verzweifle langsam aber sicher
Beitrag zuletzt geändert: 23.3.2010 23:37:50 von createtheweb -
Ich vermute ja dass der header nicht gesendet wird, da die Fehlermeldung zuerst ausgeliefert wird.
Versuche doch einmal den header mit Hife der php Funktion header() zu setzen:
http://php.net/manual/de/function.header.php
header('Content-Type: text/html; charset=utf-8');
-
Einen Fehler habe ich im HTML-Teil gefunden:
Zur zeit sieht es so aus:
<meta http-equiv="Content-Type" content="text/html; charset="utf-8" />
Und so ist es richtig:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Wenn ich das Formular so auf meiner Website habe, und die Daten an dein Script schicke kommt folgender Fehler:
Parse error: syntax error, unexpected T_STRING in /home/webpages/lima-city/createtheweb/html/warum4.php on line 20
[edit:]
In verbindung mit dem Script "warum.php" funktioniert es:
Beispiel...
Beitrag zuletzt geändert: 24.3.2010 10:07:39 von thomasba -
franco-bez schrieb:
Ich vermute ja dass der header nicht gesendet wird, da die Fehlermeldung zuerst ausgeliefert wird.
Versuche doch einmal den header mit Hife der php Funktion header() zu setzen:
http://php.net/manual/de/function.header.php
header('Content-Type: text/html; charset=utf-8');
Das werde ich jetzt wohl auch tun.
thomasba schrieb:
Einen Fehler habe ich im HTML-Teil gefunden:
Liegt nicht daran. Ich habe es auch schon groß geschrieben. Bringt nix. Klein funktioniert 'utf-8' im Skript warum.php übrigens trotzdem.
Dass es mit warum.php funktioniert, mit warum3.php jedoch nicht, das ist ja die Krux - weil und obwohl beide denselben Header haben. -
createtheweb schrieb:
Liegt nicht daran. Ich habe es auch schon groß geschrieben. Bringt nix. Klein funktioniert 'utf-8' im Skript warum.php übrigens trotzdem.
Es ist auch gar nicht die Großschreibung, sonder vielmehr das Anführungszeichen zu viel ;)
Dass es mit warum.php funktioniert, mit warum3.php jedoch nicht, das ist ja die Krux - weil und obwohl beide denselben Header haben.
Wie sieht denn die warum3.php aus, da ist ein Fehler drin ;) -
Ich hab keine Lust mehr. Hier ist der Code.
Sage mir jemand bitte, warum der gottverdammte FF das Charset UTF-8 nicht erkennen möchte. Warum er sich quasi dagegen wehrt.
<?php header("Content-Type: text/html; charset=utf-8"); /*Variablen*/ $firstname = $_POST['firstname']; $lastname = $_POST['lastname']; $name = '$_POST['firstname'] $_POST['lastname']'; $email = $_POST['email']; $comment = $_POST['comment']; /*Datenbankverbindung*/ $db = mysql_connect('mysql.lima-city.de','USER******','Passwort','db_******_1') or die('Mit der Verbindung stimmt etwas nicht.'); $sql = "INSERT INTO uebung (firstname, lastname, email, blubb)". "VALUES ('$firstname', '$lastname', '$email', '$comment')"; $ergebnis mysql_query($db,$sql) or die('Fehler bei Datenbankabfrage'); mysql_close($db); /*Echotext*/ echo "Success!<br />"; echo 'Your message could have been sent.<br />'; echo "You wrote: <p><span font-style='italic'>$comment</span></p>"; ?>
PS: Es ist der gesamte Code, ich habe nichts ausgespart (abgesehen von intimen Infos).
Fehler in Zeile 13, gibt er übrigens aus.
Beitrag zuletzt geändert: 28.3.2010 21:51:00 von createtheweb -
$name = '$_POST['firstname'] $_POST['lastname']';
ist fehlerhaft:
$name = $_POST['firstname'].' '.$_POST['lastname'];
-
iniquitius schrieb:
$name = $_POST['firstname'].' '.$_POST['lastname'];
Gut, gut. Die Zeile 13 wird nun nicht mehr als fehlerhaft angezeigt. Jetzt steht da: "Fehler bei Datenbankabfrage". Nächster Spaß...
@theseven: auch dir vielen Dank. Ich kann Hinweise auf Codingfehler als Neuling gut gebrauchen.
Beitrag zuletzt geändert: 28.3.2010 22:23:08 von createtheweb -
Eben in jener Zeile, wo du das Ergebnis der mysql-Abfrage an $ergebnis zuweist, fehlt ein "=".
Vermutlich interpretiert PHP die Sache dort bisher als:
$ergebnis or die ('....');
Das führt immer in den die-Pfad, weil $ergebnis nicht initialisiert, ergo FALSE ist. -
iniquitius schrieb:
Eben in jener Zeile, wo du das Ergebnis der mysql-Abfrage an $ergebnis zuweist, fehlt ein "=".
Vermutlich interpretiert PHP die Sache dort bisher als:
$ergebnis or die ('....');
Das führt immer in den die-Pfad, weil $ergebnis nicht initialisiert, ergo FALSE ist.
Das =-Zeichen habe ich inzwischen ergänzt. Es kam nach der Lösung für Zeile 13 noch ein Fehler für Zeile 29. Da fiels mir dann auf.
Meinst du mit "$ergebnis nicht initialisiert", dass sie nicht weiter verwendet wird im Skript, oder wie?
Noch wird nämlich noch die die('...')-Meldung ausgegeben. -
Geb dir das SQL-Statement mal per echo aus, ohne es auszuführen, dann führe es im PHPMyAdmin aus und schau, welcher Fehler entsteht.
Ein potenzieller Fehler entsteht, wenn der Nutzer im Kommentar ein Apostroph setzt. Dann zerhaut er deine gesamte Anwendung. Außerdem ist es sehr unsicher, Eingaben von Nutzer direkt in eine Datenbank zu schreiben.
Deswegen empfiehlt es sich, mal nach mysql_real_escape_string() zu googlen :)
"Nicht initialisiert" bedeutet:
Eine Variable hat vor ihrer ersten Nutzung keinen konkreten Wert.
Führe einfach mal folgenden Code aus und schau, was passiert:
<?php echo '_'.$testVar.'_'; if (!$testvar) { echo "Testvar ist nicht gesetzt"; } else { echo "Testvar ist gesetzt"; } ?>
Beitrag zuletzt geändert: 28.3.2010 23:49:33 von iniquitius -
Deinen Vorschlag den Fehler zu finden werde ich beherzigen.
Allerdings sei an dieser Stelle gesagt: Ich bin totaler PHP-Neuling übe gerade mit einem Lehrbuch, dass einem die Möglichkeiten mit PHP aufzeigen soll und einfachste Dinge programmieren lässt. Sicherheit ist hier noch zu vernachlässigen, da es rein um das Kennenlernen geht.
Trotzdem Danke für den Hinweis!
Wenn ich erstmal mein Formular mit Datenbankeintrag zum Laufen bekommen habe, schau ich mir die Tücke mit dem Apostroph mal genauer an.
Wenn ich den Fehler gefunden habe, meld ich mich wieder. Wenn nicht, dann auch.
PS: Danke für die Erklärung.
----------------
Es funktioniert endlich. Die Zeichencodefehler sind behoben, ich habe keine Syntaxfehler, die das Skript scheitern lassen und es werden die Formulardaten endlich in die Datenbank übertragen.
Zunächst wurde ja immer die Nachricht des Querys angezeigt, also war klar, dass hier der Fehler liegt. Mit Hilfe einer Abfrage, die zugleich den Fehler ausgibt, wurde dann erkannt, woran es lag. Der Fehler war, dass das Skript nicht wusste, welche Datenbank ich gerade anwählen möchte. Hierzu musste ich dann die Zeile
mysql_select_db("db_******_1", $meine);
einfügen.
Und schwupps. Das war fehlende Teil.
Ich werde heute gut schlafen.
Beitrag zuletzt geändert: 29.3.2010 0:41:25 von createtheweb -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage