Double quotes afvangen in Query
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?
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?
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.
Zelfde geldt voor dubbele.
Gebruik mysql_real_escape_string, haal addslashes (en dus eventueel ook stripslashes) en zet magic quotes uit.
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
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
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.
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.
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.
$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.
Dat ligt waarschijnlijk niet aan mysql_real_escape_string(). Bevat $_POST['eenstring'] wel hetgeen dat jij verwacht? Echo die variabele eens :-)
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?
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?
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...
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.
De enkele quoates worden goed afgevangen alleen de dubbele nog steeds niet.
Laat eens wat van je script zien? En dan met name het gedeelte waar je de POST variabelen verwerkt...
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')
$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')
Doe eens een test met het volgende script:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
var_dump($_POST);
?>
<form action="#" method="post">
<textarea name="test">
<input type="submit" value="submit">
</form>
var_dump($_POST);
?>
<form action="#" method="post">
<textarea name="test">
<input type="submit" value="submit">
</form>
Ja goed, maar $_POST['kaarttekst'] zal al niet de juiste waarde hebben. Je moet uitzoeken waarom dat het geval is...
Code (php)
1
2
3
4
5
6
7
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 . "')
";
?>
$sQuery = "
INSERT IGNORE INTO `tmp_tbl` ( `column_1`, `column_2` ) VALUES ('" . mysql_real_escape_string($_POST['value'], $oDbObject . "')
";
?>
Heb je hier wat aan?
controleer je query dan is, dit klopt niet!
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$sQuery = "
INSERT IGNORE INTO `tmp_tbl` ( `column_1`, `column_2` ) VALUES ('".mysql_real_escape_string($_POST['value'])."', '$oDbObject')";
?>
$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
Mick ForSure op 19/07/2010 15:26:28:
controleer je query dan is, dit klopt niet!
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$sQuery = "
INSERT IGNORE INTO `tmp_tbl` ( `column_1`, `column_2` ) VALUES ('".mysql_real_escape_string($_POST['value'])."', '$oDbObject')";
?>
$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)
1
2
3
4
5
6
7
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) . "')
";
?>
$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.




