php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 24.05.2008, 18:09  
Benutzer
 
Registriert seit: 24.05.2008
Beiträge: 37
b_i_g_b_o befindet sich auf einem aufstrebenden Ast
Standard NULL-Wert ueber PHP in MySQL-DB eintragen

Hallo,
seit kurzem beschaeftige ich mich mit PHP und MySQL und komme beim meinem Selbststudium grad nicht weiter und freue mich auf ein paar Tips von Euch.

Mein Problem ist folgendes:
Ich habe eine kleine Testtabelle kreiert mit drei Parametern:
ID, NAME, DATUM
ID ist definiert als INTEGER und AUTO_INCREMENT (NOT NULL)
NAME als VARCHAR (NOT NULL)
DATUM als DATE (NULL)

In dem kleinen Script unten (das soweit funktioniert) möchte ich nun den Parameter $datum auf NULL setzen und den auch so in die Datenbank eintragen.

(Spaeter einmal sollen die Werte der Parameter aus einem Formular kommen... in dem das DATUM optional ist)

Wenn ich nun, um das zu simulieren, den Parameter $datum="" setze, bekomme ich folgende Fehlermeldung:
Error: INSERT INTO 3_spalten (name, datum) VALUES ('Bodo99','')
Incorrect date value: '' for column 'datum' at row 1

Ich weiss nun nicht, wie ich in dem PHP-Code (der in HTML eingebettet ist) NULL definiere und uebergeben kann.

Danke fuer ein paar Tips.

Bodo

Code:
<html>
<head>
  <title></title>
</head>
<body>
<?php
$name = "Bodo99";
$datum = "1999.12.31";
    // verbindung aufbauen
    $verbindung = mysql_connect("localhost", "root", "xxxx")
    or die ("keine Verbindung möglich. Benutzername oder Passwort sind falsch");
    mysql_select_db("kleiner_test")
    or die ("Die Datenbank existiert nicht.");
    //datensatz eintragen
    $eintrag = "INSERT INTO 3_spalten (name, datum) VALUES ('$name','$datum')";
    $eintragen = mysql_query($eintrag)
    OR die("Error: $eintrag <br>".mysql_error());
 
    if($eintragen == true)
    {
        echo "Eintrag war erfolgreich<br>";
    }
    else
    {
       echo "Fehler beim Speichern!<br>";
    }
    //tabelle ausgeben
    $abfrage = "SELECT id, name, datum FROM 3_spalten";
    $ergebnis = mysql_query($abfrage);
    while($row = mysql_fetch_object($ergebnis))
    {
        echo "$row->id, $row->name, $row->datum <br>";
    }
 
    //verbindung beenden
    mysql_close($verbindung);
?>
</body>
</html>
b_i_g_b_o ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 24.05.2008, 21:04  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.268
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Hallo, willkommen hier bei uns im Forum

Na wenn $datum leer ist schreibst du statt '$datum' einfach ein NULL ins SQL-Statement. Dafuer musst du einfach nur eine Bedingung vorher abtesten.

Wahlweise kannst du natuerlich das SQL-Statement auch so umformen, dass die NULL-Spalte erst garnicht aufgefuehrt wird.
INSERT INTO (name) VALUES('$name')

Mach dich auch mal mit SQL-Injection vertraut, siehe dazu:
PHP: SQL Injection - Manual
PHP: mysql_real_escape_string - Manual
PHP: Runtime Configuration - Manual
__________________
"Nuschel ich?" - "Was?"
Chriz ist gerade online  
Alt 24.05.2008, 22:30  
Benutzer
 
Registriert seit: 24.05.2008
Beiträge: 37
b_i_g_b_o befindet sich auf einem aufstrebenden Ast
Standard

Hey Chriz,

danke Dir, hmm, ist ja einfacher als ich dachte (muss mich erstmal wieder an diese Programmierdenkweise gewoehnen

Habe nun meinen COde entsprechend angepasst und er funktioniert, prima.
PHP-Code:
    //datensatz eintragen
    
if ($datum == "")
    {
        echo 
"datum ist leer<br>";
        
$eintrag "INSERT INTO 3_spalten (name, datum) VALUES ('$name', NULL)";
    }
    else
    {
        echo 
"datum ist NICHT leer<br>";
        
$eintrag "INSERT INTO 3_spalten (name, datum) VALUES ('$name','$datum')";
    } 
Wie das eben so ist, war das Beispiel nur ein kleiner Teil, der mich zwar etwas weiter bringt, aber schon liegt das naechste Steinchen im Weg...

Mein reales "Projekt" besteht naemlich aus einer deutlich groesseren Datenbank-Tabelle mit etwa 10 Parameter, wovon mehrere NULL sind. (Ich taste mich also langsam an die Endloesung ran und pruefe auch jedes kleine Wachstum, damit ich ja alles verstehe)

zum Beispiel:
ID, INTEGER, NOT_NULL, AUTP_INCREMENET
NAME, VARCHAR, NOT_NULL
VORNAME, VARCHAR, NULL
DATUM, DATE, NULL
RACENAME, VARCHAR, NOT_NULL
RACEDISCIPLINE, VARCHAR, NULL
...

Alle Parameter (bis auf ID) kommen spaeter einmal aus einem Formular.

Nun muesste ich ja, um Chriz Vorschlag anzuwenden (siehe Code oben), jeden einzelnen Parameter daraufhin ueberpruefen, ob er LEER ist oder nicht, um dann den INSERT-Befehl zusammenzubauen.

Hmm, genau hier stehe ich etwas auf dem Schlauch...

Ich nehme z.B. mal an, dass DATUM und RACEDISCIPLINE als NULL-Werte aus dem Formular kommen. In diesem Beispiel muss die INSERT-Kommandozeile wohl so aussehen:

PHP-Code:
$eintrag "INSERT INTO tabellenname (name, vorname, datum, racename, racediscipline) VALUES ('$name', 'vorname', NULL, 'racename', NULL)"
Wie kann ich nun, je nachdem ob die Parameter NULL sind oder gefuellt, das Kommando zusammenbauen?

Ich weiss, mir fehlen hier wahrscheinlich ein paar wichtige Grundlagen... was ich brauche von Euch, ist eher ein sanfter aber sichtbarer Wink mit dem Zaunpfahl , d.h. welchen Befehl/welche Syntax kann ich dafuer nutzen...

Vielen Dank

Bodo

Geändert von b_i_g_b_o (24.05.2008 um 22:32 Uhr).
b_i_g_b_o ist offline  
Alt 24.05.2008, 22:39  
Erfahrener Benutzer
 
Benutzerbild von Hu5eL
 
Registriert seit: 26.02.2008
Beiträge: 342
Hu5eL befindet sich auf einem aufstrebenden Ast
Hu5eL eine Nachricht über ICQ schicken
Standard

mal als idee:
PHP-Code:
if(empty($_GET['para1'])) $para1="NULL";
else 
$para1=$_GEt['para1'];

$sql="INSERT INTO table(spalte1, spalte2,spalte3...) VALUES($para1, $para2, $para3)... 
Hu5eL ist offline  
Alt 24.05.2008, 22:52  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.268
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Warum schreibst du den gesamten Query pro Bedingung neu, wenn sich nur die Spaltenzuweisung unterscheidet?
__________________
"Nuschel ich?" - "Was?"
Chriz ist gerade online  
Alt 24.05.2008, 23:21  
Benutzer
 
Registriert seit: 24.05.2008
Beiträge: 37
b_i_g_b_o befindet sich auf einem aufstrebenden Ast
Standard

@Hu5el, danke, das sieht kurz und hilfreich aus... werde ich ausprobieren...

@Chriz: ganz einfach, weil ich's nicht besser weiss
..oder meintest du gar nicht mich ?!

Danke erstmal...
... wahrscheinlich melde ich mich wieder mit irgendeinem schlecht programmierten Code... (der vielleicht funktioniert aber nicht besonders effizient ist)

Gruss, Bodo
b_i_g_b_o ist offline  
Alt 25.05.2008, 01:20  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.268
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Hallo,
schreib dir doch eine Funktion, der du z.B. die Formulareingabe uebergibst.
Diese prueft mit empty() ob strlen(trim(..)) > 0 ob die Variable einen Wert enthaelt. Wenn ja verpackt sie die Variable fuer MySQL (magic_quotes_gpc/mysql_real_escape_string) oder gibt NULL (als String) zurueck.

PHP-Code:
<?php
function getMySqlValue($value) {
  if (empty(
$value)) {
    return 
"NULL";
  }
  if (
get_magic_quotes_gpc()) {
    
$value stripslashes($value);
  }
  return 
"'" mysql_real_escape_string($value) . "'"// " ' "
}
?>
Du kannst die Funktion etwa so anwenden:
PHP-Code:
<?php
$sql 
sprintf("INSERT INTO table (col1, col2) VALUES (%s, %s)"getMySqlValue($_POST["col1"]), getMySqlValue($_POST["col2"]));
?>
(ungetestet)

Natuerlich ist das immer noch nicht optimal, aber ein Schritt in die richtige Richtung.
__________________
"Nuschel ich?" - "Was?"
Chriz ist gerade online  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Eintragen von Daten per Formular in MySQL Datenbank PHP Tipps 2004 11 07.06.2009 08:58
[Erledigt] Problem bei INSERTEN INTO RedDragon PHP Tipps 2008 37 18.07.2008 16:26
[Erledigt] wert auslesen aus mysql krackmoe PHP Tipps 2008 4 11.07.2008 17:58
DB Portierung ins neue Mysql: Error 1060 duplicate column dealer Datenbanken 4 02.11.2007 08:45
Transaktion(en) mit der InnoDB-Engine, aber wie?! PsychoEagle Datenbanken 12 23.07.2007 12:11
*hilfe* Daten in Mysql eintragen DrWeb PHP Tipps 2006 1 26.07.2006 20:30
Gute Struktur heohni Datenbanken 5 29.05.2006 11:42
beim eintragen in mysql db gehen 7 von 66 eintr�gen verlor Marc PHP Tipps 2006 7 17.05.2006 14:30
[Erledigt] kann keine Foreign Key Anlegen Datenbanken 1 17.10.2005 11:11
[Erledigt] HILFE BITTE! PHP Formular in MySQL eintragen... PHP Tipps 2005-2 9 01.10.2005 21:17
[Erledigt] Problem mit mySQL Datenbanken 7 27.09.2005 12:06
[Erledigt] Tabellen auslesen für mehrmals installiertes Script Datenbanken 18 21.10.2004 18:45
[Erledigt] MySQL ignoriert NOT NULL und ich bekomme keinen Timestamp Datenbanken 3 17.08.2004 08:11
Maximal Wert in MYSQL Tabelle nach id rausfinden? PHP Tipps 2004 3 03.07.2004 23:27
HILFE: Column count doesn't match value count at row 1 Datenbanken 17 12.06.2004 16:45

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php mysql null, php mysql null eintragen, mysql null php, mysql null eintragen, mysql php null, php null mysql, php mysql null value, php sql null, mysql wert auf null setzen, mysql null setzen, sql null eintragen, null in mysql eintragen, php mysql update null, null mysql php, php mysql is null, php mysql null setzen, php sql null eintragen, null php mysql, php null setzen, mysql wert null setzen

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:02 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum