# Kom igång med Php (6/7)
Author: [Borttaget]

Post
====

Php har en väldigt användbar funktion som kan ta emot postad data från användaren. Vi kan göra ett formulär i HTML som, när skickats, kan hanteras av Php. Detta görs via en _global_ variabel som heter $\_POST. Att variabeln är global innebär att den kan kommas åt från alla våra php-filer utan att behöva deklareras. Så här fungerar det i enkelhet:

Man skapar input-fält i html och namnger dessa. Man skickar alla dessa input-fält med form-taggen.

När de är skickade kan vi hämta värdet på fälten med $\_POST-variabeln i Php. $\_POST är en array, varje värde som skickats har samma index i $\_POST som namn i HTML.

Exempel:

<?php  
  
if ( isset($\_POST\['test\_field'\]) )  
{  
    echo "Nu har nån skickat data från HTML till Php.<br>";  
    echo "Förnamn: $\_POST\[post\_name\] <br>";  
    echo "Efternamn: $\_POST\[post\_surname\] <hr>";  
}  
  
?>  
  
<form action="" method="post">  
    Förnamn: <input type="text" name="post\_name"><br>  
    Efternamn: <input type="text" name="post\_surname"><br>  
    <input type="hidden" name="test\_field" value="1">  
    <input type="submit" value="Skicka till Php">  
</form>

Om vi testar exemplet ovan får vi först enbart 2 textfält och en knapp. Men skickar vi data en gång så ser vår Php-kod detta och visar texten:

_Nu har nån skickat data från HTML till Php._  
_Förnamn: Mitt förnamn_  
_Efternamn: Mitt efternamn_

I koden ovan har jag valt att använda mig av ett dolt fält för att identifiera vad som skickats, fältet _test\_field_. if-satsen, _if(isset($\_POST\['test\_field'\])),_ kontrollerar om fältet _test\_field_ finns i $\_POST-variabeln. Om det inte finns har inte formuläret skickats och vi kommer inte behöva hantera någon data. Detta kan vara väldigt smidigt i större webbsystem som ska hantera fler olika formulär i samma fil.

Man skulle även kunna använda koden så här:

<?php  
echo "Nu har nån skickat data från HTML till Php. <br>";  
echo "Förnamn: $\_POST\[post\_name\] <br>";  
echo "Efternamn: $\_POST\[post\_surname\] <hr>";  
?>  
  
<form action="" method="post">  
    Förnamn: <input type="text" name="post\_name"><br>  
    Efternamn: <input type="text" name="post\_surname"><br>  
    <input type="hidden" name="test\_field" value="1">  
    <input type="submit" value="Skicka till Php">  
</form>

Men man kommer då att få en _notis_ om att variablerna man försöker visa inte finns om användaren inte skickat någon data. Notisen ser ut så här:

**Notice**: Undefined index: post\_name in **C:\\Program Files (x86)\\EasyPHP-5.3.6.0\\www\\Index.php** on line **3**

För att undvika detta bör man göra enligt det ovanstående exemplet.

GET
---

Det finns även en annan funktion som ger oss möjlighet att kommunicera med användaren. Nämligen GET. Denna funktion fungerar liknande som post, variabel heter $\_GET. Istället för att användaren skickar ett värde från HTML kan vi hämta ett värde från adress-fältet. Vi kan ändra detta värde med hjälp av länkar.

Exempel:

<?php  
  
    //Om "?page" finns i adressen  
    if ( isset($\_GET\['page'\]) )  
    {  
  
        // Om ?page = page2  
        if ( $\_GET\['page'\] == "page2" )  
        {  
             echo 'Du är nu på sida 2<br>  
                   <a href="./">Gå tillbaka</a>';  
        }  
    }  
  
    // Om page inte finns i adressfältet  
    else  
    {  
         echo 'Du är på första sidan<br>  
                <a href="?page=page2">Gå till sida 2</a>';  
    }  
?>  

Som vi ser när vi klickar på länken så blir adressen:

_http://localhost:8888/?page=page2_

Det är det som står efter frågetecknet vi kommer åt med $\_GET. Om vi vill ställa in fler GET-variabler så måste vi skriva ett &-tecken mellan varje:

_http://localhost:8888/?page=page2&menu=menu1_

I ovanstående adressrad kan vi alltså komma åt _$\_GET\['page'\]_ som har värdet _page2_, vi kan även komma åt _$\_GET\['menu'\]_ som har värdet _menu1._ Vi kan nu alltså, enligt kod-exemplet ovan, skapa fler sidor med hjälp av en fil. Vi kan även få sidor att bete sig olika beroende på vilka GET-värden som finns, till exempel ställa in en meny.

Vill vi länka till en anna fil än index.php, men ändå ange GET-variabler länkar vi enligt följande:

_<a href="sida.php?page=page2&menu=menu1">Länk</a>_

Sessioner
---------

Sessioner används för att spara data om en användare för en kort tid. Så länge besökaren är inloggad på webbsidan eller låter webbläsaren vara öppen kan vi spara information i sessioner. Detta är väldigt användbart för att hålla en användare inloggad i vårt webbsystem. Användaren kan aldrig ändra på en session, det enda som kan göras utifrån är att avsluta sessionen, logga ut.

Sessioner används precis som poster, en global array. Sessionernas variabel heter $\_SESSION. Men för att kunna skapa sessioner hos användaren måste vi först starta den funktionen.

Alla sidor som använder sessionsfunktionen måste ha detta funktionsanrop högst upp i koden:

session\_start();

**OBS! Inget får vara utskrivet innan denna funktion anropas. Om det finns html-kod ovanför kommer det att bli error.**

När sessionerna är igång så kan vi enkelt skapa sessioner precis som när vi ändrar värde i en vanlig array:

$\_SESSION\['test\_session'\] = 1;

Nu har vi skapat en session med namn _test\_session_, denna kan vi komma åt från alla våra webbsidor som har session\_start() i toppen av koden. Vi kommer åt denna variabel precis som när vi ska komma åt ett värde i vanlig en array:

echo $\_SESSION\['test\_session'\];

### Räkna uppdateringar

Nu ska vi göra ett enkelt _script_ (php-kod) som räknar hur många gånger vi uppdaterar vår webbsida.

Detta kan till exempel Göras så här:

<?php  
//Måste vara överst i koden  
session\_start();  
  
//Om vår session finns  
if ( isset($\_SESSION\['test\_session'\]) )   
{  
    //Plussa på 1  
    $\_SESSION\['test\_session'\]++;   
}  
  
//Om vår session inte finns  
else  
{  
    //Skapa session med värde 1  
    $\_SESSION\['test\_session'\] = 1;    
}  
  
  
echo "Du har uppdaterat $\_SESSION\[test\_session\] ggr";  
?>

Testa gärna denna kod, den kommer att fortsätta räkna varje uppdatering tills webbläsaren stängs.

För att nollställa alla sessioner från php så ropar man på följande funktion:

session\_destroy();

Då tar vi bort alla sessioner vi skapat. Vi kan få vår räknare att räkna till 5 och sedan börja om från 1 igen genom att göra så här:

<?php  
session\_start(); //Måste vara överst i koden!  
  
//Om vår session finns  
if ( isset($\_SESSION\['test\_session'\]) )   
{  
    //Plussa på 1  
    $\_SESSION\['test\_session'\]++;   
}  
//Om vår session inte finns  
else  
{  
    //Skapa session med värde 1  
    $\_SESSION\['test\_session'\] = 1;    
}  
  
  
echo "Du har uppdaterat $\_SESSION\[test\_session\] ggr";  
  
  
//Om vår session är lika med 5  
if ( $\_SESSION\['test\_session'\] == 5)  
{  
     //Ta bort våra sessioner  
     session\_destroy();  
}  
  
?>

Det finns fler funktioner som rör sessioner, dessa går att läsa om på [php.net](http://php.net).

Cookies
-------

Cookies eller kakor, som det kan översättas till, är små textfiler som vi kan lagra i våra besökares datorer. Med dessa kakor kan vi spara data hos en användare även när den slår av datorn, den finns sparad även när datorn startas igen. Det lite luriga med kakor är att dessa kan användaren modifiera hur som helst. De är därför inte så säkra som sessioner. I kakor kan man dock spara användarens lösenord och användarnamn, om användaren vill det, så att vi kan logga in användaren automatiskt, på vårt webbsystem, varje gång den besöker vår webbsida.

Vi kommer inte att gå in något djupare på cookies i denna artikelserie. Anledningen är att detta inte är speciellt nödvändigt att kunna i detta skede.

Prova själv
-----------

Vi kan nu ta emot data från användaren, vi kan även starta sessioner. Kan vi då göra ett väldigt enkelt inloggningssystem?

Testa att göra ett egen med hjälp av denna pseudokod:

<?php  
  
**Starta sessioner**  
  
**Om postat lösenord finns**  
**Gör detta:**  
  
 **Om postat lösenord är lika med "Lösenord"**  
 **Gör detta:**  
  
 **Starta sessionen inloggad och sätt värdet till sant**  
  
  
  
  
**Om sessionen inloggad finns**  
**Gör detta:**  
 **Om sessionen inloggad är sann**  
 **Gör detta:**  
  
 **Skriv "Du är inloggad!";**  
  
 **Annars gör detta:**  
 **Skriv "Du är inte inloggad";**  
  
?>  
<hr>  
<form action="" method="post">  
    <input type="password" name="password">  
    <input type="submit" value="Logga in!">  
</form>  

[Tips och diskussion i den här tråden](../../discussions/4dd50e5ad4ebea3ebd001023-kom-igang-med-php#4dd2dad588f4721678015b62-1)

[Nästa artikel i serien »](http://webbprogrammering.ifokus.se/articles/4dd627f8d4ebea3edc002ccb-kom-igang-med-php-77-#4dd2dd3cd4ebea6d7d014c80-1)
