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