[PHP/MySQL] Insert NULL in textveld

Pagina: 1
Acties:

Onderwerpen


  • Trasos
  • Registratie: Juli 2003
  • Niet online
Ik geef het maar meteen toe: ik ben een redelijke noob op het gebied van PHP en MySQL, maar tot nu toe heb ik er me er altijd wel uit weten te redden. Nu dus niet...

Wat is het probleem? Wel nu, ik heb een inschrijfformulier wat ik dus wil opslaan in een database.
Het is ook niet echt een professionele tabel, dus geen tabel inschrijving en een tabel ingeschrevenen die naar de inschrijving verwijst of iets dergelijks, gewoon één tabel met daarin 4 personen en wat rand gegevens. Het vullen op basis van de formuliergegevens gaat allemaal prima.

Daarnaast wil ik achterhalen hoeveel personen ik nu daadwerkelijk kan verwachten. Dus ik count gewoon de kolommen en de velden die NULL zijn worden dan automatisch niet meegenomen. Werkt ook goed. Wat nu het probleem is dat wanneer een veld leeg is dus NULL ingevuld moet worden in de database en niet een lege string. Het veld is als volgt gedefinieerd: VARCHAR, 100, NULL, default NULL. Dat heb ik proberen op te vangen door middel van onderstaand script:
PHP:
1
2
3
4
5
6
7
8
$X = "x";

$IN1 = $_POST[intro1];
$TEST = $IN1.$X;
if( $TEST == $X)
    {
    $IN1 = NULL;
    }


Die $IN1 wordt dan omsloten met '' in een query gestopt. Op deze manier blijft er een lege string in de database gevuld worden. Terwijl hij wel degelijk in de THEN terecht komt, want dat heb ik uitgetest met een print(). Wanneer ik alleen NULL ingeef zonder de '' dan gaat het dus wel goed.
Hoe kan ik toch NULL invoeren in een textveld?

  • UltimateB
  • Registratie: April 2003
  • Niet online

UltimateB

Pomdiedom

als je NULL in de database wil opslaan moet je geen quotes gebruiken, NULL ;)

"True skill is when luck becomes a habit"
SWIS


  • Trasos
  • Registratie: Juli 2003
  • Niet online
Nee, dat had ik dus ook al door. Maar als het veld wel een waarde bevat dan zal ik er wel quotes omheen moeten doen.

  • Patriot
  • Registratie: December 2004
  • Laatst online: 16-09 13:49

Patriot

Fulltime #whatpulsert

UltimateB schreef op donderdag 27 november 2008 @ 23:17:
als je NULL in de database wil opslaan moet je geen quotes gebruiken, NULL ;)
Dan hoop ik wel dat er nu 'NULL' in zijn database staat. Hij heeft het zelf over een lege string, dat vind ik ook vrij apart. Heb je wel goed gekeken TS?

EDIT:
Gezien de reactie boven mij snap je het wel. Probeer zoiets:

PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php

$in = $_POST['intro1'];
if (empty($in))
  $in = "NULL";
else
  $in = "'" . $in . "'";

mysql_query("INSERT INTO `table` (`field`) VALUES (" . $in . ")");

?>


Dit is een beetje pseudocode, maar je snapt het wel denk ik.

[ Voor 33% gewijzigd door Patriot op 27-11-2008 23:46 ]


  • Trasos
  • Registratie: Juli 2003
  • Niet online
In de THEN gaat het dan toch fout? Daar maak vul je $IN met de string "NULL". Maar wat doe je in de ELSE dan? $IN met zichzelf vullen? En hoe zit dat met die query op het eind? Dat loopt toch ook niet helemaal lekker bij dat `field` = " . $in ? Mis je daar geen quotes ofzo?

Ga wel ff iets proberen op deze manier.

[ Voor 7% gewijzigd door Trasos op 27-11-2008 23:33 ]


  • Patriot
  • Registratie: December 2004
  • Laatst online: 16-09 13:49

Patriot

Fulltime #whatpulsert

In de "then" moet het NULL zijn zonder quotes (die moeten uiteindelijk niet in de query zitten). In de else moeten die quotes er wel omheen, dan is $in namelijk niet leeg. De quotes zitten dus in de variabele $in, dat is ook de reden dat ze niet meer in de aanroep van de functie staan.

EDIT:
Ik zie overigens wel dat ik even een denkfout heb gemaakt. Ik was vergeten dat je niet zomaar kunt vergelijken met NULL. Het moet in deze inderdaad iets anders, daarom heb ik er even een insert van gemaakt. In de where clause moet je kijken of een veld NULL is d.m.v. "IS" (dus `field` IS NULL i.p.v. `field` = NULL).

[ Voor 36% gewijzigd door Patriot op 27-11-2008 23:45 ]


  • Trasos
  • Registratie: Juli 2003
  • Niet online
Er wordt dan nog steeds een lege string gepost. Hij komt wel degelijk in de THEN, getest met print(). Daarnaast krijg ik ook nog eens een syntax error erbij.
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ' 'dit is ook', 'al een test')' at line 1
Ik had dus het eerste introduce veld leeg gelaten en de andere 2 gevuld met "dit is ook" en "al een test".

EDIT:
De aantal ophalen is het probleem ook niet. COUNT telt NULL-waardes al niet mee. Het gaat echt om NULL in de database te krijgen.

EDIT2:
Voor de duidelijkheid de uit te voeren query ziet er ondertussen zo uit:

PHP:
1
$query ="INSERT INTO formulier(Ak, FirstName, tussenvoegsel, LastName, Email, intro1, intro2, intro3) VALUES ('', '$FN', '$TV', '$LN', '$EM', ".$IN1.", ".$IN2.", ".$IN3.")";

[ Voor 31% gewijzigd door Trasos op 27-11-2008 23:58 ]


Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 16-09 13:49

Patriot

Fulltime #whatpulsert

Hoe vul je $IN1, $IN2 en $IN3 nu precies? Je doet nog iets verkeerd..

EDIT:
Echo sowieso $query eens, dan zie je misschien al wat er verkeerd gaat.

[ Voor 38% gewijzigd door Patriot op 28-11-2008 00:21 ]


Acties:
  • 0 Henk 'm!

  • Trasos
  • Registratie: Juli 2003
  • Niet online
Alle data komt goed door alleen waar NULL moet staan staat nu dus niks als ik de $query print.
INSERT INTO formulier(Ak, FirstName, tussenvoegsel, LastName, Email, intro1, intro2, intro3) VALUES ('', 'Rene', 'van der ', 'Heijden', 'mail@bugmenot.com', 'Dit is ook', 'al een test', )
"intro3" had ik dus leeg gelaten. Had hier nu geen NULL moeten staan dan?

EDIT:

Doh! Ik had de variabele gevuld met NULL. Leeg dus. Terwijl ik er dus een tekstje van had moeten maken die dan later als NULL werd uitgelezen zonder de quotes.

Thx voor de goede hulp! Ik was niet op dit trucje gekomen iig. _/-\o_

[ Voor 24% gewijzigd door Trasos op 28-11-2008 00:37 ]


Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 16-09 13:49

Patriot

Fulltime #whatpulsert

Laat me raden, het staat nu zo in je PHP:

PHP:
1
$IN3 = NULL;


Er moeten natuurlijk wél quotes omheen, anders dan is het de PHP-NULL, en dat is inderdaad niets als string.

Acties:
  • 0 Henk 'm!

  • Trasos
  • Registratie: Juli 2003
  • Niet online
Patriot schreef op vrijdag 28 november 2008 @ 00:36:
Laat me raden, het staat nu zo in je PHP:

PHP:
1
$IN3 = NULL;


Er moeten natuurlijk wél quotes omheen, anders dan is het de PHP-NULL, en dat is inderdaad niets als string.
Daar was ik ondertussen idd achtergekomen. Slordig, slordig, slordig.

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Afbeeldingslocatie: http://imgs.xkcd.com/comics/exploits_of_a_mom.png
(Van XKCD) Gebruik liever ook prepared statements, om SQL injection te voorkomen. :)

[ Voor 11% gewijzigd door pedorus op 28-11-2008 11:32 ]

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten

Pagina: 1