Logotyp för Björns studiewebb

Formulär i PHP

Inledning

Denna sida innehåller beskrivningar av hur man hämtar data från formulär i PHP.

För en komplett beskrivning av PHP och formulär rekommenderas PHP-dokumentation på adressen www.php.net. Den finns att ladda ner som bl.a. en Windows-hjälpfil (.CHM).

Observera att exemplen endast fungerar om denna webbplats finns på en webbserver som stödjer PHP! Se sidan Om på Björns studiewebb.

Grundläggande

Formulär är sättet som webbutvecklare kan kommunicera med besökaren. I PHP kan formulärhantering ske på två sätt, bl.a. beroende på hur PHP-motorn konfigurerats: med globala variabler registreade eller utan.

Att registrera globala variabler introducerar en säkerhetsrisk och görs därför inte på alla webbservrar. Risken är att någon skapar egna formulär för att utforska felaktigt skriven kod (t.ex. hur verifiering av inloggning sker).

En viktig detalj är att PHP skiljer på gemener och versaler i namn på variabler och index i vektorer. Det är alltså viktigt att stava rätt till variabler/index jämfört med kontrollers namn i formulär. För en mer omfattande beskrivning av hur man skapar formulär, se underwebben HTML.

Till början på sida

Om globala variabler registrerats

I PHP kan (globala) variabler, med samma namn som namnen på formulärs kontroller, skapas. Detta, vilket behandlas i detta avsnitt, kräver att globala variabler registreras.

Om globala variabler inte fungerar (d.v.s. ett fel i stil med "Notice: Undefined variable: {variabelnamn} in ..." visas) eller om vi vill att PHP-sidor ska fungera på de flesta webbservrar (oavsett hur PHP-motorn konfigurerats), se beskrivning nedan.

I nedanstående formulär skapas en textruta med namnet Fornamn och en knapp för att skicka formuläret. (Formuläret kommer skickas med HTTP GET eftersom attributet METHOD saknas i FORM-taggen, vilket är irrelevant om vi använder globala variabler.:-)

<form>
  <input type="text" name="Fornamn">
  <input type="submit" value="Skicka">
</form>

I PHP-koden kan vi hämta data som skickas från formuläret samt skriva ut data med nedanstående kod. Vi använder en variabel med samma namn som kontrollen i formuläret, Fornamn i detta exempel.

print "Ditt namn är $Fornamn";

I exemplet ovan använder vi möjligheten att kunna skriva ut variabler inuti strängar (istället för att slå samman den statiska texten med variabeln). Observera att vi inte kan kan stava variabelnamnet $fornamn utan måste stava det $Fornamn som namnet på formulärets textkontroll.

För att kontrollera om ett värde är satt i en variabel (d.v.s. har skickats från formulär) kan vi använda funktionern isset().

if(isset($Fornamn))
            print "Ditt namn är $Fornamn";

Exempel

Till början på sida

Om INTE globala variabler registrerats

Om globala variabler inte registrerats kan vi använda någon av de tre vektorerna $_GET, $_POST eller $_REQUEST för att hämta värden från formulär, beroende på om formulär skickats med HTTP GET, HTTP POST eller någondera. Variabler som börjar med "$_" är systemvariabler (eller pseudovariabler) som PHP exponerar. Dessa variabler finns alltså alltid tillgängliga, om än utan innehåll.

Om vi stavar fel på index i dessa tre vektorer, eller om t.ex. formulär inte skickats, så genereras ett fel i stil med "Notice: Undefined index: {variabelnamn} in ...". Kontrollera att stavning på index är rätt innan ni börjar söka fel i konfiguration av PHP-motorn. :-) Ett annat praktiskt tips är att testa om värde satts för ett visst index i vektorer (med funktion isset()) innan värden läses från vektorerna (se exempel nedan).

Använda vektorn $_GET

I nedanstående formulär skapas en textruta med namnet Fornamn och en knapp för att skicka formuläret (d.v.s. samma som i exempel ovan). Formuläret kommer skickas med HTTP GET eftersom attributet METHOD saknas i FORM-taggen, vilket gör att vi kan hämta värden från kontroller med vektorn $_GET.

<FORM>
  <INPUT TYPE="text" NAME="Fornamn">
  <INPUT TYPE="submit" VALUE="Skicka">
</FORM>

I PHP-koden kan vi hämta data som skickas från formuläret samt skriva ut data enligt följande.

print "Ditt namn är " . $_GET['Fornamn'];

I exemplet ovan kan vi inte använda möjligheten att kunna skriva ut variabler inuti strängar. Istället måste vi slå samman den statiska texten med värdet från vektorn $_GET.

För att kontrollera om ett värde är satt i en variabel eller för ett visst index i en vektor (d.v.s. har skickats från formulär) kan vi använda funktionern isset().

if(isset($_GET['Fornamn']))
  print "Ditt namn är " . $_GET['Fornamn'];

Exempel

Använda vektorn $_POST

I nedanstående formulär skapas en textruta med namnet Fornamn och en knapp för att skicka formuläret. Formuläret kommer skickas med HTTP POST genom att attributet METHOD i FORM-taggen ges värdet "post", vilket gör att vi kan hämta värden från kontroller med vektorn $_POST.

<FORM METHOD="post">
            <INPUT TYPE="text" NAME="Fornamn">
            <INPUT TYPE="submit" VALUE="Skicka">
          </FORM>

I PHP-koden kan vi hämta data som skickas från formuläret samt skriva ut data enligt följande.

print "Ditt namn är " . $_POST['Fornamn'];

I exemplet ovan kan vi inte använda möjligheten att kunna skriva ut variabler inuti strängar. Istället måste vi slå samman den statiska texten med värdet från vektorn $_POST.

För att kontrollera om ett värde är satt i en variabel (d.v.s. har skickats från formulär) kan vi använda funktionern isset().

if(isset($_POST['Fornamn']))
  print "Ditt namn är " . $_POST['Fornamn'];

Exempel

Använda vektorn $_REQUEST

I nedanstående formulär skapas en textruta med namnet Fornamn och en knapp för att skicka formuläret. Formuläret kommer skickas med HTTP GET eftersom attributet METHOD saknas i FORM-taggen, vilket gör att vi kan hämta värden från kontroller även med vektorn $_REQUEST. Vektorn $_REQUEST kan även användas om formulär skickas med HTTP POST.

<FORM>
  <INPUT TYPE="text" NAME="Fornamn">
  <INPUT TYPE="submit" VALUE="Skicka">
</FORM>

I PHP-koden kan vi hämta data som skickas från formuläret samt skriva ut data enligt följande.

print "Ditt namn är " . $_REQUEST['Fornamn'];

I exemplet ovan kan vi inte använda möjligheten att kunna skriva ut variabler inuti strängar. Istället måste vi slå samman den statiska texten med värdet från vektorn $_REQUEST.

För att kontrollera om ett värde är satt i en variabel (d.v.s. har skickats från formulär) kan vi använda funktionern isset().

if(isset($_REQUEST['Fornamn']))
  print "Ditt namn är " . $_REQUEST['Fornamn'];

Exempel

Använda $_REQUEST resp. någon av $_GET eller $_POST

Använd vektorn $_REQUEST om det inte gör någon skillnad om formulär skickas med HTTP GET eller POST. I de flesta fall gör det ingen skillnad hur formulär skickas., d.v.s. är du osäker - använd $_REQUEST.

Två skäl att alltid kräva HTTP POST är om vi inte vill att data skickas synligt som en del av URL eller

Till början på sida | Tillbaka till PHP

Länkar

(Kommer... eller???)