Ik ben nog maar kort bezig met PHP. Ik ben de "Hello World" fase inmiddels wel gepasseerd maar vraag mij niet om een webwinkel te bouwen. Dus als dit een n00b vraag is, vergeef het me dan.

Het probleem is als volgt:

Ik heb een simpel php formulier:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Melding van verhuizing</title>
</head>
<body>
<form name="test1" action="[code]<?=$_SERVER['PHP_SELF']?>
" method="post">
<table>
<tr>
<td>Naam:</td>
<td><input name="naam" value="
<?=$_POST['naam']?>
" type="text" />*</td>
</tr>
<tr>
<td><input name="submit" type="submit" value="Volgende" /></td>
</tr>
</table>
</form>
</body>
</html>[/code]

Als ik in dit formulier, bij Naam, een waarde invoer en het formulier submit is het de bedoeling dat het formulier weer verschijnt met de ingegeven waarde als value van het veld naam.

Dit werkt allemaal prima zolang je geen backslash ingeeft. Doe je dit wel dan gebeurd er het volgende:

Je geeft een \ in. Je submit en de waarde die je terug krijgt is \\ !?! Submit je nogmaals dan wordt de waarde \\\\, submit, \\\\\\\\ enz.

Dit is een heel vervelend en vreemd probleem. Ik dacht eerst dat ik ergens iets fout had gedaan in mijn code maar in het hierboven weergegeven formulier, waar verder geen code in zit, gebeurd dit ook.

Loop ik nu tegen een bug in PHP aan of is dit een bekend probleem?

Kan ik dit op de een of andere manier ondervangen? Ik heb reguliere expressies geprobeerd maar dit werkt tot nu toe nog niet. Dat komt misschien omdat ik pas net begonnen ben dit te leren.

Hulp s.v.p.! Ik kan er niet simpelweg van uitgaan dat gebruikers geen typo's maken.

Daarbij is dit een potentieel fatale fout. Ik wilde zien wat er zou gebeuren als op submit bleef drukken en uiteindelijk liep mijn pc muurvast. Ik kan me zo voorstellen dat er met een server hetzelfde gebeurd.

stripslashes() bij het echo()en :)
En geen shorttags (<?=?>) gebruiken, maar gewoon zoals het moet (<?php echo ?>).
Dank je wel, ook voor de snelle reactie. Is het een aanrader om stripslashes() te gebruiker op alle variabele waar je user input verwacht alvorens ze door je script te laten bewerken?
stripslashes() op alles wat uit de database komt, waar je bij het INSERTen mysql_real_escape_string() overheen hebt gehaald, en op alle POST-variablen.

Reageren