Seite 1 von 2

Daten werden nicht eingetragen

Verfasst: 05.12.2006 15:19
von langeweile
ich habe für meinen lateinkurs ein kleines script für vokabelabfragen geschrieben, das geht auch.
ich habe dafür jetzt eine seite erstellt, bei der man vokabeln hinzufügen kann, mit diesem script:

Code: Alles auswählen

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method=post>
Latein:<input type="text" name="latein" size="40" maxlength="80"><br>
Deutsch:<input type="text" name="deutsch" size="40" maxlength="80"><br>
Wortart:<input type="text" name="wortart" size="40" maxlength="80"><br>
Genitiv Sg.:<input type="text" name="genitiv" size="30" maxlength="80">
Genus:<input type="text" name="genus" size="5" maxlength="1"><br>
Nomintaiv m.:<input type="text" name="nominativ_m" size="30" maxlength="80">
Nomintaiv f.:<input type="text" name="nominativ_f" size="30" maxlength="80">
Nomintaiv n.:<input type="text" name="nominativ_n" size="30" maxlength="80"><br>
Präsens Aktiv:<input type="text" name="praesens_a" size="30" maxlength="80">
Perfekt Aktiv:<input type="text" name="perfekt_a" size="30" maxlength="80">
PVP:<input type="text" name="pvp" size="30" maxlength="80">
<input type="submit" value="Absenden">
</form>
<?php
include ("dbconnect.php");
$latein = $_POST['latein'];
$deutsch = $_POST['deutsch'];
$wortart = $_POST['wortart'];
$genitiv = $_POST['genitiv'];
$genus = $_POST['genus'];
$nominativ_m = $_POST['nominativ_m'];
$nominativ_f = $_POST['nominativ_f'];
$nominativ_n = $_POST['nominativ_n'];
$praesens_a = $_POST['praesnes_a'];
$perfekt_a = $_POST['perfekt_a'];
$pvp = $_POST['pvp'];
if ($latein == "" or $deutsch == "" or $wortart == "")
{
echo "Bitte fülle alle benötigten Felder aus";
}
else
{
if ($wortart == "nomen" || $wortart == "adjektiv" || $wortart == "pronomen" || $wortart == "verb" || $wortart == "adverb" || $wortart == "praeposition" || $wortart == "konjunktion" || $wortart == "zahlwort"){
$db_update = 'INSERT INTO `Vokabeln` (`latein`, `deutsch`, `wortart`, `genitiv`, `genus`, `nominativ_m`, `nominativ_f`, `nominativ_n`, `praesens_a`, `perfekt_a, pvp`) 
VALUES ('. $latein .', '. $deutsch .', '. $wortart .', '. $genitiv .', '. $genus .', '. $nominativ_m .', '. $nominativ_f .', '. $nominativ_n .', '. $praesens_a .', '. $perfekt_a .', '. $pvp .')';
$db_update_now = mysql_query($db_update);
}
else
{
echo "Bitte gib eine gültige Wortart an";
}
}
?>



beim aufrufen bzw. absenden kommt zwar keine fehlemeldung, aber es wird auch nichts in die db eingetragen wie kann ich den fehler beheben?

Verfasst: 05.12.2006 15:32
von StarWolf3000
befindet sich in der dbconnect.php das hier:

Code: Alles auswählen

mysql_select_db("deine_datenbank");
?

Verfasst: 05.12.2006 16:50
von langeweile
ja steht es, gibts vllt. irgendwas was ich an den tabellen in der datenbank ganz bestimmt einstellen muss, damit es funktioniert?

Verfasst: 05.12.2006 17:33
von Iopodx
$db_update_now = mysql_query($db_update);

Mach daraus mal

$db_update_now = @mysql_query($db_update) OR die(mysql_error());

Dann sollte ein Fehler angezeigt werden...

MfG
Iopodx

Verfasst: 05.12.2006 17:36
von gn#36
Ich wage zu behaupten dass der Sql Code nicht ganz richtig ist. Text muss mit Anführungszeichen versehen werden, das ist aber bei dir nicht passiert.

Ändere mal die Sql Anweisung in

Code: Alles auswählen

$db_update_now = mysql_query($db_update) OR die("SQL FEHLER:<br>" . mysql_error() . "<br><br>SQL Code:<br>" . $db_update);
dann wird dir angezeigt was du für einen Syntaxfehler gemacht hast.

Außerdem solltest du - falls du auf die Idee kommst das frei ins Web zu stellen das ganze gegen SQL Injection schützen. (-> mysql_real_escape_string())

Verfasst: 05.12.2006 17:57
von langeweile
ich habs so geändert, wie gn#36 das vorgeschlagen hat, wenn ich jetzt auf absenden klicke, kommt folgende meldung

Code: Alles auswählen

SQL FEHLER:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' , , , , , dedi, datum)' at line 2

SQL Code:
INSERT INTO `Vokabeln` (`latein`, `deutsch`, `wortart`, `genitiv`, `genus`, `nominativ_m`, `nominativ_f`, `nominativ_n`, `praesens_a`, `perfekt_a, pvp`) VALUES (dare, geben, verb, , , , , , , dedi, datum)


(dare, geben, verb, , , , , , , dedi, datum)
da bedeuten die , , , , , , , nur, dass in diese felder nichts eingetragen wird

Verfasst: 05.12.2006 18:04
von gn#36
Das ist zwar für uns verständlich, aber für den SQL Server nicht. Wie gesagt benutze mysql_real_escape_string() auf alle Variablen, dann füge bei allen Variablen vorne und hinten ein Hochkomma ein.

Code: Alles auswählen

$var = "'".mysql_real_escape_string($var)."'";
Das hat den Effekt dass du einigermaßen gegen sql Injection geschützt bist und außerdem diesen hässlichen Fehler umgehst indem dann einfach ein leerer String in die DB geschrieben wird.

Verfasst: 05.12.2006 18:11
von langeweile
es liegt nicht an dem leeren string, wenn ich alle felder ausfülle kommt trotzdem diese fehlermeldung:

Code: Alles auswählen

SQL FEHLER:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' dedi, datum)' at line 2

SQL Code:
INSERT INTO `Vokabeln` (`latein`, `deutsch`, `wortart`, `genitiv`, `genus`, `nominativ_m`, `nominativ_f`, `nominativ_n`, `praesens_a`, `perfekt_a, pvp`) VALUES (dare, geben, verb, a, b, c, d, e, , dedi, datum)

Verfasst: 05.12.2006 18:16
von gn#36
Mach einfach das was ich geschrieben habe.
Du nimmst die Variablen (z.b. $latein,$deutsch...) und setzt sich in den Code ein den ich gepostet habe (anstelle von $var). Den Code schreibst du dann direkt oberhalb des SQL Befehls in den Code. Wenn du das mit allen Variablen machst sollte der Fehler weg sein.
EDIT: Wenn ich mir das was du gepostet hast ansehe hast du überhaupt nicht alle Felder ausgefüllt. Da ist immer noch ein ", ," drin.

Verfasst: 05.12.2006 18:17
von langeweile
sry, ich glaub ich bin zu dumm für php, ich weiß nicht, wie du das meinst