Geposte gegevens ophalen
Situatie:
Ik heb een formulier met een aantal velden en een textarea. Na het versturen van het formulier en er is 1 van de velden niet goed ingevuld, laat ik een foutmelding zien. De rest van de gegevens moeten niet verloren gaan en ik echo dus de bijbehorende POST variabele in het veld.
Niks aan de hand, totdat er quotes in een veld zitten.
Ik submit dus dit in een formulier:
Hallo 'wereld'.
Ko"ei"en en kalveren
Vervolgens is er iets fout gegaan. Ik echo de geposte data ($_POST['data']) in het veld en hij poept dit uit:
Hallo \'wereld\'.\r\nKo"ei"en en kalveren
Ik dacht dat ik gewoon stripslashes() kon gebruiken, maar dan krijg je dit:
Hallo 'wereld'.rnKoeien en kalveren
Dat is natuurlijk niet goed (" wordt niks en \n wordt n). Volgens mij heb ik dit nog nooit eerder gehad. Ik snap het echt niet en ik voeg niet eens slashes toe etc. En normaal zal \n in een textarea toch gewoon een nieuwe regel moeten worden?
Als alles wel goed gaat en de informatie wordt in de DB gezet, gaat het wel goed als ik die gegevens ophaal..
Gewijzigd op 01/01/1970 01:00:00 door Kay Kay
Dat werkt helaas niet..
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form method="post" action="#">
<fieldset>
Veld: <input type="text" name="veld"<?php echo !empty($_POST['veld']) ? ' value="'.stripslashes(htmlentities($_POST['veld'],ENT_QUOTES)).'"' : ''; ?> /><br />
Vak: <textarea name="vak"><?php echo !empty($_POST['vak']) ? stripslashes(htmlentities($_POST['vak'],ENT_QUOTES)) : ''; ?></textarea><br />
<input type="submit" value="Verzend" />
</fieldset>
</form>
</body>
</html>
<html>
<head>
<title>Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form method="post" action="#">
<fieldset>
Veld: <input type="text" name="veld"<?php echo !empty($_POST['veld']) ? ' value="'.stripslashes(htmlentities($_POST['veld'],ENT_QUOTES)).'"' : ''; ?> /><br />
Vak: <textarea name="vak"><?php echo !empty($_POST['vak']) ? stripslashes(htmlentities($_POST['vak'],ENT_QUOTES)) : ''; ?></textarea><br />
<input type="submit" value="Verzend" />
</fieldset>
</form>
</body>
</html>
Werkt prima hier
Code (php)
1
2
3
2
3
<?php
echo '<textarea>' . htmlentities(stripslashes($_POST['veldnaam'])) . '</textarea>';
?>
echo '<textarea>' . htmlentities(stripslashes($_POST['veldnaam'])) . '</textarea>';
?>
Gewijzigd op 01/01/1970 01:00:00 door Willem Jan Z
WillemJan Z schreef op 04.04.2009 00:28:
Je vergeet de echo
Huh??
SanThe schreef op 04.04.2009 00:33:
Huh??
Never mind :P Ik ben moe... Ik ga maar slapen :-)WillemJan Z schreef op 04.04.2009 00:28:
Je vergeet de echo
Huh??
[me]doet ogen dicht[/me]
Gewijzigd op 01/01/1970 01:00:00 door Willem Jan Z
Yes, found it :D
Ik had ergens dit staan:
$_POST = ainjection($_POST);
De functie is dit:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
function ainjection($value)
{
$value = is_array($value) ?
array_map('ainjection', $value) :
mysql_real_escape_string($value);
return $value;
}
{
$value = is_array($value) ?
array_map('ainjection', $value) :
mysql_real_escape_string($value);
return $value;
}
Gewijzigd op 01/01/1970 01:00:00 door Kay Kay
htmlentities(stripslashes($_POST['veldnaam']))
Wil je de tekst gewoon op de site zetten dan gebruik je:
nl2br(htmlentities(stripslashes($_POST['veldnaam'])))
En in de database zetten doe je met:
mysql_real_escape_string(stripslashes($_POST['veldnaam']))