quotes
Wanneer ik vanuit een html formulier gegevens naar een ander pagina verstuur, dan wordt een backslash vóór de quote geplaatst.
Ik probeer dit met "htmlentities" op te lossen maar het werkt niet.
Wie kan helpen om dit probleem op te lossen?
Hieornder het formulier:
<html>
<head>
</head>
<body>
<form action="mail.php" method='POST'>
opmerking?<input type='text' name='opm'>
<input type="submit" VALUE="versturen">
</form>
</body>
</html>
Hieronder het verwerkpagina:
<html>
<head>
</head>
<body>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?PHP
if ($_POST['opm']){
$opmerking = htmlentities("$opm");
echo$opmerking;
}
else {
echo'niets ontvangen';
}
?>
if ($_POST['opm']){
$opmerking = htmlentities("$opm");
echo$opmerking;
}
else {
echo'niets ontvangen';
}
?>
</body>
</html>
Wel opletten dat je dan alle invoer checkt voordat je dingen met je DB gaat doen (maar goed, dat moest sowieso altijd al).
Check je $opm, variablen horen niet tussen "" dus gewoon htmlentities($opm);
Heb dat voordien geprobeert maar het blijft hetzelfde.
Op php.net lees ik dat "htmlentities" betrekking heeft op een "string". Maar dit zou toch ook bij een variabele moeten kunnen?
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?PHP
if ($_POST['opm']){
$opmerking=htmlentities($_POST['opm']);
echo$opmerking;
}
else {
echo'niets ontvangen';
}
if ($_POST['opm']){
$opmerking=htmlentities($_POST['opm']);
echo$opmerking;
}
else {
echo'niets ontvangen';
}
Jouw 'probleem' wordt veroorzaakt doordat de instelling magic_quotes_gpc in je php.ini ingeschakeld is. Daardoor wordt bij bijvoorbeeld het verzenden van een formulier de input beveiligd door gevoelige tekens te escapen met een backslash.
Een oplossing is al gegeven door Terence: stripslashes(). Deze functie verwijdert de extra toegevoegde backslashes. Beter is het nog om de oplossing van Jan te gebruiken en magic_quotes_gpc helemaal uit te schakelen.
Quote:
Als de inhoud van een variabele een string is, kun je htmlentities() natuurlijk gewoon toepassen. Maar goed, dat is hier niet van belang.Op php.net lees ik dat "htmlentities" betrekking heeft op een "string". Maar dit zou toch ook bij een variabele moeten kunnen?
Ik heb de magic quotes op mijn testserver afgezet, en inderdaad dit werkt nu.
Maar hierdoor krijg ik een probleem met mysql. wanneer men in het input veld van het invulformulier een quote gerbuikt, dan geeft mysql hier een fout op. het veld in mysql is als "TEXT" gedifinieerd. Zonder de quote krijg ik deze fout niet. Moet ik iets in mysql wijzigen?
Nee, je moet op alle user-input de functie mysql_real_escape_string() (of een soortgelijke functie voor andere databases) toepassen.
Ik zou dit probleem nog eens willen aansnijden....
ik heb op elke user input veld "mysql_real_escape_string() " toegepast
maar toch krijg ik steeds een syntax error...
Kan iemand verder helpen?
zonder relevante code zal dat moeilijk gaan
; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off
; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off
; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off
En dit staat in mijn php verwerk pagina:
//$onderwerp='onderwerp';
$onderwerp=$_POST['onderwerp'];
$onderwerp=mysql_real_escape_string($onderwerp);
//$omschrijving='omschrijving van de fout';
$omschrijving=$_POST['omschrijving'];
$omschrijving=mysql_real_escape_string($omschrijving);
//$opmerking='opmerking van de fout';
$opmerking=$_POST['opmerking'];
$opmerking=mysql_real_escape_string($opmerking);
Je vergeet een mysql connectie mee te geven bij de mysql_real_escape.