PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : in mysql ein feld auf den NULL status setzen



rideyourstyle
09-03-2006, 21:47
hallo leute.

ich habe in mysql eine tabelle mit sechs url feldern. diese werden per upload gefüllt und heissen url1 ... url6. da nicht immer alle sechs felder ausgefüllt werden sollten nur diejenigen eingetragen werden, die auch eine url enthalten. mien skript füllt aber immer alle aus.gibt es eine möglichkeit bestimmte felder in mysql mit dem NULL status zu füllen???
oder kennt jemand sonst eine lösung für mein problem???

mercy aus der verschneiten schweiz...

BLUESCREEN3D
09-03-2006, 23:53
UPDATE `table` SET `col`=NULL;

rideyourstyle
10-03-2006, 09:22
ja wenn ich das so

$s = "insert into $db_table ( datum, text, ip, url1, url2, url3, url4, url5, url6) values( '$datum', '$text', '$ip', NULL, NULL, NULL, NULL, NULL, NULL )";

eintrage, dann funktioniert es auch. aber dieses NULL ohne kann ich nicht in eine variable speichern ohne dass es den text NULL einfügt!
das ziel wäre folgendes:

$s = "insert into $db_table ( datum, text, ip, url1, url2, url3, url4, url5, url6) values( '$datum', '$text', '$ip', '$name1', '$name2', '$name3', '$name4', '$name5', '$name6' )";

waxman
10-03-2006, 10:38
Hi OP,

mach doch einfach in dem Schritt, wo du die Daten aus deinem Formular verifizierst einfach eine Kontrolle, ob die Felder gefüllt sind. Sprich, wenn ein Feld leer ist, schreib einfach 'NULL' in die Variabel (z.B. $name3) rein.

Andere herrangehensweise könnte auch sein, dass du leere Felder einfach aus deinem SQL "Insert into" Statement rauslässt. Dann sollte IIRC auch NULL in den nicht benutzten Feldern drin stehen.

my 2 cents
waxman

BLUESCREEN3D
10-03-2006, 14:52
Sprich, wenn ein Feld leer ist, schreib einfach 'NULL' in die Variabel (z.B. $name3) rein.
Dann wird aber die Spalte nicht auf NULL gesetzt sondern kriegt den Text "NULL"...


Andere herrangehensweise könnte auch sein, dass du leere Felder einfach aus deinem SQL "Insert into" Statement rauslässt. Dann sollte IIRC auch NULL in den nicht benutzten Feldern drin stehen.
Zumindest, wenn NULL der Standardwert ist.
Aber diese Lösung würde ich ansonsten auch empfehlen.
@rideyourstyle: Stell den Query dynamisch zusammen und pack einfach nur die nicht-NULL-Spalten mit rein.

rideyourstyle
10-03-2006, 19:56
ich habs das problem nun gelöst (nicht gerade schulbuchmässig aber funktioniert!! ;-) )und zwar wie folgt:

1. alle daten eingetragen
2. den neusten eintrag nochmals aufrufen
3. für jedes feld eine if abfrage und der error meldung die im array des uploads aufrufbar ist jeweils nur das feld auf NULL "geupdated" das nicht den errorcode 0 enthielt.


das mit dem string dynamisch zusammensetzen habe ich mir auch gedacht aber mir schien die andere lösung einfacher... ;-)
aber ich habe mir heute noch ein php & mysql buch gekauft und hoffe damit ein bisschen schlauer zu werden.

waxman
11-03-2006, 17:09
Dann wird aber die Spalte nicht auf NULL gesetzt sondern kriegt den Text "NULL"...
Ich wollte ja nicht den Text "NULL" reinschreiben sondern den Wert NULL. Diesen ansich kann man einfügen. Halt NULL, sofern dieses erlaubt ist.

undefined
11-03-2006, 23:09
Ich wollte ja nicht den Text "NULL" reinschreiben sondern den Wert NULL. Diesen ansich kann man einfügen. Halt NULL, sofern dieses erlaubt ist. http://dev.mysql.com/doc/refman/4.1/en/reserved-words.html
Der Rest ist eine reine Einstellungssache deiner Tabelle ;)

Turbohummel
12-03-2006, 07:03
Hälst du es für besonders klug, url1 bis url7 reinzuschreiben?
Ich würde eine weitere Tabelle urls machen, und in diese die Werte eintragen. Ggf. mit Reihenfolge. Also in etwa
tabelle1 (id, irgendwelche_felder);
urls(tabelle1_id, url, order_no)

Kommt natürlich auf den Verwendungszweck an.
NULL sind nie besonders schön noch entspricht es der Normalform. Wobei man es durchaus an manchen stellen verwenden kann, weil es performanter ist.

rideyourstyle
12-03-2006, 21:25
in meinem fall halte ich es für inteligenter alles in einer tabelle zu speichern. es ist nämlich immer eine id, datum und ein text. dann kann man je nach dem noch einige bilder anfügen. so entspricht jeder eintrag einem neuen eintrag...

yankee42
23-03-2006, 04:26
wie waere es denn mit


for($i=1; $i<7;$i++) if (${'name'.$i} !='NULL') ${'name'.$i} ="'${'name'.$i}'";
$s = "insert into $db_table ( datum, text, ip, url1, url2, url3, url4, url5, url6) values( '$datum', '$text', '$ip',$name1,$name2,$name3,$name4,$name5,$name6)";
ungetestet, sollte aber funzen...