NULL Werte in PHP-Formularen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
klaus
Beiträge: 102
Registriert: 09.06.2003 11:32:10

NULL Werte in PHP-Formularen

Beitrag von klaus » 23.02.2005 14:02:56

Moin,

ich möchte mittel eines PHP-Formulars Daten in eine Datenbank eingeben.
Dies funktioniert auch soweit, allerdings sollen Felder in denen nichts eingetragen ist,
NULL Werte stehen. Es werden aber 0.00 Werte gespeichert.

Der PHP-Code

Code: Alles auswählen

       <td> <input type=text name=nekrose[1][1] size=5></td>
          .....
         $nekroseQuery  = "INSERT INTO Nekrosen VALUES ('$eingabezeitID','$pflanze','{$_POST['nekrose'][1][$pflanze]}','{$_POST['nekrose'][2][\
$pflanze]}','{$_POST['nekrose'][3][$pflanze]}','{$_POST['nekrose'][4][$pflanze]}','{$_POST['nekrose'][5][$pflanze]}','{$_POST['nekrose'][6][$\
pflanze]}','{$_POST['nekrose'][7][$pflanze]}','{$_POST['nekrose'][8][$pflanze]}','{$_POST['nekrose'][9][$pflanze]}','{$_POST['nekrose'][10][$\
pflanze]}','{$_POST['nekrose'][11][$pflanze]}','{$_POST['nekrose'][12][$pflanze]}','{$_POST['nekrose'][13][$pflanze]}','{$_POST['triebanzahl'\
][$pflanze]}','{$_POST['stadium'][$pflanze]}')";
        $nekroseResult = mysql_query($nekroseQuery);
Auszug aus mysql.log

Code: Alles auswählen

522 Query       INSERT INTO Nekrosen VALUES ('5','10','','','','','','','','','','','','','','','')

Der Datentyp ist Dec(3,2) mit NULL (ja) und Standard NULL (in phpMyAdmin)


Tausend Dank Matthias

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 23.02.2005 14:16:29

Ist ja klar.
Du schliesst die einzelnen Werte in ' ein. Wenn aber die Variable leer ist, kommt dabei '' raus.
Du muesstest das explizit NULL schreiben, ohne die single quotes.
Btw sollte man nie Daten, die du per Webformular kriegst, direkt in ein SQL-Statement einbauen - Stichwort SQL-Injection.
Immer vorher pruefen, ob das, was drinsteht ok ist!
Du koenntest das ganze - ohne die Eingabepruefung - so umschiffen:

Code: Alles auswählen

if (empty($_POST['nekrose'][1][$pflanze]) { 
    $_POST['nekrose'][1][$pflanze] = 'NULL';
}
Allerdings hast du dann immer noch das Problem, dass die single quotes weg muessen, da NULL != 'NULL'. Das eine ist das echte NULL, also ein nicht definierter Wert, das andere ein gueltiger String, der dir bei dem Datentyp der Spalte wohl nen Fehler liefern wird.

Antworten