Programmera i PHP/Formulär och PHP

Från Wikibooks


Formulär är ett sätt att få information från användaren så att den går att bearbeta endera med ett PHP-script eller med något annat script som javascript.

Ofta används javascript för att avgöra att informationen som skrivs in är korrekt eftersom PHP inte klarar av att kontrollera vad som skrivs medan det skrivs vilket javascript kan. T.ex. att man skrivit i ett @ i en e-mailadress. PHP används vanligen när informationen väl skickats iväg till servern.

Det finns två sätt att läsa av informationen från formuläret. Det ena är GET det andra är POST.

GET[redigera]

Med GET läser man det som finns i adressfönstret. Du har säkert sett webadresser som har ett frågetecken och något annat efter. Det som kommer efter är det som man kan läsa av med PHP.

T.ex: http://www.w3schools.com/welcome.php?fname=Peter&age=37

Här finns det två variabler:fname och age som har värdena Peter och 37. Det här är ett väldigt enkelt sätt att skicka variabler mellan olika sidor. Med enkelheten kommer också riskerna. Vem som helst kan ändra variablerna och på det sättet endera hacka sig in i din databas eller bara förstöra för dig. Speciellt känslig information som lösenord skall aldrig skickas med ett GET kommandpo eftersom texten syns för alla. Ändå, om du kan anse att en användare inte kan orsaka speciellt mycket skada är GET ett enkelt och smidigt sätt.

En annan fördel är att en URL skapad med GET kan sparas som bokmärke, vilket inte en URL skapad med POST kan.

Exempel från: http://www.w3schools.com/php/php_get.asp

Du har en sida med ett formulär som har två textfönster och en knapp:

<form action="welcome.php" method="get">
 Name: <input type="text" name="fname">
 Age: <input type="text" name="age">
 <input type="submit">
 </form>

Trycker man på knappen skickas informationen i formuläret till sidan welcome.php och den kan se ut så här:

<html>
 <body>
 
Welcome <?php echo $_POST["fname"]; ?>!<br>
 You are <?php echo $_POST["age"]; ?> years old.
 
</body>
 </html>

Om du nu fyllde i i formuläret att du heter Peter och är 37 år gammal ser informationen i adressfältet på webläsaren:

http://www.w3schools.com/welcome.php?fname=Peter&age=37

Och det som slutligen syns på sidan welcome.php är:

Welcome Peter.
You are 37 years old! 

POST[redigera]

POST har mycket högre säkerhet eftersom det är du som programmerare som avgör vad som skall skickas och det går inte att lägga in andra värden lika enkelt. Skall känslig information som inloggningsnamn eller lösenord skickas mellan sidor skall alltid POST användas.

Det enda som skiljer jämfört med GET är definitionsraden i formuläret. För att kopiera exemplet från W3C igen: http://www.w3schools.com/php/php_forms.asp

Med POST ser samma formulär som användes i exemplet med GET ut:

<html>
 <body>
 
<form action="welcome.php" method="post">
 Name: <input type="text" name="fname">
 Age: <input type="text" name="age">
 <input type="submit">
 </form>
 
</body>
 </html>

I welcome.php anger vi att variablerna skall läsas med POST istyälet för GET:

<html>
 <body>
 
Welcome <?php echo $_POST["fname"]; ?>!<br>
 You are <?php echo $_POST["age"]; ?> years old.
 
</body>
 </html>

Och slutresultatet för användaren är likadant om samma värden används:

Welcome Peter.
You are 37 years old! 

POST och GET på samma sida[redigera]

Eftersom man anger i formuläret om man skall använda POST eller GET kan man inte blanda sätt i samma formulär. Det är dock möjligt att ha flera olika formulär på samma sida med blandat POST och GET men det betraktas som slarvig kodning och bör undvikas för att koden skall bli så enkel som möjligt att läsa.

Man kan använda samma sida att läsa av variabler som endera är GET eller POST, men det betraktas som slarvig kodning och bör undvikas för att koden skall bli så enkel som möjligt att läsa.

Om du inte riktigt vet om en variabel kommer från POST eller GET finns en överliggane variabel från PHP4 som heter $_REQUEST. Det är en array som innehåller samtliga variabler som skickat till sidan oavsett om man använt POST eller GET (eller $_COOKIE).

Det används tex:

<?php
if (isset($_REQUEST['age'])) {
echo "Tack för att du fyllde i din ålder.";
}
?>

Två knappar på samma formulär[redigera]

Ibland finns behov av att ha två, eller fler, knappar i samma formulär. Hur gör man då? Anta att du i ditt formulär har följande två knappar:

<input type="submit" name="action" value="Uppdatera" />
<input type="submit" name="action" value="Radera" />

De har samma namn men olika värden. Om man trycker på någon av dem så postas även värdet. För att läsa av resltatet efter det att formuläret postats kan du använda följande kod:

if ($_POST['action'] == 'Uppdatera') {
    //Skriv vad som hände om man uppdaterar
} else if ($_POST['action'] == 'Radera') {
    //Skriv vad som händer om man raderar
} else {
    //Om det blivit fel
}

Det finns ett annat sätt att kontrollera vad det är som postats där varje knapp är unik:

<input type="submit" name="uppdatera_knapp" value="Uppdatera" />
<input type="submit" name="radera_knapp" value="Radera" />

Då kan du använda den här koden för att läsa av vilken knapp som tryckts utan att ta hänsyn till vad som faktiskt står på knappen. Det kan vara bra om du t.ex. har specialtecken på knappen som symboler från Wingdings eller svenska åäö:

if (isset($_POST['uppdatera_knapp')) {
    //gör en uppdatering
} else if (isset($_POST['radera_knapp'])) {
    //gör en radering
} else {
    //ingen knapp har tryckts in
}