kostenloser Webspace werbefrei: lima-city


Column 'id' cannot be null

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    livesportz

    Kostenloser Webspace von livesportz

    livesportz hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. livesportz schrieb:
    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 :)
    ich nehme es an, dass du dein 'ID' autoincrement hast. dann gibt es kein 'NULL' dafür.
  4. Autor dieses Themas

    livesportz

    Kostenloser Webspace von livesportz

    livesportz hat kostenlosen Webspace.

    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
  5. 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
  6. In Deinem SQL-Statement sind diverse Fehler :wazzup:

    Ich habe mich mal an eine Korrektur gewagt :spammer:

    $sql = "
    INSERT INTO fuehrerscheinbesitz
    	(
    		/* id */
    		fuehrerschein,
    		name,
    		vorname
    	) 
    VALUES 
    	(
    		/* autoincrement z.B. '12345', */
    		'$fuehrerschein',
    		'$name',
    		'$vorname'
    	)
    ";

    So sollte es gehen :king:



    Beitrag zuletzt geändert: 30.4.2014 9:46:31 von dunkeltuten
  7. Autor dieses Themas

    livesportz

    Kostenloser Webspace von livesportz

    livesportz hat kostenlosen Webspace.

    @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
  8. livesportz schrieb:
    @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;
    }
    ?>
    zu beiden fragen: ich habe das gefühl, dass du kein
    <?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.
  9. Autor dieses Themas

    livesportz

    Kostenloser Webspace von livesportz

    livesportz hat kostenlosen Webspace.

    Also ich habe dieser Code eingefügt... keine Error Meldung. Ich habe auch bei lima-city voreingestellt, dass Error Meldung angezeigt werden soll.
  10. Die Angabe "Irgendwie zeigt es sich nicht an" bingt uns nicht weiter :scared:

    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 :wave:


  11. livesportz schrieb:
    Also ich habe dieser Code eingefügt... keine Error Meldung. Ich habe auch bei lima-city voreingestellt, dass Error Meldung angezeigt werden soll.
    entschuldige! ich habe eine zeile vergessen, daher:
    <?php
    ini_set('display_errors', 1);
    error_reporting(E_ALL | E_STRICT);
    und wenn das auch nichts nützt, dann bitte mehr code preisgeben ;)
  12. <?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.
  13. Autor dieses Themas

    livesportz

    Kostenloser Webspace von livesportz

    livesportz hat kostenlosen Webspace.

    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
  14. czibere schrieb:
    livesportz schrieb:
    Also ich habe dieser Code eingefügt... keine Error Meldung. Ich habe auch bei lima-city voreingestellt, dass Error Meldung angezeigt werden soll.
    entschuldige! ich habe eine zeile vergessen, daher:
    <?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 :wave:
  15. 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
  16. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!