1
2
3
4
5
6
7
8
9
Din uppgift
2.3.5 Problem...
Det finns några problem med koden som den är. Prova genom
att skriva in följande i Text: textarean på
sidan som finns under denna länk:
- hej "kalle"
- Nu skall jag jäklas <textarea rows=1000>Hi hi</textarea>De
va kul
- <a href=http://www.en.mycket.hemsk.porrsajt.com>oskyldig länk?</a>
- <font face=arial color=red size=7>Im BIG</font>
- En rad<enter>
en till rad<enter>
och en till
- En massa streck ||||||||||
Vi ser tydligt att måste beakta två saker i texten för
att kunna sätta in detta i vår fil (som skall ha en rad per
inlägg i gästboken):
- Radbyten måste beaktas och kanske bytas ut till <br>
- Vi kan inte godkänna html kod i texten - förr eller senare
kommer det en lustigkurre och skriver t.ex. textarea exemplet ovan...
- Eftersom vår fil använder | för att avdela mellan
fälten måste dessa tas bort om någon skriver in dem
i en textbox.
- Eftersom PHP ändrar " till \" måste vi ändra
den tillbaka...
Nedan är koden som beaktar detta. Tag eventuellt en titt på
strings_conv.php, strings_van.php,
funktioner.php samt
syntax.php för mer information om de använda funktionerna.
Eftersom det är flera strängar som behöver beaktas/modifieras
är det enklast att skapa en funktion som sköter om detta.
<html>
<head>
<title>En gästbok</title>
</head>
<body>
<form>
<table border="1">
<tr><td>Namn:</td><td>
<input type="text" name="vem">
</td></tr>
<tr><td>Elpost:</td><td>
<input type="text" name="elpost">
</td></tr>
<tr><td>Ärende:</td><td>
<input type="text" name="arende">
</td></tr>
<tr><td>Text:</td>
<td>
<textarea name="texten" rows="5" cols="40"></textarea>
</td></tr>
<tr><td> </td><td>
<input type="submit" name="knapp" value=" Skriv ">
</td></tr>
</table>
</form>
<?php
# funktion som "städar upp" texen så att den skall gå
# att sätta in i filen
function beakta_alla_dumheter( $text )
{
# tag bort alla html tags i texten
$text = strip_tags( $text );
# tag bort alla html tags i texten
$text = strip_tags( $text );
# sätt in <br> tags där det finns <enter> (CRLF)
$text = nl2br( $text );
# Radbyten hanteras lite olika i olika miljöer
# i Unix sätts det in en LF (ascii 13) som i PHP
# betecknas med \n
# medan Windows maskiner sätter in CRLF (ascii 10 + ascii 13)
# som i PHP betecknas med \r\n
# för säkerhets skull tar vi bort bägge
# tag bort eventuella \r ( CR )
$text = str_replace( "\r", "", $text );
# tag bort eventuella \n ( LF )
$text = str_replace( "\n", "", $text );
# byt ut \" till " - jo det skall vara "\\\""
$text = str_replace( "\\\"", "\"", $text );
# tag bort eventuella | tecken
$text = str_replace( "|", "", $text );
# låt funktionen returnera den modifierade texten
return $text;
}
if ( isset( $_REQUEST[ "knapp" ] ) )
{
$vem = $_REQUEST[ "vem" ];
$elpost = $_REQUEST[ "elpost" ];
$ärende = $_REQUEST[ "arende" ];
$texten = $_REQUEST[ "texten" ];
$datum = date("Y.m.d H:i");
$vem = beakta_alla_dumheter( $vem );
$ärende = beakta_alla_dumheter( $ärende );
$elpost = beakta_alla_dumheter( $elpost );
$texten = beakta_alla_dumheter( $texten );
$allt = $datum . "|" . $vem . "|" . $elpost . "|" .
$ärende . "|" . $texten ;
# ändrat lite på echo för att visa tydligare vad som skett
echo "Du klickade på Skriv och
följande kommer att sättas i filen<br>";
echo htmlentities ($allt);
}
# all PHP kod som tidigare
# ...
?>
</body>
</html>
OBS! För tillfället bryr vi oss inte om att det kan
lämnas tomt i alla textboxar - valideringen kommer senare...
|