Double quotes afvangen in Query

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Johnny Cash

Johnny Cash

19/07/2010 13:18:07
Quote Anchor link
Ik heb al heel lang een probleem met tekstinvoer waarin dubbele quotes in voorkomen.

enkele quotes worden wel goed opgeslagen in de database, als \'s
dubbele quotes worden niet goed opgeslagen in de database.
"string" wordt opgeslagen als \
er volgt dus niets.

Wie heeft de oplossing?
 
PHP hulp

PHP hulp

03/07/2020 00:34:19
 
Karl Karl

Karl Karl

19/07/2010 13:25:55
Quote Anchor link
Nee, enkele quotes moeten gewoon als ' opgeslagen worden. Niet iets anders.
Zelfde geldt voor dubbele.
Gebruik mysql_real_escape_string, haal addslashes (en dus eventueel ook stripslashes) en zet magic quotes uit.
 
Johnny Cash

Johnny Cash

19/07/2010 13:30:54
Quote Anchor link
deze opties had ik inderdaad al eens bekeken.
En wat bedoel je met magic quotes uitzetten?

En bij mysql_real_escap_string moet ik addslashes en stripslashes er ook uithalen? of lees ik het verkeerd?

Dank voor je reactie Karl Karl
 
Karl Karl

Karl Karl

19/07/2010 13:34:58
Quote Anchor link
Ja, addslashes en stripslashes mogen niet voorkomen in je script.
Dit verprutst de data die je in de database stopt.
Dat wil je dus niet.
In principe is het voldoende als je mysql_teal_escape_string gebruikt over de data die je in de database stopt.
Als je het er dan uithaalt, dan moet je wellicht iets gebruiken als htmlentities.
Zie voor magic quotes: security.magicquotes.
 
Johnny Cash

Johnny Cash

19/07/2010 13:48:19
Quote Anchor link
Ik heb nu:

$string = mysql_real_escape_string($_POST['eenstring'],$db);

Deze zet dus nu wel een \' neer maar bij " wordt er alleen een \ neer gezet en daarna volgt niets meer. Daardoor gaat er dus data verloren.
 
Joren de Wit

Joren de Wit

19/07/2010 14:06:33
Quote Anchor link
Dat ligt waarschijnlijk niet aan mysql_real_escape_string(). Bevat $_POST['eenstring'] wel hetgeen dat jij verwacht? Echo die variabele eens :-)
 
Johnny Cash

Johnny Cash

19/07/2010 14:12:36
Quote Anchor link
Je hebt idd gelijk Blanche PHP.

Als ik die POST echo krijg ik ook die \ te zien en daarna niets meer.

Iemand kan bijvoorbeeld opgeven: collega's maar ook "citaat bijvoorbeeld"

Hoe kan ik die dubbele quote dan afvangen en opslaan?
 
Joren de Wit

Joren de Wit

19/07/2010 14:14:15
Quote Anchor link
Normaal gesproken is mysql_real_escape_string() voldoende voor zowel de enkele als dubbele quotes. Je moet je even afvragen waarom een deel van de string niet in de $_POST variabele terecht komt...
 
Johnny Cash

Johnny Cash

19/07/2010 14:24:31
Quote Anchor link
Ik heb het na gekeken en verschillende dingen in een echo gezet, alleen het ontbreekt mij aan de kennis om dit op te lossen.

De enkele quoates worden goed afgevangen alleen de dubbele nog steeds niet.
 
Joren de Wit

Joren de Wit

19/07/2010 14:51:37
Quote Anchor link
Laat eens wat van je script zien? En dan met name het gedeelte waar je de POST variabelen verwerkt...
 
Johnny Cash

Johnny Cash

19/07/2010 15:12:40
Quote Anchor link
Het betreft dus een formulierveld waarop mensen iets op een kaartje kunnen zetten.

$kt = mysql_real_escape_string($_POST['kaarttekst'],$db);

vervolgens zet ik het in een INSERT QUERY. daarbij komt $kt in de VALUE te staan tussen single quotes. VALUE ('$kt')
 
Karl Karl

Karl Karl

19/07/2010 15:18:33
Quote Anchor link
Doe eens een test met het volgende script:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php

var_dump($_POST);
?>

<form action="#" method="post">
<textarea name="test">
<input type="submit" value="submit">
</form>
 
Joren de Wit

Joren de Wit

19/07/2010 15:19:22
Quote Anchor link
Ja goed, maar $_POST['kaarttekst'] zal al niet de juiste waarde hebben. Je moet uitzoeken waarom dat het geval is...
 
Erik Rijk
Moderator

Erik Rijk

19/07/2010 15:21:02
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

$sQuery
= "
   INSERT IGNORE INTO `tmp_tbl` ( `column_1`, `column_2` ) VALUES ('"
. mysql_real_escape_string($_POST['value'], $oDbObject . "')
"
;

?>


Heb je hier wat aan?
 
Mick ForSure

Mick ForSure

19/07/2010 15:26:28
Quote Anchor link
controleer je query dan is, dit klopt niet!

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php

$sQuery
= "
   INSERT IGNORE INTO `tmp_tbl` ( `column_1`, `column_2` ) VALUES ('"
.mysql_real_escape_string($_POST['value'])."', '$oDbObject')";

?>
Gewijzigd op 19/07/2010 15:26:59 door Mick ForSure
 
Karl Karl

Karl Karl

19/07/2010 15:34:00
Quote Anchor link
Mick ForSure op 19/07/2010 15:26:28:
controleer je query dan is, dit klopt niet!

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php

$sQuery
= "
   INSERT IGNORE INTO `tmp_tbl` ( `column_1`, `column_2` ) VALUES ('"
.mysql_real_escape_string($_POST['value'])."', '$oDbObject')";

?>


Ik denk dat Erik eerder dit bedoelt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

$sQuery
= "
   INSERT IGNORE INTO `tmp_tbl` ( `column_1`, `column_2` ) VALUES ('"
. mysql_real_escape_string($_POST['value'], $oDbObject) . "')
"
;

?>

Aan de escape de database link meegeven.
Maar volgens mij helpt dit geen ene sier en zijn die backticks (`) ook nog eens lelijk.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.