Toon posts:

[MySQL] query insert 0 ipv string

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een heel vaag probleem. Als deze query uitgevoerd wordt, dan wordt er een 0 in de tabel gezet, ipv de string die in de query staat. De query staat als volgt in de PHP file:
PHP:
1
2
3
4
5
6
7
8
<?php
$qUpdate_product = 'UPDATE '.$aConfig['tabel']['product'].'
SET
  productnaam=\''.$_POST['productnaam'].'\' AND
  bedrijven_leveren=\''.$sBedrijven_leveren.'\'
WHERE
  pid='.$_GET['pid'];
?>

Dat kan dan een query opleveren die er als volgt uit ziet:
code:
1
2
3
4
5
6
7
UPDATE
  producten
SET
  productnaam='televisie'
  AND bedrijven_leveren='a:3:{i:0;i:1:1;i:1;i:1:3;i:2;i:1:5;}'
WHERE
  pid=1

Het probleem zit in het bedrijven_leveren stuk. Als ik dat weghaal, dan gaat alles goed. Ik denk dat ik een bepaald teken moet escapen, maar ik weet niet welk. Ik heb alles al geprobeerd (:, ;, { en } ), maar nix hielp. Het bedrijven_leveren gedeelte wordt helemaal niet uitgevoerd.
Ik krijg geen error terug van MySQL. Ik heb hem ook uitgevoerd in de MySQL dosprompt en dit is het resultaat daarvan:
code:
1
2
3
4
5
6
7
8
9
10
11
mysql> UPDATE producten SET productnaam='televisie' AND bedrijven_leveren='a:3:{
i:0;i:1:1;i:1;i:1:3;i:2;i:1:5;}' WHERE pid=1; SELECT * FROM producten;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0

+-----+-------------+--------------------------------+
| pid | productnaam | bedrijven_leveren              |
+-----+-------------+--------------------------------+
|   1 | 0           | a:3:{i:0;i:1;i:1;i:3;i:2;i:5;} |
+-----+-------------+--------------------------------+
1 row in set (0.00 sec)

Als ik de SELECT query niet doe, dan is dit het resultaat:
code:
1
2
3
4
mysql> UPDATE producten SET productnaam='televisie' AND bedrijven_leveren='a:3:{
i:0;i:1:1;i:1;i:1:3;i:2;i:1:5;}' WHERE pid=1;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0

Dus MySQL vind dus wel een rij, maar hij past hem gewoon niet aan.
Kan iemand mij uitleggen wat er hier fout gaat?

De kolom productnaam is een varchar met de lengte van 255.

Je kan de source van de complete file vinden op http://www.cybertinus.nl/...heer_bewerk_producten.php
De query staat op regel 182, wat vrij ver onderaan is.

[ Voor 7% gewijzigd door Verwijderd op 09-08-2004 15:43 ]


Verwijderd

Bij een SET moet je toch komma's gebruiken om de clauses van elkaar te scheiden, niet ANDs.

code:
1
2
3
4
5
6
7
UPDATE
  producten
SET
  productnaam='televisie',
  bedrijven_leveren='a:3:{i:0;i:1:1;i:1;i:1:3;i:2;i:1:5;}'
WHERE
  pid=1


En misschien ten overvloede, bedrijven_leveren is toch ook wel een kolom van het type VARCHAR?

[ Voor 59% gewijzigd door Verwijderd op 09-08-2004 15:48 ]


Verwijderd

Topicstarter
Je hebt gelijk. Wat verschikkelijk stom zeg, dat ik dat niet heb gezien. Ik ben nu 2 uur bezig met dit probleem. Is het zoiets simpels. Wat stom zeg. Wel raar trouwens dat de MySQL prompt dan niet gaat zeiken dat de query verkeerd is.
Hartelijk bedankt.
En bedrijven_leveren is idd ook een varchar. Ook met maximum lengte van 255.

[ Voor 18% gewijzigd door Verwijderd op 09-08-2004 15:51 ]


  • ElectronicAlien
  • Registratie: Juli 2003
  • Laatst online: 08-01-2025

ElectronicAlien

Who, me...?

Verwijderd schreef op 09 augustus 2004 @ 15:47:
Bij een SET moet je toch komma's gebruiken om de clauses van elkaar te scheiden, niet ANDs.
Volgens mij ook, daarom wordt waarschijnlijk alleen het laatste veld correct ingevoerd en krijgt het veld 'productnaam' de default waarde.

[ Voor 6% gewijzigd door ElectronicAlien op 09-08-2004 15:51 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 14:53

NMe

Quia Ego Sic Dico.

Misschien niet helemaal ontopic, maar what the hell sla jij op in dat bedrijven_leveren veld? Als je met dat veld een onbekend aantal relaties met andere tabellen (bedrijventabel?) probeert te leggen, dan ben je heel raar bezig en kun je beter wat doorlezen over normaliseren en kruistabellen.
Bovendien zou ik me als ik jou was eens verdiepen in het fenomeen SQL injection. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Ik sla in de kolom bedrijven_leveren op welke bedrijven het product leveren. Het zou idd beter zijn om daarvoor een extra tabel te maken, maar ik ben al behoorlijk ver in dit project en dat gaat weer erg veel tijd kosten om de boel overhoop te gooien en dat ga ik niet halen voor m'n deadline.
En ik weet dat je in dat productveld een SQL injection kan doen. Maar dit script is ook nog niet af, dus dat komt nog.

Groeten, Cybertinus
Pagina: 1