webForumDet fria alternativet

Form-tag och submit: hur ser URL:en ut i bakgrunden?

HTML & CSS

9 svar · 900 visningar · startad av haider

Medlem sedan jan. 2003956 inlägg
Frågan#1

Jag antar att när man utför en submit av ett formulär, så skickas det i bakgrunden en URL till det script som ska ta emot. Scriptet vet väl sen hur den ska hantera det hela.

Kan man på nåt sätt veta URL strängen som formuläret skickar?

Medlem sedan juni 20034 013 inlägg
#2

URL:en är det som står i action på form-taggen, plus formulärinnehållet om man valt method="get" (också det på form-taggen).

Oavsett om man valt post eller get, kan man ju använda javaskript för att komma åt formulärinnehållet. Sätt en id="nånting" på varje formulärelement (input/textarea) och sen kommer du åt den med document.getElementById("nånting").value (exempelvis).

Medlem sedan jan. 2003956 inlägg
#3

tack, det ledde mig mot rätt håll.

Medlem sedan aug. 20039 340 inlägg
#4

Det sker över ett protokoll som heter http. Protokollet finns definierat här: http://www.w3.org/Protocols/rfc2616/rfc2616.html

Det finns två anrop (Som är av värde för diskussionen) GET och POST. GET är den typ av anrop som används vid vanlig sidhämtning samt i formulär med method="GET". GET skickar all data synligt i formulärsfältet. POST skickar formulärdatat i http-headern istället.

Här finns ett exempel på hur datat i ett POST-anrop kan se ut när det skickas:
http://www.jmarshall.com/easy/http/#postmethod

Du kan experimentera själv mha PHP. Skapa en PHP-fil med följande kod:

<pre>Du skickade följande data:

<?php
print_r(apache_request_headers());
?> 

Servern skickade tillbaka följande:

<?php
print_r(apache_response_headers());
?> 

Server-variabler:

<?php
print_r($_SERVER);
?> 
</pre>

<form action="test.php" method="POST">
<input name="ettnamn" value="ettvärde">
<input type="submit" name="submit" value="Skicka">

</form>
Medlem sedan jan. 2003956 inlägg
#5

Det är rätt coolt faktiskt.
Samtidigt undrar man varför man då behöver ha ett formulär, om man ändå kan baka in allt i samma url.
Jag testade att ersätta en <form> med en image map med olika länkar.

Medlem sedan aug. 20039 340 inlägg
#6

haider skrev:

Det är rätt coolt faktiskt.
Samtidigt undrar man varför man då behöver ha ett formulär, om man ändå kan baka in allt i samma url.
Jag testade att ersätta en <form> med en image map med olika länkar.

GET ska du använda, som namnet antyder, för att hämta data, medan du ska använda POST för att skicka data. Skillnaden är inte bara ytlig. Webbläsaren skiljer på de två genom varna om du försöker ladda om en POST-sida, eftersom informationen kan skickas igen, medan webbläsaren gärna cachar GET-anrop.
Vad gäller GET-anrop så behöver du mycket riktigt inget formulär, du kan länka direkt. Det kan du inte med POST.

<a href="http://www.google.se/search?q=http+post">http post</a>

gör samma sak som

<form action="http://www.google.se/search" method="GET">
<input name="q" value="http post" />
<input type="submit" value="Sök" />
</form>

Edit 2: opps, glömde method="GET" i koden.

Medlem sedan jan. 2003956 inlägg
#7

Men är det som det låter? get = hämta värde, medan post = skicka ett värde som scriptet bearbetar?

formuläret krävde POST innan, men jag lyckades ändå använda mig av en href lösning. Kan det vara så att det _egentligen_ är GET men att det funkar med POST ändå? Eller måste det vara absolut rätt för att det ska funka? För i så fall borde det ju inte ha gått med href eller hur?

Medlem sedan aug. 20039 340 inlägg
#8

Hmm? Kanske? Kan hända att skriptet på servern kollar efter båda POST och GET. (T ex genom att använda $_REQUEST i PHP)
Värt att nämnas är också om du har ett formulär som ser ut typ så här:

<form action="sida.php?a=b" method="post"></form>

...så kommer PHP lägga "a=b" i $_GET men alla formulär-element i $_POST.

Medlem sedan jan. 2003956 inlägg
#9

:)

Nu rör det sig om ett perl script.
Ska testa med get o se om det blir nån skillnad.

tillägg: Det funkade även med GET. Kan det vara så pga hur scriptet är gjort?

Medlem sedan aug. 20039 340 inlägg
#10

Det kan vara så Perl funkar också.

276 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
139 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
137 ms — ändringar (db)