[PHP] Fout met quotes bij mysql insert

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Dark Wanderer
  • Registratie: September 2003
  • Laatst online: 11-08-2024
Hallo, als ik waarden uit een html formulier wil inserten in mijn mysql database waar quotes inzitten, dan insert hij niets.

Dus als ik in een veld in het formulier de tekst [test' fsdf] of zo invul, dan insert hij niet. Nu heb ik bovenaan de pagina waar er geinsert wordt al $_POST=htmlspecialchars(addslashes($_POST)); neergzet, maar nu werkt het nog steeds niet, het is zelfs nog erger want dan is de hele array leeg. Kan iemand me uitleggen wat ik fout doe ?

hand·te·ke·ning (de ~ (v.))


Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 15:31

orf


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

error_reporting (E_ALL)

dan had je tenminste ook gezien dat je probeersel met de $_POST array foutmeldingen had opgeleverd.

en bovenstaande om waarden te escapen uiteraard voor je ze in je query gooit :)

[ Voor 25% gewijzigd door Bosmonster op 06-12-2005 15:37 ]


Acties:
  • 0 Henk 'm!

  • sariel
  • Registratie: Mei 2004
  • Laatst online: 22-05-2024
Je kan geen htmlspecialchars of addslashes op een array uitvoeren. dat moet op de inhoud van de postarray.

Copy.com


Acties:
  • 0 Henk 'm!

  • Dark Wanderer
  • Registratie: September 2003
  • Laatst online: 11-08-2024
SORRY IK HEB EEN FOUT GEMAAKT

Ik insert het in een access database via odbc, mysql functies zijn niet installed op de php server hier op mijn stagebedrijf.

[ Voor 3% gewijzigd door Dark Wanderer op 06-12-2005 15:55 ]

hand·te·ke·ning (de ~ (v.))


Acties:
  • 0 Henk 'm!

  • Dark Wanderer
  • Registratie: September 2003
  • Laatst online: 11-08-2024
sariel schreef op dinsdag 06 december 2005 @ 15:37:
Je kan geen htmlspecialchars of addslashes op een array uitvoeren. dat moet op de inhoud van de postarray.
Maar dat zijn tientallen variabelen, kan je niet iets maken dat door een array heen loopt of zo, want anders is het een heel tijdnemen kutwerk :P

hand·te·ke·ning (de ~ (v.))


Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 15:31

orf

Pas in je query de $_POST data escapen. Eventueel met een custom functie die ook direct quotes rond je waarde zet.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:14

Creepy

Tactical Espionage Splatterer

Dark Wanderer schreef op dinsdag 06 december 2005 @ 15:42:
[...]


Maar dat zijn tientallen variabelen, kan je niet iets maken dat door een array heen loopt of zo, want anders is het een heel tijdnemen kutwerk :P
Ja dat kan ;)
Lees: dat hoef je hier niet te vragen want dat kan je ook prima zelf even maken natuurlijk :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Ik heb nu al een aantal keer de volgende functie gebruikt, stond ergens in de comments van php.net, en moet zeggen dat die tot nu toe altijd prima gewerkt heeft. :)

PHP:
1
2
3
4
5
6
7
8
9
10
11
function smart_escape($value) {
    // Stripslashes
    if (get_magic_quotes_gpc()) {
        $value = stripslashes($value);
    }
    // Quote if not integer
    if (!is_numeric($value)) {
        $value = "'" . mysql_real_escape_string($value) . "'";
    }
    return $value;
}

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • Dark Wanderer
  • Registratie: September 2003
  • Laatst online: 11-08-2024
OkkE schreef op dinsdag 06 december 2005 @ 15:49:
Ik heb nu al een aantal keer de volgende functie gebruikt, stond ergens in de comments van php.net, en moet zeggen dat die tot nu toe altijd prima gewerkt heeft. :)

PHP:
1
2
3
4
5
6
7
8
9
10
11
function smart_escape($value) {
    // Stripslashes
    if (get_magic_quotes_gpc()) {
        $value = stripslashes($value);
    }
    // Quote if not integer
    if (!is_numeric($value)) {
        $value = "'" . mysql_real_escape_string($value) . "'";
    }
    return $value;
}
Zoals je verder naar boven kon lezen is mysql_real_escape_string niet ondersteunt

hand·te·ke·ning (de ~ (v.))


Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 15:31

orf

Op php.net staat bij elke functie See also.
Daar vind je dan meestal een vergelijkbare functie.

Acties:
  • 0 Henk 'm!

  • Dark Wanderer
  • Registratie: September 2003
  • Laatst online: 11-08-2024
Ik heb nu array_walk($_POST, addslashes());

Nu wordt de query string dit

INSERT INTO Personen2 (ParID, Achternaam, Voorvoegsel, Voorletters, Functie, Titel, ManVrouw, `E-mail`, Telefoon_werk, Telefoon_thuis, Telefoon_mobiel, Telefax, Opmerking, fAd, fBev, fCred, fDeb, fEl, fIA, fICT, fMag, fSI, fSys, fWerk, fWater, Relatiedag, Kerstkaart, `Update`, Seminar, Evenement, ICP, ICP2) VALUES ('3942', 'tertertt \'rtertert', '', '', '', '', 'M', '', '', '', '', '', 'wtb\'er', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '', '', '', '', '', 'nee', 'nee')

Maar ook dit wordt niet gepikt door access, terwijl er toch echt schuine strepen voor de quotes staan. Hoe los ik dit op ?

hand·te·ke·ning (de ~ (v.))


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Dark Wanderer schreef op dinsdag 06 december 2005 @ 15:54:
[...]


Zoals je verder naar boven kon lezen is mysql_real_escape_string niet ondersteunt
Oke, dat had ik eventjes niet gelezen. Maar dan is het iig een handige functie voor anderen die later in dit topic terecht komen dmv. de search. :)

Verder is het - lijkt me - gewoon op te lossen door een addslashes() mits je dit dus niet op een array doet, maar op een string. En daarnaast wil je (imo) de string pas escapen op het moment dat die de database in gaat, en dan zal je hoogstwaarschijnlijk toch alle waardes al opsommen, dus is het eenvoudig er dan een escape-functie over te halen.

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • Dark Wanderer
  • Registratie: September 2003
  • Laatst online: 11-08-2024
OkkE schreef op dinsdag 06 december 2005 @ 16:20:
[...]

Oke, dat had ik eventjes niet gelezen. Maar dan is het iig een handige functie voor anderen die later in dit topic terecht komen dmv. de search. :)

Verder is het - lijkt me - gewoon op te lossen door een addslashes() mits je dit dus niet op een array doet, maar op een string. En daarnaast wil je (imo) de string pas escapen op het moment dat die de database in gaat, en dan zal je hoogstwaarschijnlijk toch alle waardes al opsommen, dus is het eenvoudig er dan een escape-functie over te halen.
Zoals er een port boven de jouwe staat is dat al gelukt met addslashes, maar deze query pikt access (dat is de soort db die erachter zit) ook niet. IK WORD GEK

hand·te·ke·ning (de ~ (v.))


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Dark Wanderer schreef op dinsdag 06 december 2005 @ 16:18:
Maar ook dit wordt niet gepikt door access, terwijl er toch echt schuine strepen voor de quotes staan. Hoe los ik dit op ?
Even zoeken op Google levert deze pagina met uitleg op. In Access escape je schijnbaar met een quote (') ipv. een slash (\). :)

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
zoek eens gewoon in google op Google: escape string access in de eerste link staat je antwoord al

edit:

mmm... toch even refreshen als je het topic al even open hebt staan als je wat anders gaat doen ;)

[ Voor 24% gewijzigd door Woy op 06-12-2005 16:33 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
*T-MOB wijst even op de custom escape functie die hij vandaag al heeft gepost :)

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
OkkE schreef op dinsdag 06 december 2005 @ 16:23:
Even zoeken op Google levert deze pagina met uitleg op. In Access escape je schijnbaar met een quote (') ipv. een slash (\). :)
"Schijnbaar"? MySQL is de vreemde eend in de beit, niet Access :P
De SQL-specificatie stelt namelijk dat de ' met een extra ' escaped moet worden, niet met een \.

Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

* OkkE werkt alleen met PHP en MySQL, vandaar... :P

Maar lijkt me dat het probleem nu wel opgelost is. Alleen wel een idee misschien om de topic-titel nog even aan te passen? MySQL -> MS Access. Da's vooral voor de search wel handig, lijkt me. :)

[ Voor 9% gewijzigd door OkkE op 06-12-2005 16:47 ]

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
ACM schreef op dinsdag 06 december 2005 @ 16:37:
[...]

"Schijnbaar"? MySQL is de vreemde eend in de beit, niet Access :P
De SQL-specificatie stelt namelijk dat de ' met een extra ' escaped moet worden, niet met een \.
offtopic:
En om dan nog maar te zwijgen dat ze dat in PHP hebben proberen op te lossen door standaard gpc_magic_quotes aan te zetten :(. Het woord magic zegt imho al genoeg

[ Voor 11% gewijzigd door Woy op 06-12-2005 16:47 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Dark Wanderer
  • Registratie: September 2003
  • Laatst online: 11-08-2024
Is dit niet gewoon op te lossen met

array_walk($_POST, str_replace("'", "''"));

? ? ?

Dat moet in principe toch ook wel werken ? Dan maak ja van alle enkele quotes dubbele enkele quotes.

hand·te·ke·ning (de ~ (v.))


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Dark Wanderer schreef op vrijdag 09 december 2005 @ 10:55:
Is dit niet gewoon op te lossen met

array_walk($_POST, str_replace("'", "''"));

? ? ?

Dat moet in principe toch ook wel werken ? Dan maak ja van alle enkele quotes dubbele enkele quotes.
Hoezo doe je dat dan meteen op je hele $_POST array?? Dat vindt ik altijd zo stom. Wie zegt dat ik alle waardes die via een post binnen krijg in een database wil stoppen? Escapen moet je gewoon doen op de plek waar het hoort. Bij de data access

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Dark Wanderer
  • Registratie: September 2003
  • Laatst online: 11-08-2024
Omdat ik weet dat in dit geval de gehele post array in de database gepleurd wordt. Kan iemand mij vertellen of dit nou mogelijk is te doen of niet ?

hand·te·ke·ning (de ~ (v.))

Pagina: 1