några sidor på nätet om PHP programmering

Sök efter  
Börja här Uppgifter Testa dig själv Tips Sidokarta mm. Länkar Sök

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";
    }
?>
Listning 2.3.8.1 - samples/guestcode3.php
[Visa i separat fönster]

 

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")

 

 

   UppgifterUppgift 28