• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Formular kleiner Fehler?

Johannes

Neues Mitglied
Guten Abend liebe HTML- und PHPler,

ich möchte ein Formular zur Eintragung in meiner Datenbank ertsllen bzw. habe es schon erstellt.
Nun weiß ich aber nicht wo der Fehler ist - könnt ihr mir helfen?:
Der Fehler muss im folgenden Bereich liegen (wenn ich nur firma, anrede, vornamebenutzer schreibe funktioniert es, auch wenn ich firma, anrede, namebenutzer schreibe - aber bei mehr als 3 sachen sagt er Es ist ein Fehler aufgetreten, es wurde kein Datensatz hinzugefügt) :

$sqlab = "insert tabelle1"
. "(firma, anrede, "
. "vornamebenutzer, namebenutzer,"
. "email, telefon,"
. "strbenutzer, hausnummerbenutzer,"
. "plzbenutzer, ortbenutzer) values "
. "('" . $_POST["firma"] . "', "
. "'" . $_POST["anrede"] . "', "
. "'" . $_POST["vornamebenutzer"] . ", "
. "'" . $_POST["namebenutzer"]
. "'" . $_POST["email"] . ", "
. "'" . $_POST["telefon"] . ", "
. "'" . $_POST["strbenutzer"] . ", "
. "'" . $_POST["hausnummerbenutzer"] . ", "
. "'" . $_POST["plzbenutzer"] . ", "
. "'" . $_POST["ortbenutzer"] . "')";

Hier das vollständige PHP Programm:

<?php
if (isset($_POST["gesendet"]))
{
mysql_connect("host","benutzer","passwort");
mysql_select_db("dbname");
$sqlab = "insert tabelle1"
. "(firma, anrede, "
. "vornamebenutzer, namebenutzer,"
. "email, telefon,"
. "strbenutzer, hausnummerbenutzer,"
. "plzbenutzer, ortbenutzer) values "
. "('" . $_POST["firma"] . "', "
. "'" . $_POST["anrede"] . "', "
. "'" . $_POST["vornamebenutzer"] . ", "
. "'" . $_POST["namebenutzer"]
. "'" . $_POST["email"] . ", "
. "'" . $_POST["telefon"] . ", "
. "'" . $_POST["strbenutzer"] . ", "
. "'" . $_POST["hausnummerbenutzer"] . ", "
. "'" . $_POST["plzbenutzer"] . ", "
. "'" . $_POST["ortbenutzer"] . "')";
mysql_query($sqlab);
$num = mysql_affected_rows();
if ($num>0)
{
echo "<p><font color='#00aa00'>";
echo "Es wurde 1 Datensatz hinzugefügt";
echo "</font></p>";
}
else
{
echo "<p><font color='#ff0000'>";
echo "Es ist ein Fehler aufgetreten, ";
echo "es wurde kein Datensatz hinzugefügt";
echo "</font></p>";
}
}
?>
 
$result = mysql_query($query) or die(mysql_error()); damit kannste dir ma ne gescheite Fehlermeldung ausgeben lassen. Dazu bitte auf PHP Fehler anzeigen lassen.

Was soll das denn für ein Query sein warum zerpflügst du das so und warum nutzt du font-Tags? Und dein Script ist komplett unsicher > SQL-Injection

Zudem gibt es hier im Forum BB-Tags und es trägt ungemein zur Lesbarkeit bei, wenn man diese zur Formatierung von PHP und HTML Code auch nutzt.
 
Ich bin leider noch ein Anfänger und die Grundstruktur stammt aus einem PHP Buch - ich habe im Prinzip nur meine Dateneingaben die ich senden möchte geändert.
Könnt ihr mir bitte speziell sagen was ich wo verbessern könnte.
 
Das MySQL stimmt schon nicht. Es muss heißen:

INSERT INTO tabelle1 () VALUES()

und du kannst nicht 10 Werte an 5 Spalten übergeben.
 
Wenn ich das richtig verstanden habe so? Aber es funktioniert noch nicht-oder habe ich noch Fehler:
Vielen Dank für eure Hilfe - ich bin halt noch ein Anfänger.

<?php
if (isset($_POST["gesendet"]))
{
mysql_connect("host","benutzer","passwort");
mysql_select_db("dbname");
$sqlab = "insert into tabelle1"
. "(firma, "
. "anrede, "
. "vornamebenutzer, "
. "namebenutzer,"
. "email, "
. "telefon,"
. "strbenutzer, "
. "hausnummerbenutzer, "
. "plzbenutzer, "
. "ortbenutzer) values "
. "('" . $_POST["firma"] . "', "
. "'" . $_POST["anrede"] . "', "
. "'" . $_POST["vornamebenutzer"] . ", "
. "'" . $_POST["namebenutzer"]
. "'" . $_POST["email"] . ", "
. "'" . $_POST["telefon"] . ", "
. "'" . $_POST["strbenutzer"] . ", "
. "'" . $_POST["hausnummerbenutzer"] . ", "
. "'" . $_POST["plzbenutzer"] . ", "
. "'" . $_POST["ortbenutzer"] . "')";
mysql_query($sqlab);
$num = mysql_affected_rows();
if ($num>0)
{
echo "<p><font color='#00aa00'>";
echo "Es wurde 1 Datensatz hinzugefügt";
echo "</font></p>";
}
else
{
echo "<p><font color='#ff0000'>";
echo "Es ist ein Fehler aufgetreten, ";
echo "es wurde kein Datensatz hinzugefügt";
echo "</font></p>";
}
}
?>
 
Hast du denn die zusätzlichen Felder in deiner Tabelle1 in der Datenbank auch zugefügt, sonst kann da nicht reingeschrieben werden.

Das Html ist auch noch nicht korrekt:
echo "<p><font color='#00aa00'>";
echo "Es wurde 1 Datensatz hinzugefügt";
echo "</font></p>";

Richtig:
echo "<p style='color='#ff000''>Es wurde 1 Datensatz hinzugefügt</p>";

siehe: de.selfhtml.org/css/formate/direkt.htm

Wenn dass nur ein Übungsbeispiel ist, ist es in Ordnung, sonst nicht.
 
Danke - schon geändert.
Ja, die Namen sind auch in der Tabelle vorhanden - aber es funktioniert trotzdem nicht - hat jemand eine Idee warum?
 
Sind noch Fehler drin, die du selber sehen könntest.

Der Aufbau sieht folgendermassen aus:
INSERT INTO tablename (col1, col2) VALUES('data1', 'data2' )

Das heisst alle Text-Werte (man spricht hier von String) müssen in Hochkommata stehen wenn es keine Zahlen sind die als Zahlen auch gespeichert werden. Bei dir fehlen aber nach Anrede die benötigten Hochkommata, somit kommt es zur Fehlermeldung. Überprüfe immer deine Syntax auf Schreibfehler.
 
Also ich verstehe diese Vorgehensweise einfach nicht. Da wird immer versucht, mit PHP gleich etwas relativ komplexes zu erreichen und dann kommt das Heulen und Zähneklappern, wenn es nicht klappt. Zerlege dein Problem erst mal in einfache Einzelprobleme:
1) Versuche mittels MySql-Admin erst mal interaktiv das richtige SQL-Statement zu finden.
2) Nimm das erzeugte Statement (hardkodiert) ins PHP und versuche es auszuführen.
3) Gib einfach mit PHP das dynmisch erstellte SQL aus, statt es auszuführen.
Wenn alles klappt und die Aufrufe korrekt sind, dann führe die Teillösungen wieder zusammen.
 
Und kümmere dich um die schon angesprochenen (ka9de) SQL-Injections. Das ist ein wirklich zentraler Sicherheitsaspekt bei SQL-Queries.

(Kommen vielleicht – hoffentlich – aber in dem Buch noch dran.)

Nitpicking:

PHP:
echo "<p style='color: #ff0000;'>Es wurde 1 Datensatz hinzugefügt</p>";
 
PHP:
<?php
if (isset($_POST["gesendet"]))
{
mysql_connect("host","benutzer","passwort");
mysql_select_db("dbname");
if ($sqlab =$mysqli->prepare ("INSERT INTO tabelle1
(firma, "
. "anrede, "
. "vornamebenutzer, "
. "namebenutzer,"
. "email, "
. "telefon," 
. "strbenutzer, "
. "hausnummerbenutzer, "
. "plzbenutzer, "
. "ortbenutzer) VALUES (?,?,?,?,?,?,?,?,?,?)")) 
{ $stmt->bind_param("ssssssssss",
 ."'".   $_POST["firma"] . "', "
. "'" . $_POST["anrede"] . "', "
. "'" . $_POST["vornamebenutzer"] . ", "
. "'" . $_POST["namebenutzer"] 
. "'" . $_POST["email"] . ", "
. "'" . $_POST["telefon"] . ", "
. "'" . $_POST["strbenutzer"] . ", "
. "'" . $_POST["hausnummerbenutzer"] . ", "
. "'" . $_POST["plzbenutzer"] . ", "
. "'" . $_POST["ortbenutzer"] . "')";
}
$stmt->execute();
mysql_query($sqlab);
$num = mysql_affected_rows();
if ($num>0)
{
echo "<p><font color='#00aa00'>";
echo "Es wurde 1 Datensatz hinzugefügt";
echo "</font></p>";
}
else
{
echo "<p><font color='#ff0000'>";
echo "Es ist ein Fehler aufgetreten, ";
echo "es wurde kein Datensatz hinzugefügt";
echo "</font></p>";
}
}

$stmt->execute();
$stmt->close();
mysql->close();?>

So wenn schon

Ich versteh nicht was das . "'" . $_POST["hausnummerbenutzer"] . ", " mit dem . "'" . soll
???
Guck in dem Buch nochmal nach.
Außerdem ist das Script schon so falsch.
Naja schreib mir mal wie das Buch heißt, wenn das Script nicht läuft kann ich dir noch 100000 andere Scripttemplates für Formulare empfehlen!!!
Am Besten ist MYSQl und PHP ansatztweise lernen und dann fragen. ;-)
 
Zuletzt bearbeitet:
Ich verstehe auch nicht, warum Prepared Statements in Verbindung mit mysql() eingesetzt werden. Wenn man sich schon den Aufwand macht, warum dann nicht gleich PDO verwenden? Und HTML in PHP einzubetten gilt als schlechter Stil.

Wie NetAktiv bereits erwähnte: Erst einmal die Dateneingabe im MySQLAdmin testen, danach das Formular mittels var_dump() ausgeben, anschließend die Verbindung in PHP aufbauen und zum Schluss alle Bestandteile zusammenfügen.
 
Der Hinweis auf Prepared Statements ist natürlich gut, aber der Code, den du gepostet hast, passt leider vorne und hinten nicht.
 
Der Hinweis auf Prepared Statements ist natürlich gut, aber der Code, den du gepostet hast, passt leider vorne und hinten nicht.
Ist mir auch aufgefallen. Ich konnte aber nichts mit den ganzen . "'" . anfangen und bei
PHP:
if ($sqlab =$mysqli->prepare ("INSERT INTO tabelle1
müsste
PHP:
if ($stmt =$mysqli->prepare ("INSERT INTO tabelle1
stehen. Was ist denn sonst falsch ?
mRgAWGnGQwUuS2NZSa43WtRwEA3EDMsS20SAQA7
 
Ergänzend zu den Punkten, die du schon genannt hast:

Es wird zum mysql-Adapter verbunden, nicht zu mysqli. Weiter unten werden weitere mysql-Befehle genutzt, $stmt wird zweimal ausgeführt.

Und na ja, bei bind_param sind die Stringbegrenzer und Kommas eben ziemlich über. Es ist ja gerade der Sinn der Methode, die nicht von Hand setzen zu müssen.
 
Liebe Forumsmitglieder, vielen Dank für die zahlreichen Tipps:
JETZT FUNKTIONIERT ES DANKE :) es lag an den Hochkommatas.

Ist mein Code jetzt vor SQL Injections geschützt durch die Änderung zu
( echo "<p style='color='#ff000''>Es wurde 1 Datensatz hinzugefügt</p>"; ) ?
 
Zuletzt bearbeitet:
Jetzt habe ich nur noch eine Frage:

Ich möchte das ein vollständiger Eintrag in die Datenbank in 3 Schritten verläuft - das heißt erst Formular 1 dann Formular 2 dann Formular 3 auszufüllen ist. Alle Daten der 3 Formulare sollen aber in einem Datensatz also einer Reihe gespeichert werden.
Wie funktioniert dies?
 
Entweder mit einem INSERT und 2 anschließenden UPDATE oder du übergibst dem zweiten und dritte Formular jeweils die Daten aller vorhergehenden Formulare, zB über hidden Inputs.

Ist mein Code jetzt vor SQL Injections geschützt durch die Änderung zu
( echo "<p style='color='#ff000''>Es wurde 1 Datensatz hinzugefügt</p>"; ) ?

Hast du dir angeguckt was SQL Injections sind? Frage mich nämlich, was dein stück Quelltext damit zu tun hat.
 
Achso ja, ich hatte das falsch verstanden.
Lösung wären doch Prepared Statements?
Ich muss nochmal genau schauen wie ich das umsetzte - danke :) wenn du Zeit hast wäre ein Bsp. anhand des PHP Codes nett.
Hat das mit übergeben von Variablen zu tun? $namebenutzer = $_POST["namebenutzer"];
[h=1][/h]
 
Zurück
Oben