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.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:

  1. hej "kalle"
  2. Nu skall jag jäklas <textarea rows=1000>Hi hi</textarea>De va kul
  3. <a href=http://www.en.mycket.hemsk.porrsajt.com>oskyldig länk?</a>
  4. <font face=arial color=red size=7>Im BIG</font>
  5. En rad<enter>
    en till rad<enter>
    och en till
  6. 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):

  1. Radbyten måste beaktas och kanske bytas ut till <br>
  2. Vi kan inte godkänna html kod i texten - förr eller senare kommer det en lustigkurre och skriver t.ex. textarea exemplet ovan...
  3. 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.
  4. 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&auml;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>&nbsp;</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>
Listning 2.3.5.1 - samples/_l3i.php
[Visa i separat fönster]

OBS! För tillfället bryr vi oss inte om att det kan lämnas tomt i alla textboxar - valideringen kommer senare...

   UppgifterUppgift 25