Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Null Wert in DB schreiben geht nicht [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-consult PHP Entwicklung
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Null Wert in DB schreiben geht nicht


 
Dario_PHP
23-06-2010, 13:09 
 
Hallo zusammen,
ich hab ein total dämliches Problem und zwar möchte ich eigentlich nur einen Null-Wert in meine MySql-DB schreiben.
Hierbei handelt es sich um ein date-Feld in der DB.

Ich sage z.B.


<?php
if ($_POST[meldung_fertigstellungsdatum] == "")
{
$_POST[meldung_fertigstellungsdatum] = Null;
}
?>


Ich bekomme aber immer den Fehler "Incorrect date value". Mir ist schon klar was das bedeutet, aber ich hab schon auch "NULL" geschrieben und trotzdem die selbe Meldung.
In der DB kann die Spalte den Zustand NULL annehmen und deswegen weiß ich nict mehr weiter. Ich hoffe einer hat einen Tipp.

 
h3ll
23-06-2010, 13:12 
 
Das hat mit der Datenbank nichts zu tun. Einen NULL-Wert schreibt man so in die Datenbank:

INSERT INTO tabelle (spalte1, spalte2) VALUES (NULL, NULL)bzw.UPDATE tabelle SET spalte1 = NULL, spalte2 = NULL WHERE id = 123

Außerdem muss die Spalte natürlich auch nullable sein.

 
onemorenerd
23-06-2010, 13:15 
 
$foo = NULL;
$sql = 'UPDATE ... SET datecol = "'.$foo.'"';
echo $sql;
Ausgabe:
UPDATE ... SET datecol = ""

Begründung: Wenn man eine Variable in einen String einbaut, konvertiert PHP diese Variable zuvor auch zu einem String. Dabei wird der Wert NULL zu einem leeren String.

In deinem Fall steht also nicht NULL in der Query sondern gar kein Wert.
Einfache Lösung: $foo = 'NULL';

 
Dario_PHP
23-06-2010, 13:18 
 
Also so funktioniert es auch nicht...

<?php
if ($_POST[meldung_fertigstellungsdatum] == "")
{
$_POST[meldung_fertigstellungsdatum] = NULL;
}
?>

nicht das wir uns falsch verstehen, weiter unten sieht es so aus


$sql="Insert into tb_meldung (MD_Fertigstellungsdatum)
VALUES ('$_POST[meldung_fertigstellungsdatum]')";

 
h3ll
23-06-2010, 13:21 
 
In deinem Fall steht also nicht NULL in der Query sondern gar kein Wert.
Einfache Lösung: $foo = 'NULL';

Nein, dann wird nämlich der String 'NULL' geschrieben und nicht ein NULL-Wert.

$wert = null;
$id = 123;

$sql = sprintf(
"UPDATE tabelle SET spalte = %s WHERE id = %u",
null === $wert ? "NULL" : "'" . mysql_real_escape_string($wert) . "'",
$id
);


$sql="Insert into tb_meldung (MD_Fertigstellungsdatum)
VALUES ('$_POST[meldung_fertigstellungsdatum]')";


POST- und GET-Werte niemals direkt in einem SQL-Query verwenden. Das ist eine riesige und oft missbrauchte Sicherheitslücke.

 
Dario_PHP
23-06-2010, 13:30 
 
Alles klar, jetzt hab ich es acuh verstanden... danke:danke:

 
onemorenerd
23-06-2010, 14:03 
 
Nein, dann wird nämlich der String 'NULL' geschrieben …
Darum geht es doch!

 
h3ll
23-06-2010, 14:13 
 
Darum geht es doch!

Nein, er möchte einen Null-Wert und nicht 'NULL'.

 
AmicaNoctis
23-06-2010, 14:47 
 
Ihr habt beide Recht, aber ihr redet aneinander vorbei.

 
Dario_PHP
23-06-2010, 15:05 
 
Ne es geht immer noch nicht... keine Plan woran das liegt. Wenn ich was eingetragen habe, dann übernimmt er es ohne Probleme, aber wenn nicht, dann will er nichts von mein NULL wissen und jammert "Incorrect date value"


Mein Code:


$Fertigstellungsdatum = $_POST['meldung_fertigstellungsdatum'];
if ($Fertigstellungsdatum == "")
{
$Fertigstellungsdatum = NULL;
}



mein Update


$sql = "UPDATE tb_meldung SET
MD_Fertigstellungsdatum = '".$Fertigstellungsdatum."'
Where MD_ID = ".$id;

 
onemorenerd
23-06-2010, 15:09 
 
Warum setzt du nicht h3lls Vorschlag (http://www.php-resource.de/forum/sql-datenbanken/99768-null-wert-db-schreiben-geht-nicht.html#post641936) erstmal um?

 
AmicaNoctis
23-06-2010, 15:10 
 
Die Lösung wurde dir bereits genannt. Sieh dir deine Abfrage mit echo an und du siehst, warum es so nicht gehen kann. h3lls Beitrag enthält sogar ein Beispiel. Warum du dich nicht dran hältst, wenn du sogar schon Code bekommst, ist mir schleierhaft.

 
h3ll
23-06-2010, 15:12 
 
Mein Code:


$Fertigstellungsdatum = $_POST['meldung_fertigstellungsdatum'];
if ($Fertigstellungsdatum == "")
{
$Fertigstellungsdatum = NULL;
}



mein Update


$sql = "UPDATE tb_meldung SET
MD_Fertigstellungsdatum = '".$Fertigstellungsdatum."'
Where MD_ID = ".$id;


Ich hab dir schon einmal gesagt, dass es eine riesige Sicherheitslücke ist, wenn du Werte von POST direkt in ein SQL-Query einfügst. Warum machst du es dann?

 
Dario_PHP
23-06-2010, 15:17 
 
Ich weiß nicht wie ich das machen kann, dass es sicherer ist und dein Beispiel hab ich nicht wirklich verstanden... bin nicht gerade ein Profi was das PHP angeht...

 
AmicaNoctis
23-06-2010, 15:20 
 
Wenn dir schon konkreter Code nicht weiterhilft, wie soll man dir dann überhaupt noch helfen?

 
h3ll
23-06-2010, 15:20 
 
Ich weiß nicht wie ich das machen kann, dass es sicherer ist und dein Beispiel hab ich nicht wirklich verstanden... bin nicht gerade ein Profi was das PHP angeht...

mysql_real_escape_string() auf String-Werte anwenden. Siehe: PHP: SQL Injection - Manual (http://php.net/manual/de/security.database.sql-injection.php)

Außerdem musst du kein Profi sein, um die Grundlagen zu kennen. Aber du kennst nicht mal die.

 
Dario_PHP
23-06-2010, 15:38 
 
Okay Konkreter Code:


$wert = null;
$id = 123;

$sql = sprintf(
"UPDATE tabelle SET spalte = %s WHERE id = %u",
null === $wert ? "NULL" : "'" . mysql_real_escape_string($wert) . "'",
$id
);


Mein Code unter Anwendung des Konkreten:


$sql = sprintf("UPDATE tb_meldung SET
MD_Fertigstellungsdatum = '".$Fertigstellungsdatum."'
Where MD_ID = ".$id;
null === $Fertigstellungsdatum? "NULL" : "'" . mysql_real_escape_string
($Fertigstellungsdatum) . "'",
$id
);

 
AmicaNoctis
23-06-2010, 15:42 
 
Das nimmt ja noch nicht mal der Parser an. Wo ist das denn eine Umsetzung des Beispiels?

$sql = sprintf(
"UPDATE tb_meldung SET MD_Fertigstellungsdatum = %s WHERE id = %u",
null === $Fertigstellungsdatum ? "NULL" : "'" . mysql_real_escape_string($Fertigstellungsdatum) . "'",
$id
);

wäre eine. Da ist noch nicht mal viel, was geändert werden muss.

Lern Grundlagen!

 
Dario_PHP
23-06-2010, 16:26 
 
und wie würde das aussehen, wenn ich mehrere Felder hätte?
Also ein update über z.B. drei Felder?

 
AmicaNoctis
23-06-2010, 16:41 
 
Was noch? Sollen wir noch vorbeikommen und dich in den Schlaf singen? Fang an, Doku zu lesen, Tutorials zu machen und hör auf, dir fertigen Code zu erbetteln. Alternative: Lass es bleiben und such dir ein anderes Betätigungsfeld.

 
Dario_PHP
23-06-2010, 20:07 
 
Wenn du nicht antworten willst, dann las es doch einfach.
Keiner zwingt hier irgendjemanden zu irgendetwas, aber soweit ich weiß, dient ein Forum dazu Probleme zu lösen und nur weil man hier und da mal eine Frage hat und diese konkreter wird... hat das nichts mit erbetteln zu tun... trotzdem Danke für die bisherigen Beiträge.

Ahja und das Problem hab ich gelöst...

 
AmicaNoctis
23-06-2010, 20:31 
 
Ahja und das Problem hab ich gelöst...

Siehste, es geht doch und vermutlich hast du dabei noch was gelernt und genau darum geht es im Forum: um Hilfe zur Selbsthilfe und die hast du auch bekommen.

Glückwunsch und viel Erfolg weiterhin!

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:51 Uhr.