Partyflock
 
Forumonderwerp · 835033
ik heb dr weer een... :)

als ik text in een database donder... met tekens als 'en " komt er elke keer een / voor of het veranderd in een ?

hoe kan ik dit voorkomen?
 
Tjee wat ben jij lastig :[

:p :knuffel:

Ik heb geen idee waar jij het over hebt 8)
bij het uitlezen van de gegevens die tekens vervangen door de juiste tekens :yes:
Dit wordt namelijk gedaan om geen SQL fouten te krijgen. Als je een ' of een " wil wegschrijven kun je namelijk foute SQL-queries krijgen aangezien je die tekens in de Queries zelf ook al gebruikt.

Je kunt dus of in de Query al vervangen door bijvoorbeeld een ander teken en deze bij het uitlezen weer vervangen :)
Dan moet je alles als html text in je database zetten zoals

<?php
$bericht = htmlspecialchars("<a href='test.htm'>Test</a>", ENT_QUOTES);
?>

Dit geeft als resultaat dat $bericht gelijk is aan:

&lt;a href='test.htm'&gt;Test&lt;/a&gt;

Maar dit neemt wel meer ruimte in beslag in je db
Artiest {SHOWLIST artist 45822, 30830}
je hebt een tabel en 3 variablen met de volgende waarde:
Waarde1 heeft als waarde: ~```'';":":":`
Waarde2 heeft als waarde: 12243324324@#$#&^%5*&
Waarde3 heeft als waarde: ":?><?|{YTGWKJN

met de volgende php code kun je deze zonder problemen toevoegen.

php code:
$query = "INSERT INTO tabel (kolom1, kolom2, kolom3) values ('$waarde1', '$waarde2', '$waarde3')"
mysql_query($query) or die("query failed");
laatste aanpassing
 
Dit gebruik je om te converteren en in je db te zetten:

<?php
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $new; // &lt;a href='test'&gt;Test&lt;/a&gt;
?>


dit gebruik je om te decoderen uit je db:
<?php
$str = "<p>this -&gt; &quot;</p>";

echo htmlspecialchars_decode($str);

// note that here the quotes aren't converted
echo htmlspecialchars_decode($str, ENT_NOQUOTES);
?>


Met een beetje fantasie kom je er nu wel.


ter verduidelijking :
The translations performed are:


'&' (ampersand) becomes '&amp;'

'"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set.

''' (single quote) becomes ''' only when ENT_QUOTES is set.

'<' (less than) becomes '&lt;'

'>' (greater than) becomes '&gt;'


PHP voegt automatisch die escapes (de slashes) toe als magic_quotes_gpc aan staat in je php config (wat default het geval is). Het nut ervan is om de luie programmeur te beveiligen voor een aantal onveiligheden.

Omschrijven naar HTML entities is best een prima idee, maar heeft hier 1 nadeel. Je slashes verdwijnen er niet mee. Dat doe je met http://nl3.php.net/manual/nl/function.stripslashes.php. Dus gewoon deze methode over je output aanroepen nadat het uit de database komt en je bent je slashes kwijt. Op zich zou je ze al kunnen verwijderen voordat je ze in de database stopt, maar dan moet je zelf meer checks doen om oa SQL insertion exploits te voorkomen.

Het makkelijkste zal zijn om de data gewoon in de database te laten staan zoals je nu hebt. Bij de output verwijder je de slashes met stripslashes() en eventueel daarna nog htmlspecialchars() om de output wat HTML vriendelijker te maken.
laatste aanpassing