Column 'id' cannot be null
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
code
dank
datensatz
eintragen
ergebnis
fehlermeldung
formular
frage
http
komma
manual
meldung
null
string
umlaut
url
verhindern
vorname
zahl
zeile
-
Hallo, ich habe es versucht alleine hinzubekommen, nach langer Zeit habe ich es aufgegeben und benötige bitte von euch die Hilfe.
Ich habe es geschrieben:
formular.php
<?php $hostname_ndsvstome = 'mysql.lima-city.de'; $database_ndsvstome = '***'; $username_ndsvstome = '***'; $password_ndsvstome = '***'; $ndsvstome = mysql_pconnect($hostname_ndsvstome, $username_ndsvstome, $password_ndsvstome) or trigger_error(mysql_error(),E_USER_ERROR); mysql_select_db($database_ndsvstome); ?> <h1>Formular</h1> <form method="POST"> <select class="formular" name="fuehrerschein" placeholder="Kategorie"> <option value="fuehrerscheinja">Ja</option> <option value="fuehrerscheinnein">Nein</option> </select> <input class="formular" type="text" name="name" placeholder="Name"> <input class="formular" type="text" name="vorname" placeholder="Vorname"> <input type="submit" name="submit"> </form> <?php if(isset($_POST['submit'])) { $fuehrerschein = htmlentities($_POST['fuehrerschein']); $name = htmlentities($_POST['name']); $vorname = htmlentities($_POST['vorname']); $sql = "INSERT INTO fuehrerscheinbesitz VALUES( NULL, '$fuehrerschein', '$name', '$vorname', )"; $query = mysql_query($sql) or die(mysql_error()); if($query == TRUE) { echo "Datensatz wurde eingefuegt."; } else { echo "Datensatz konnte nicht eingefuegt werden."; }} ?>
Aber da kommt die Fehlermeldung:
Column 'id' cannot be null
Warum? Wie kann ich es verhindern? :/ Danke im Voraus :)
Beitrag zuletzt geändert: 30.4.2014 1:16:25 von livesportz -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
livesportz schrieb:
ich nehme es an, dass du dein 'ID' autoincrement hast. dann gibt es kein 'NULL' dafür.
Hallo, ich habe es versucht alleine hinzubekommen, nach langer Zeit habe ich es aufgegeben und benötige bitte von euch die Hilfe.
Ich habe es geschrieben:
formular.php
<?php $hostname_ndsvstome = 'mysql.lima-city.de'; $database_ndsvstome = '***'; $username_ndsvstome = '***'; $password_ndsvstome = '***'; $ndsvstome = mysql_pconnect($hostname_ndsvstome, $username_ndsvstome, $password_ndsvstome) or trigger_error(mysql_error(),E_USER_ERROR); mysql_select_db($database_ndsvstome); ?> <h1>Formular</h1> <form method="POST"> <select class="formular" name="fuehrerschein" placeholder="Kategorie"> <option value="fuehrerscheinja">Ja</option> <option value="fuehrerscheinnein">Nein</option> </select> <input class="formular" type="text" name="name" placeholder="Name"> <input class="formular" type="text" name="vorname" placeholder="Vorname"> <input type="submit" name="submit"> </form> <?php if(isset($_POST['submit'])) { $fuehrerschein = htmlentities($_POST['fuehrerschein']); $name = htmlentities($_POST['name']); $vorname = htmlentities($_POST['vorname']); $sql = "INSERT INTO fuehrerscheinbesitz VALUES( NULL, '$fuehrerschein', '$name', '$vorname', )"; $query = mysql_query($sql) or die(mysql_error()); if($query == TRUE) { echo "Datensatz wurde eingefuegt."; } else { echo "Datensatz konnte nicht eingefuegt werden."; }} ?>
Aber da kommt die Fehlermeldung:
Column 'id' cannot be null
Warum? Wie kann ich es verhindern? :/ Danke im Voraus :) -
Danke für dein Beitrag.
Ich habe also eben "NULL" weggemacht, also so:
$sql = "INSERT INTO fuehrerscheinbesitz VALUES( ,
statt
$sql = "INSERT INTO fuehrerscheinbesitz VALUES( NULL,
Dann kam eine Fehlermeldung:
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 ' 'fuehrerscheinja', '', 'hans', 'meier' )' at line 2
Was ist da falsch? :/
Beitrag zuletzt geändert: 30.4.2014 2:40:23 von livesportz -
Das erste Komma das nach der Klammer steht ist falsch. Nach einer Klammer darf da nie eins stehen, diese sind nur für Abtrennungen bei Aufzählungen. Also wen du mehrere Values hast, startest du ganz normal mit Value1 und trennst dann Value2 mit einem Komma. Also Value1, Value2. Aber da sind noch andere Fehler.
Beitrag zuletzt geändert: 30.4.2014 9:59:43 von c143 -
In Deinem SQL-Statement sind diverse Fehler
Ich habe mich mal an eine Korrektur gewagt
$sql = " INSERT INTO fuehrerscheinbesitz ( /* id */ fuehrerschein, name, vorname ) VALUES ( /* autoincrement z.B. '12345', */ '$fuehrerschein', '$name', '$vorname' ) ";
So sollte es gehen
Beitrag zuletzt geändert: 30.4.2014 9:46:31 von dunkeltuten -
@dunkeltuten, vielen Dank für deine Lösung. Es hat mit EIntragen super geklappt.
Noch zwei Frage; wenn der Name doch mit Umlaute zB: Müller heisst, wird irgendwie nicht eingetragen. Denn in Datenbank bzw. Datensatz-Feld steht leer da. Wieso denn? Also Datensatz-Kollation ist doch utf8_general_ci. Oder was ist da falsch?
2. Frage: Ich habe versucht, Datenbank auslesen und ausgeben zu schreiben. Irgendwie zeigt es sich nicht an:
<?php $ergebnis = mysqli_query($sql, "SELECT name, vorname FROM fuehrerscheinbesitz"); while($row = mysqli_fetch_object($ergebnis)) { echo $row->name; } ?>
Beitrag zuletzt geändert: 1.5.2014 4:18:00 von livesportz -
livesportz schrieb:
zu beiden fragen: ich habe das gefühl, dass du kein
@dunkeltuten, vielen Dank für deine Lösung. Es hat mit EIntragen super geklappt.
Noch zwei Frage; wenn der Name doch mit Umlaute zB: Müller heisst, wird irgendwie nicht eingetragen. Denn in Datenbank bzw. Datensatz-Feld steht leer da. Wieso denn? Also Datensatz-Kollation ist doch utf8_general_ci. Oder was ist da falsch?
2. Frage: Ich habe versucht, Datenbank auslesen und ausgeben zu schreiben. Irgendwie zeigt es sich nicht an:
<?php $ergebnis = mysqli_query($sql, "SELECT name, vorname FROM fuehrerscheinbesitz"); while($row = mysqli_fetch_object($ergebnis)) { echo $row->name; } ?>
<?php error_reporting(E_ALL | E_STRICT);
betreibst (und zwar genau so, gleich am anfang!). tue das bitte, dass hier fehlermeldungen veröffentlichen kannst, sonst kann man nur raten. an sonsten zu 'umlaut'&co. kann man nur das sagen. -
Also ich habe dieser Code eingefügt... keine Error Meldung. Ich habe auch bei lima-city voreingestellt, dass Error Meldung angezeigt werden soll.
-
Die Angabe "Irgendwie zeigt es sich nicht an" bingt uns nicht weiter
Wenn Du das ERROR-Reporting jetzt eingeschaltet hat, dann stell uns bitte auch nochmal Deinen aktuellen und vollständigen Source-Code zur Verfügung damit wir Dir auch helfen können
-
livesportz schrieb:
entschuldige! ich habe eine zeile vergessen, daher:
Also ich habe dieser Code eingefügt... keine Error Meldung. Ich habe auch bei lima-city voreingestellt, dass Error Meldung angezeigt werden soll.<?php ini_set('display_errors', 1); error_reporting(E_ALL | E_STRICT);
und wenn das auch nichts nützt, dann bitte mehr code preisgeben ;) -
<?php if(isset($_POST['submit'])) { $fuehrerschein = htmlentities($_POST['fuehrerschein']); $name = htmlentities($_POST['name']); $vorname = htmlentities($_POST['vorname']); $sql = "INSERT INTO fuehrerscheinbesitz VALUES( NULL, '$fuehrerschein', '$name', '$vorname', )";
Da hast du eine Sicherheitslücke drin.
Stell dir mal vor, ich würe in zb. Name ein Anführungszeichen eintragen. dann könnte ich dahinter dein SQL-Querry verändern daher immer: mysql_real_escape_string() http://www.php.net/manual/de/function.mysql-real-escape-string.php
oder bei zahlen ein (int)$zahl oder (float)$zahl. Dadurch wird die Variable in ein Integer oder Float umgewandelt und ist daher unschädlich.
Das ganze nennt sich SQL-injection einfach mal googlen. Es gibt recht viele Artikel darüber. -
the-8-beta schrieb:
<?php if(isset($_POST['submit'])) { $fuehrerschein = htmlentities($_POST['fuehrerschein']); $name = htmlentities($_POST['name']); $vorname = htmlentities($_POST['vorname']); $sql = "INSERT INTO fuehrerscheinbesitz VALUES( NULL, '$fuehrerschein', '$name', '$vorname', )";
Da hast du eine Sicherheitslücke drin.
Stell dir mal vor, ich würe in zb. Name ein Anführungszeichen eintragen. dann könnte ich dahinter dein SQL-Querry verändern daher immer: mysql_real_escape_string() http://www.php.net/manual/de/function.mysql-real-escape-string.php
oder bei zahlen ein (int)$zahl oder (float)$zahl. Dadurch wird die Variable in ein Integer oder Float umgewandelt und ist daher unschädlich.
Das ganze nennt sich SQL-injection einfach mal googlen. Es gibt recht viele Artikel darüber.
Ah super danke! :) @the-8-beta -
czibere schrieb:
livesportz schrieb:
entschuldige! ich habe eine zeile vergessen, daher:
Also ich habe dieser Code eingefügt... keine Error Meldung. Ich habe auch bei lima-city voreingestellt, dass Error Meldung angezeigt werden soll.<?php ini_set('display_errors', 1); error_reporting(E_ALL | E_STRICT);
und wenn das auch nichts nützt, dann bitte mehr code preisgeben ;)
Ist bereits alles in Lima beschrieben!
Siehe dazu: http://www.lima-city.de/2008/php#fehlermeldungen -
Hi,
versuch mal deine Formulareingaben direkt als utf8 Charset zu übergeben, dann sollte es gehen, zumindest wenn ich dein Problem verstanden habe.
Dem Formular kannst du dies über den "Befehl" accept-charset="utf-8", damit sollte deine <form> Zeile so aussehen:
<form accept-charset="utf-8" method="POST">
MfG -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage