INSERT INTO NULL
Hallo ik zit namelijk met het volgende.
ik wil mijn gegevens in een database krijgen aan de hand van een formulier. Het formulier laat me vrij om niet alle velden te moeten invullen.
Ik ga bv mijn naam ophalen. $naam = $_POST['naam'];
dus $naam = Moe of $naam = ''
ok nu wil ik dit in mijn database steken. Als de naam is ingevuld, geen probleem. Als de naam een lege string is, zou ik er graag NULL zien staan. Niet de string NULL, maar NULL van dit is een leeg veld.
Hoe kan ik dit doen?
Hopelijk is het duidelijk genoeg.
ik wil mijn gegevens in een database krijgen aan de hand van een formulier. Het formulier laat me vrij om niet alle velden te moeten invullen.
Ik ga bv mijn naam ophalen. $naam = $_POST['naam'];
dus $naam = Moe of $naam = ''
ok nu wil ik dit in mijn database steken. Als de naam is ingevuld, geen probleem. Als de naam een lege string is, zou ik er graag NULL zien staan. Niet de string NULL, maar NULL van dit is een leeg veld.
Hoe kan ik dit doen?
Hopelijk is het duidelijk genoeg.
Gesponsorde koppelingen:
if (empty($_POST['naam'])){
$naam = "NULL";
}
else
{
$naam = $_POST['naam'];
}
$naam = "NULL";
}
else
{
$naam = $_POST['naam'];
}
Als ik dat doe, komt er in mijn db NULL te staan als string.
Je moet dan ook $naam = NULL; gebruiken
Oh oke (gebruik in prencipe nooit null..)
$naam = NULL (al geprobeerd) Hoe schrijf ik dit dan in mijn query?
$query = "INSERT INTO tblnaam (naam) VALUES ('$naam')";
Als ik het zo doe blijft het veld leeg en komt er geen NULL (van ik ben leeg) te staan.
$query = "INSERT INTO tblnaam (naam) VALUES ('$naam')";
Als ik het zo doe blijft het veld leeg en komt er geen NULL (van ik ben leeg) te staan.
Gebruik een CASE (of IF-)statement in de INSERT query. Dit kan gewoon met (My)SQL.
Je moet dan zorgen dat die '$naam' veranderd in $naam. Verder is het niet verstandig om je variabelen buiten je quotes te halen.
@Dennis: Hoe doe je dit dan juist, want dit lukt me niet.
NULL is een sql-waarde, dus daar moeten géén quotes omheen staan.
Je zou er ook een functie voor kunnen maken, a la
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
function value_or_null($value)
{
$value = trim($value);
if($value == '') // geen empty(), omdat je dan niet meer '0' in kan vullen
return 'NULL';
else
return sprintf("'%'", mysql_real_escape_string($value));
}
$query = '
INSERT INTO antwoorden (
vraag_1,
vraag_2,
vraag_3
) VALUES (
'. value_or_null($_POST['vraag_1']) . ',
'. value_or_null($_POST['vraag_2']) . ',
'. value_or_null($_POST['vraag_3']) . '
)';
?>
function value_or_null($value)
{
$value = trim($value);
if($value == '') // geen empty(), omdat je dan niet meer '0' in kan vullen
return 'NULL';
else
return sprintf("'%'", mysql_real_escape_string($value));
}
$query = '
INSERT INTO antwoorden (
vraag_1,
vraag_2,
vraag_3
) VALUES (
'. value_or_null($_POST['vraag_1']) . ',
'. value_or_null($_POST['vraag_2']) . ',
'. value_or_null($_POST['vraag_3']) . '
)';
?>
http://dev.mysql.com/doc/refman/5.0/en/case-statement.html
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?
mysql_query("
INSERT INTO antwoorden
(vraag)
VALUES (
CASE
WHEN '".$value."' == '' THEN
NULL
ELSE
'".$value."'
END CASE
");
[/code]
mysql_query("
INSERT INTO antwoorden
(vraag)
VALUES (
CASE
WHEN '".$value."' == '' THEN
NULL
ELSE
'".$value."'
END CASE
");
[/code]
danke allemaal.
Wat heb je nu gebruikt dan? :)
Ik heb die functie van Jelmer gebruikt, deze werkt voor wat het moet doen. Maar het uiteindelijke script werkt nog steeds niet.
Echt vreemd, er moet via een query 1 record worden opgehaald, dit om te zien of de ingevoerde gegevens kloppen. in de tabel waar dit wordt uitgehaald zijn echter nog andere velden, deze zijn van het het type tinyint. Als deze al ingevuld zijn met een 0, werkt de query niet. Als deze nog niet ingevuld zijn (dus NULL) werkt de query wel. echt vreemd.
*edit: het ligt niet aan bovenstaande, lees nieuwe post
groeten
Moe
Echt vreemd, er moet via een query 1 record worden opgehaald, dit om te zien of de ingevoerde gegevens kloppen. in de tabel waar dit wordt uitgehaald zijn echter nog andere velden, deze zijn van het het type tinyint. Als deze al ingevuld zijn met een 0, werkt de query niet. Als deze nog niet ingevuld zijn (dus NULL) werkt de query wel. echt vreemd.
*edit: het ligt niet aan bovenstaande, lees nieuwe post
groeten
Moe
Gewijzigd op 01/01/1970 01:00:00 door Mr.Moe
Alvast sorry voor de bump.
Het probleem helemaal omschreven.
ik ben bezig met het vernieuwen van een website, voor mijn stage. Deze website heeft users, maar die zitten niet in een db, enkel in een .txt file. Dus ik heb deze users uitgelezen om deze in een db te steken. dit is echter gelukt. Omdat we met een nieuwe website zitten, zou ik ze graag even opnieuw laten verifieren, dit ook om te zien of ze nog intresse hebben. Echter kan er niet geverifieerd worden op dit moment.
Op dit moment lukt het verifieren pas nadat ik eerst de user heb 'geediteert' in de db. Staat tussen haakjes omdat ik helemaal niets verander ofzo, druk enkel op start. Dit is natuurlijk niet de bedoeling he.
Aan wat kan dit liggen?
groeten,
Thomas
Gelieve Niet Bumpen::
Twee of meer keer achter elkaar in een topic posten heet bumpen. Bumpen is pas na 24 uur toegestaan en kan een reden zijn voor de admins en moderators om een topic te sluiten. Gebruik indien nodig de
knop om je tekst aan te passen.
SanThe.
knop om je tekst aan te passen.SanThe.
Het probleem helemaal omschreven.
ik ben bezig met het vernieuwen van een website, voor mijn stage. Deze website heeft users, maar die zitten niet in een db, enkel in een .txt file. Dus ik heb deze users uitgelezen om deze in een db te steken. dit is echter gelukt. Omdat we met een nieuwe website zitten, zou ik ze graag even opnieuw laten verifieren, dit ook om te zien of ze nog intresse hebben. Echter kan er niet geverifieerd worden op dit moment.
Op dit moment lukt het verifieren pas nadat ik eerst de user heb 'geediteert' in de db. Staat tussen haakjes omdat ik helemaal niets verander ofzo, druk enkel op start. Dit is natuurlijk niet de bedoeling he.
Aan wat kan dit liggen?
groeten,
Thomas
Gewijzigd op 01/01/1970 01:00:00 door Mr.Moe



