form method get eller post?
Om du har gjort ett formulär i html någon gång så har du säkerligen sett raden
<form method=”post” …>
Det var länge i början som jag bara skrev så och accepterade att man helt enkelt skrev så när man hade med formulär att göra. Speciellt method=”post”. Kom på idag under ett samtal med en kompis som liksom jag, gör lite för skojs skull ibland, fast lite mer sällan, att det inte är självklart. Och absolut inte självklart när man ska använda vad och varför.
Kort och gott finns det 2 alternativ när det gäller method i en form, Post och Get. Men vad är skillnaden? Vad händer när man klickar på submit-knappen på dom?
Vi har ett formulär som är väldigt enkelt.
<form method=”post” action=”dennafil.php”>
<p><label>Förnamn: </label><input type=”text” name=”fnamn” /></p>
<p><labe>Efternamn: </label><input type=”text” name=”enamn” /></p>
<p><input type=”submit” value"=”skicka” />
</form>
2 fält, förnamn och efternamn, och en skicka knapp. Jättenkelt.
Vad som sker när man klickar på skicka, lite förenklat, är att man skapar en publik post-buffert som man hanterar som en array. Därför ska vi kolla också hur dessa arrayer ser ut.
Här nedan visar jag hela min dennafil.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test-fil</title>
</head><body>
<form method="get" action="dennafil.php">
<p><label>Förnamn: </label><input type="text" name="fnamn" /></p>
<p><labe>Efternamn: </label><input type="text" name="enamn" /></p>
<p><input type="submit" value"="skicka" />
<p>
$_POST:<br>
<?php print_r ($_POST); ?>
</p>
<p>
$_GET:<br>
<?php print_r ($_GET); ?>
</p>
</form>
</body>
</html>
Som ni ser har jag 2 olika print_r. Print_r står för print array. Så den skriver ut hela arrayen.
Passande här har jag en array som heter $_POST och en som heter $_GET.
Hmmm… Jag kör nu min fil 2 gånger. 1 gång med get i method och en med post så vi kan se vad som skiljer.
Men va fasiken, ser ju likadant ut?
Kör jag Post och echo $_POST[‘fnamn’] så får jag Olle, och om jag kör $_GET[‘fnamn’] tillsammans med method Get får jag Olle…
Det finns faktiskt en markant skillnad. Efter att jag klickat Skicka fråga i get-varianten så händer något i adress-fältet.
Våra fältnamn och inmatningar hamnade där uppe.
Faktum är att $_GET hämtar alltid parametrar från adress-fältet. Oavsett om dom kommer från ett formulär eller inte. Första parametern kommer efter ? och sedan avgränsar man parametrarna med &.
Men nu är det inte parametermatning till php som är frågan. Men vi har lite föklaring vad skillnaderna är. Den ena skapar en osynlig post-buffert som är svår att skapa utan formulär. Den andra gör en “synlig” buffert kan man säga.
Är du helt klar på allt nu? Kan jag sluta skriva?
Struntar jag i, fortsätter ändå.
När ska man då använda vilken?
Vi tar två övertydliga exempel.
Vi börjar med en inloggning, tänk om man kör den med Get, kan man få följande i adress-fältet.
Kanske inte är riktigt bra om vi ska vara ärliga. Där är nog den hederliga gamla POST mycket bättre.
Typ-exempel för GET måste nog ändå vara en sökning.
Man har ett fält där man matar in sök-ord. Sedan klickar man på knappen och länken blir typ
Sedan kanske man har länkar för att kunna sortera resultaten osv på olika saker. Man kanske ska kunna sortera på namn, datum osv. Då kan man helt enkelt lägga på länkar där man stoppar in några extra get-parametrar genom kod. Som här nedan där vi söker på “Hej Hopp”, och lagt till $_GET[orderby] som säger date (kanske är ett databas-fältnamn), och sedan $_GET[sortorder] där vi här nedan har desc för descending. ![]()
Detta skulle göra det väldigt enkelt att bygga en fråga till databasen, samt göra det tydligt vad dom söker på t.ex.
Så, nu är det bara att sätta igång och testa för glatta livet!