2011-05-19 19:13 #0 av: [Fibbe]

HTML och Php kan utgöra en perfekt kombination när det gäller att spara data från användaren. I det här skedet ska vi enbart lära oss att spara data temporärt. Detta gör vi via sessioner (sessions). För att permanent spara data ska vi lära oss MySQL senare.

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.

 

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

 

 

Nästa artikel i serien »