Double quotes afvangen in Query
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?
Zelfde geldt voor dubbele.
Gebruik mysql_real_escape_string, haal addslashes (en dus eventueel ook stripslashes) en zet magic quotes uit.
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
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.
$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 :-)
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...
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...
$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')
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?
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.