Variabler från externa källor

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök

Variabler från externa källor

HTML-formulär (GET och POST)


När ett formulär skickas till ett PHP-skript görs informationen från formuläret automatiskt tillgänglig för skriptet. Det finns några sätt att komma åt denna information, till exempel:

Exempel #1 Ett enkelt HTML-formulär

<form action="foo.php" method="post">
Namn: <input type="text" name="username" />

E-post: <input type="text" name="email" />

<input type="submit" name="submit" value="Skicka mig!" />
</form>


Det finns bara två sätt att komma åt data från dina HTML-formulär. För närvarande tillgängliga metoder listas nedan:

Exempel #2 Att komma åt data från ett enkelt POST HTML-formulär


<?php
echo $_POST['username'];
echo $_REQUEST['username'];
?>


Att använda ett GET-formulär är liknande, men då använder du istället den fördefinierade GET-variabeln. GET gäller också för QUERY_STRING (informationen efter '?' i en URL). Så till exempel http://www.example.com/test.php?id=3 innehåller GET-data som är tillgänglig med $_GET['id']. Se även $_REQUEST.

Notera:

Punkter och mellanslag i variabelnamn konverteras till understreck. Till exempel <input name="a.b" /> blir $_REQUEST["a_b"].

PHP förstår också arrayer i sammanhanget med formulärvariabler (se relaterad FAQ). Du kan till exempel gruppera relaterade variabler tillsammans eller använda denna funktion för att hämta värden från en flervalsingång. Till exempel, låt oss posta ett formulär till sig själv och vid inlämning visa datan:

Exempel #3 Mer komplexa formulärvariabler


<?php
if ($_POST) {


echo '

';
<br>    echo htmlspecialchars(print_r($_POST, true));
<br>    echo '

';


}
?>
<form action="" method="post">
Namn: <input type="text" name="personal[name]" />

E-post: <input type="text" name="personal[email]" />

Öl:

<select multiple name="beer[]">
<option value="warthog">Warthog</option>
<option value="guinness">Guinness</option>
<option value="stuttgarter">Stuttgarter Schwabenbräu</option>
</select>

<input type="submit" value="skicka mig!" />
</form>


Notera: Om ett externt variabelnamn börjar med en giltig array-syntax, ignoreras efterföljande tecken tyst. Till exempel, <input name="foo[bar]baz"> blir $_REQUEST['foo']['bar'].

Variabelnamn från bildformuläret


När du skickar ett formulär är det möjligt att använda en bild istället för den vanliga skicka-knappen med en tagg som:

<source lang="html">
<input type="image" src="image.gif" name="sub" />


När användaren klickar någonstans på bilden, kommer det medföljande formuläret att skickas till servern med två ytterligare variabler, sub_x och sub_y. Dessa innehåller koordinaterna för användarens klick inom bilden. Den erfarne kanske noterar att de faktiska variabelnamnen som skickas av webbläsaren innehåller en punkt snarare än ett understreck, men PHP konverterar punkten till ett understreck automatiskt.

HTTP-cookies


PHP stöder transparent HTTP-cookies som definieras av » RFC 6265. Cookies är en mekanism för att lagra data i den fjärranslutna webbläsaren och därmed spåra eller identifiera återkommande användare. Du kan ställa in cookies med funktionen setcookie(). Cookies är en del av HTTP-huvudet, så SetCookie-funktionen måste anropas innan någon utdata skickas till webbläsaren. Detta är samma begränsning som för header()-funktionen. Cookie-data är sedan tillgänglig i lämpliga cookie-dataarrayer, såsom $_COOKIE samt i $_REQUEST. Se setcookie()-manualsidan för mer detaljer och exempel.

Observera: Från och med PHP 7.2.34, 7.3.23 och 7.4.11, respektive, url-dekodas inte längre namnen på inkommande cookies av säkerhetsskäl.

Om du vill tilldela flera värden till en enda cookie-variabel kan du tilldela den som en array. Till exempel:


<?php
setcookie("MyCookie[foo]", 'Testning 1', time()+3600);
setcookie("MyCookie[bar]", 'Testning 2', time()+3600);
?>


Detta kommer att skapa två separata cookies även om MyCookie nu kommer att vara en enda array i ditt skript. Om du vill ställa in bara en cookie med flera värden, överväg att använda serialize() eller explode() på värdet först.

Notera att en cookie kommer att ersätta en tidigare cookie med samma namn i din webbläsare om inte sökvägen eller domänen är annorlunda. Så för en shoppingvagnsapp kanske du vill behålla en räknare och skicka detta vidare. dvs.

Exempel #4 Ett setcookie()-exempel


<?php
if (isset($_COOKIE['count'])) {
$count = $_COOKIE['count'] + 1;
} else {
$count = 1;
}
setcookie('count', $count, time()+3600);
setcookie("Cart[$count]", $item, time()+3600);
?>

Punkter i inkommande variabelnamn


Vanligtvis ändrar inte PHP namnen på variabler när de skickas in i ett skript. Det bör dock noteras att punkten (period, punkt) inte är ett giltigt tecken i ett PHP-variabelnamn. Av den anledningen ser tolken detta:


<?php
$varname.ext; /* ogiltigt variabelnamn */
?>


Nu ser tolken en variabel med namnet $varname, följt av operatorn för strängsammanfogning, följt av barsträngen (dvs. ociterad sträng som inte matchar någon känd nyckel eller reserverade ord) 'ext'. Uppenbarligen ger detta inte det avsedda resultatet.
Av denna anledning är det viktigt att notera att PHP automatiskt kommer att ersätta eventuella punkter i inkommande variabelnamn med understreck.

Bestämning av variabeltyper

Eftersom PHP bestämmer variablernas typer och konverterar dem (generellt) efter behov, är det inte alltid uppenbart vilken typ en given variabel är vid en given tidpunkt. PHP innehåller flera funktioner som kan ta reda på vilken typ en variabel är, såsom: gettype(), is_array(), is_float(), is_int(), is_object() och is_string(). Se också

PHP Språkreferens