|
1
2
3
4
5
6
7
8
9
Din uppgift
2.3.8 Refresh problematiken
Problemet är ju att URL i adressfältet är guestbook.php?vem=aa&...
efter att vi skrivit i gästboken, och om vi laddar om sidan är
det ju denna url som laddas.
Vi borde således "tömma" adressen från alla
parametrar efter att vi skrivit till filen. Det går dock inte
att tömma dessa i efterskott. Det är däremot helt möjligt
att ladda sidan på nytt, man denna gång utan parametrar.
Detta görs med några rader på lämpligt ställe,
se nedan:
<?php
function beakta_alla_dumheter( $text )
{
$text = strip_tags( $text );
$text = strip_tags( $text );
$text = nl2br( $text );
$text = str_replace( "\r", "", $text );
$text = str_replace( "\n", "", $text );
$text = str_replace( "\\\"", "\"", $text );
$text = str_replace( "|", "", $text );
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:s");
$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 ;
$filen = fopen ( "guestbook.txt", "a");
if ( $filen )
{
flock( $filen, 1 );
fputs ( $filen, $allt . "\n");
flock( $filen, 3 );
fclose ( $filen );
}
# ladda sidan på nytt - men utan några ULR parametrar
# du får INTE skriva något till sidan innan du sätter
# header
# OBS! Stora L i Location och EXAKT ett
# mellanslag efter :
header("Location: guestbook.php");
exit;
}
function visa_gästboken()
{
$innehållet = file ( "guestbook.txt" ) Or Die("Kunde inte öppna filen");
arsort($innehållet);
echo "<table border=\"1\">\n";
foreach( $innehållet as $rad )
{
$fälten = explode( "|", $rad );
$datum = $fälten[ 0 ];
$vem = $fälten[ 1 ];
$elpost = $fälten[ 2 ];
$ärende = $fälten[ 3 ];
$texten = $fälten[ 4 ];
$datum = substr($datum, 8, 2) . "." .
(int) substr($datum, 5, 2) . "." .
(int) substr($datum, 0, 4) . " " .
substr($datum, 11);
echo "<tr><td>" . $datum . "</td></tr>\n";
echo "<tr><td>" . $vem . "</td></tr>\n";
echo "<tr><td><a href=\"mailto:" . $elpost . "\">";
echo $elpost . "</a></td></tr>\n";
echo "<tr><td>" . $ärende . "</td></tr>\n";
echo "<tr><td>" . $texten . "</td></tr>\n";
}
echo "</table>\n";
}
?>
Vad gör vi egentligen?
Location modifierar headern på sidan. Tag en titt på följande
länk (location.php)
där jag visar allt - inklusive headern - som sänds från
servern för två sidor, den ena är en sida som finns,
medan den andra är en sida som "redirectar" till en annan
sida. Observera att Location: är satt på den andra sidan.
När browsern stöter på Location i headern så
kommer den att ladda den url som där anges, utan att fortsätta
med sidan. Det är detta vi simulerar genom att sätta Header("Location:
guestbook.php")
|