Permalänk

Hur fungerar en form i PHP?

Jag behöver lite grundläggande kunskaper. Tacksam om nån kunde bekräfta eller styra-upp. När man googlar får man kunskap om detaljerna. Inte the Big Picture.

När webläsaren tar emot kod som beskriver en form (som innehåller fält och knappar) så blir formen som en namnsatt "struct" som den använder när den kommunicerar med webservern och dess php-tolk?
Så när user klickar på en knapp på sidan i sin webläsare så fattar webläsaren det och skickar formens namn samt datat (all data?) till webservern. Den vaknar upp och exekverar all kod som finns mellan <?php och ?> och om det finns nån "if" där som passar in så kör den den koden. Har jag rätt i mitt antagande? För att det ska skickas nåt så måste det finnas en POST.

Jag upplever GET är en förvirrande benämning. POST är förståeligt.

mera basic-frågor...PHP-koden hämtas inte av webläsaren. Den hämtar bara html-koden om det inte finns en form. I det ögonblick sidan hämtas exekveras phpkoden. Rätt?
PHP-exekveras också när en POST utförs. Då kollar php-motorn nån form av minnesarea för att se om det finns data att förbruka. Finns det fler gånger PHP exekveras?
Kan man säga att php är ett avancerat scriptspråk som skickar data till den passiva webläsaren? PHP använder alltså kod för "output" som webläsaren förstår.

Vad är det som avgör om texten skrivs högst upp i webläsaren eller längst ned? I min värld så måste php skicka nån "clearscreen" till webläsaren för att påbörja en utskrift högst upp. Annars blir det längst ned, i slutet.

Snacka om back to basic...

Permalänk
Medlem

Normalt sett när du bygger formulär med PHP så har du ju ett "script" som körs när formuläret skickas.

Detta script kan ju sedan spotta ut HTML om du vill, men det måste inte göra det.

Om och hur markup renderas bestämmer du ju själv. PHP körs också uppifrån och ned, precis som JS, HTML och CSS

Har du något problem du försöker lösa eller är det bara funderingar?

Skickades från m.sweclockers.com

Permalänk

Jag jobbar för brinnande livet med ett projekt och jag har tidigare byggt upp php-filerna med php:n överst och html:en underst (i filen). Nu har jag googlat och hittat insprängd större php-kod i HTML-koden vilket inte egentligen är nåt konstigt. Har tidigare fixat variabler på så sätt....men det började få mig och fundera lite på hur webläsare resp. Apache/PHP jobbar ihop. Förut har jag varit glatt ovetande utan bara kört på utan att fundera så mycket. Därav lite luddiga frågor.

Du skriver; "formulär skickas". Det är ju när nån knapp trycks i webläsaren.

Permalänk
Medlem

Jag känner att du kopplar ihop webbläsaren med PHP-koden lite för tight. Det fungerar mer så här:
Webbläsare <-> Webbserver <-> PHP.

GET och POST är webbläsarfunktioner för att skicka med extra information vid att webbserveranrop. De kommer att hanteras av webbservern först. Dessa funktioner fungerar likadant oavsett om vi har PHP, ASP.Net etc.

Att PHP-kod exekveras eller ej har inget med formulär att göra. PHP-kod exekveras genom att det finns PHP-taggar i filen som anropas. Sedan kan PHP-koden hantera GET och /eller POST men kan lika gärna ignorera den informationen och exekvera kod för något helt annat.

Webbläsaren kommer automatiskt börja om från början med en "clear screen" så fort du anropar en URL. Det går att bygga upp nytt innehåll på webbsida successivt, dvs göra asynkrona anrop inom webbsidan men det kräver att webbsidan även inkluderar kod lokalt (exempelvis Javascript) som hanterar detta.

Visa signatur

Windows 11 Pro | Intel i7 8700 | ASUS Prime Z370-P | Corsair 16GB 3000MHz | ASUS GTX 1080 | Fractal Design Define S | Corsair RM750x | Hyper 212 EVO

Permalänk
Medlem
Skrivet av Sweedland:

Du skriver; "formulär skickas". Det är ju när nån knapp trycks i webläsaren.

Inte riktigt sant. GET skickas synliga i URL så det krävs ingen knapp.

Exempelvis när jag citerar ditt inlägg här så blir URL:
https://www.sweclockers.com/ forum/ post/ 18263788/ svara?citera=18263788

Där variabeln citera innehåller värdet 18263788.

Det kan PHP hämta upp genom $_GET["citera"] utan att någon knapp är involverad.

Visa signatur

Windows 11 Pro | Intel i7 8700 | ASUS Prime Z370-P | Corsair 16GB 3000MHz | ASUS GTX 1080 | Fractal Design Define S | Corsair RM750x | Hyper 212 EVO

Permalänk

Aha. GET/POST är alltså nåt mellan webläsare, webserver? Sen är PHP:n konsument av det data webservern presenterar. Jag vågar påstå att GET/POST är äldre än PHP:n....

"Att PHP-kod exekveras eller ej har inget med formulär att göra. " Men nåt måste ju kicka igång PHP:n att köra koden.

Ja. Jag ser ju hur prisjakt.nu sparar filterparams i länken. Kan citera hämtas av $_POST också?

Tack för att du kan vara bollplank. Skitviktigt för mig.

Permalänk
Medlem

Inga frågor är för dumma att ställa. Jag var själv helt grön och stod inför samma typ av frågor runt millennieskiftet.

GET/POST är definitivt äldre än PHP. GET är väl egentligen det generella anropet till webbservern i grunden. Alltså en URL i sig är ett GET-anrop. Surfa till www.sweclockers.com och du gör ett GET-anrop.

Sedan kan man alltså lägga till params i URL som inte ska tolkas som en del av sökvägen utan som extra information utöver detta. Dessa kan du specifikt hämta med $_GET i PHP.

Om du istället kodar ett HTML-formulär så kan du välja med method-parametern om formuläret ska postar som POST eller GET. Exempelvis <form method=POST></form>.

Du kan se GET och POST som att du skickar ett brev. Där GET är informationen som skrivs på utsidan av brevet och POST är innehållet i brevet.

Du frågar om man kan hämta GET med $_POST i PHP? Det tror jag inte du kan men om du inte vill specificera GET/POST i din kod så har PHP en annan inbyggd funktion - nämligen $_REQUEST som kan hämta från båda.

Visa signatur

Windows 11 Pro | Intel i7 8700 | ASUS Prime Z370-P | Corsair 16GB 3000MHz | ASUS GTX 1080 | Fractal Design Define S | Corsair RM750x | Hyper 212 EVO

Permalänk
Medlem
Skrivet av Sweedland:

"Att PHP-kod exekveras eller ej har inget med formulär att göra. " Men nåt måste ju kicka igång PHP:n att köra koden.

Det som väcker PHP-tolken är om dokumentet innehåller minst en öppningstagg: <?php

Visa signatur

Windows 11 Pro | Intel i7 8700 | ASUS Prime Z370-P | Corsair 16GB 3000MHz | ASUS GTX 1080 | Fractal Design Define S | Corsair RM750x | Hyper 212 EVO

Permalänk
Skrivet av Sweedland:

Aha. GET/POST är alltså nåt mellan webläsare, webserver? Sen är PHP:n konsument av det data webservern presenterar. Jag vågar påstå att GET/POST är äldre än PHP:n....

Ja, generellt sett kan du se det som att GET används för att hämta en viss resurs/sida, medan POST används för att skapa någonting, vare sig det är ett foruminlägg, en ny användare i ett system eller ladda upp en bild.

Det finns många fler av dessa metoder (PUT, DELETE, HEAD osv) som är en del av HTTP-standarden och har egentligen ingenting med PHP att göra. Du kan läsa mer om dessa här: https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods

Du använder en av dessa metoder varje gång du gör anrop över HTTP (som du gör när du browsar eller skickar API-anrop från din PHP-app).

Skrivet av Sweedland:

"Att PHP-kod exekveras eller ej har inget med formulär att göra. " Men nåt måste ju kicka igång PHP:n att köra koden.

Absolut. Det konfigurerar du i din webbserver. Antingen kan du svara direkt på anrop med en statisk text, HTML eller vad som helst, eller, om du vill ha dynamiska sidor och innehåll, så låter du något annat ta hand om anropet. I ditt fall PHP. PHP populerar vid uppstart ett antal superglobaler med t.ex. request-data, t.ex. $_GET, $_POST, $_SESSION, $_COOKIE osv.

Skrivet av Sweedland:

Ja. Jag ser ju hur prisjakt.nu sparar filterparams i länken. Kan citera hämtas av $_POST också?

Tack för att du kan vara bollplank. Skitviktigt för mig.

Nej, $_POST innehåller bara själva request bodyn. citera är en del av URL:en och kommer finnas i $_GET.

Permalänk
Medlem

POST och GET är en del av HTTP-protokollet. Brukar tänka att POST skickar data till servern, t.ex en inloggning som innehåller känslig data.
GET å andra sidan hämtar data, t.ex. nyhetsinlägg från JSON.

Apache svarar på HTTP-förfrågningar från vanligtvis port 80 eller 443 och tolkar PHP om de/n modulen/erna är installerad/e.

Permalänk
Skrivet av Sweedland:

PHP-koden hämtas inte av webläsaren. Den hämtar bara html-koden om det inte finns en form. I det ögonblick sidan hämtas exekveras phpkoden. Rätt?
PHP-exekveras också när en POST utförs. Då kollar php-motorn nån form av minnesarea för att se om det finns data att förbruka. Finns det fler gånger PHP exekveras?
Kan man säga att php är ett avancerat scriptspråk som skickar data till den passiva webläsaren? PHP använder alltså kod för "output" som webläsaren förstår.

Nej, PHP-kod skickas inte tillbaka till webbläsaren. När du gör ett anrop via webbläsaren, till t.ex. #18263716, så kommer webbservern ta emot anropet och ansvara för att skicka tillbaka ett svar. Webbservern tar, i ditt fall med PHP, hjälp av just PHP för att generera innehåll/svar. Det spelar egentligen ingen roll om det är ett vanligt GET-anrop eller om ett formulär skickar ett POST-anrop.

Du har rätt i din sista mening. PHP är ett bra scriptspråk för att generera dynamiskt innehåll och körs helt och hållet på webbservern. Vanligast är att man skapar HTML-kod som webbläsaren förstår men det finns många fler användningsområden.

Permalänk
99:e percentilen
Skrivet av Sweedland:

Aha. GET/POST är alltså nåt mellan webläsare, webserver? Sen är PHP:n konsument av det data webservern presenterar. Jag vågar påstå att GET/POST är äldre än PHP:n....

Det måste understrykas att GET och POST är så kallade HTTP-metoder. HTTP är ett protokoll som definierar hur kommunikationen mellan till exempel en webbläsare och en webbserver ska se ut: hur meddelandena ska vara formaterade, vad de betyder och hur svaren ska se ut.

Att skicka ett GET-meddelande är i grunden att säga till exempel "Hej, ge mig filen (eller, mer generellt, resursen) /artiklar/hälsningsfraser/halloj.html". Om då webbservern tycker att den filen finns ska den svara med 200 OK och filens innehåll.

Att skicka ett POST-meddelande är att säga "Hej, här kommer en massa data; hantera den". Detta låter generiskt, och det är också till stor del upp till webbservern att välja vad den ska göra med innehållet i POST-meddelandet. Om POST-datan kommer från ett formulär (vilket inte nödvändigtvis är fallet) bör webbservern i praktiken ha sett till att servera ett formulär vars struktur och innehåll den sedan också kan tolka.

GET och POST är inte de enda HTTP-metoderna; det finns även till exempel PUT (skapa en resurs) och DELETE (radera en resurs).

Citat:

"Att PHP-kod exekveras eller ej har inget med formulär att göra. " Men nåt måste ju kicka igång PHP:n att köra koden.

En webbserverstack med PHP behöver vara konfigurerad så att GET- och POST-anrop till sökvägar som man vill ska hanteras av PHP (mjukvaran) också faktiskt gör det. När PHP har gjort sin grej och skapat ett stycke schysst HTML skickar webbservern (till exempel Apache eller Nginx) denna HTML till webbläsaren i en HTTP-respons.

Citat:

Ja. Jag ser ju hur prisjakt.nu sparar filterparams i länken. Kan citera hämtas av $_POST också?

Nej. Eftersom det står ?citera=1234567 i URL:en är citera en GET-parameter, inte en POST-dito. POST-data syns aldrig i URL:en överhuvudtaget.

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
Medlem
Skrivet av zoomy:

POST och GET är en del av HTTP-protokollet. Brukar tänka att POST skickar data till servern, t.ex en inloggning som innehåller känslig data.
GET å andra sidan hämtar data, t.ex. nyhetsinlägg från JSON.

Apache svarar på HTTP-förfrågningar från vanligtvis port 80 eller 443 och tolkar PHP om de/n modulen/erna är installerad/e.

Jag tänkte så i början för att jag ville ha någon form av logik kring namnvalet av GET/POST.

Idag ser jag det inte alls som ovanstående utan jag ser bara GET och POST som olika sätt att skicka data i mitt request.

Exempelvis parametern ?action=logout som jag skickar som GET i en URL har ju inte att göra med att jag vill hämta information.

Båda GET och POST är en envägskommunikation där jag skickar ett meddelade. Vad som händer sedan och om jag får svar tillbaka är upp till webbservern.

Skickades från m.sweclockers.com

Visa signatur

Windows 11 Pro | Intel i7 8700 | ASUS Prime Z370-P | Corsair 16GB 3000MHz | ASUS GTX 1080 | Fractal Design Define S | Corsair RM750x | Hyper 212 EVO

Permalänk
Medlem

"Kan man säga att php är ett avancerat scriptspråk som skickar data till den passiva webläsaren? PHP använder alltså kod för "output" som webläsaren förstår."

Fullt så enkelt är det inte, PHP är lite mer kraftfullt än att bara skapa och skicka HTML-kod till webbläsaren. Du kan t.ex. utföra kommandon på servern via PHP och en webbläsare utan att någonting visas i webbläsarens skärm.
Just för stunden gjorde jag det enkelt för mig och lade in koden (ja det finns bättre sätt :

<?php // Kontrollera om omxplayer är startad via pgrep $playing = shell_exec("pgrep omxplayer"); // Använd svaret if ($playing != "" {shell_exec("gpio write 2 1");} else {shell_exec("gpio write 2 0");}; ?>

Koppla in lite saker på min pi och skapade en liten video som ett exempel på det: https://youtu.be/nciNH1aLjQI

Nå själva PHP-koden hämtas inte av webbläsaren nej, utan den exekverade och formaterade koden PHP skapar och som du väljer ska synas i mottagarens webbläsare. Kod som du inte explicit talar om att den ska visas, t.ex. med

<?php echo $min_variabel; ?>

kommer normalt inte att synas ens om den exekveras i bakgrunden.

När du kommer till formulär, har de i sig självt egentligen lite mindre med PHP att göra än med HTTP-protokollet. PHP (eller annat valt språk) kommer in när det gäller skapa dynamiska formulär baserat på tidigare val eller att validera och hantera den skickade formulärdatan som du hämtar in via $_GET eller $_REQUEST.

Visa signatur

Asus C6H | R9-3900XT | 4x8GB G-Skill Ripjaws V 3600@3466 CL14 | Asus Radeon RX 580 8GB Strix Gaming OC | Asus Strix Raid DLX | Corsair Obsidian 750D AE

Permalänk

Bra med lunchraster för min del. Många svar och jag får fundera på hur jäkla dum jag är. Jag tänker på *submit*. Inte (bara) POST/GET. Ovan sade jag att nåt måste ju dra igång PHP:n på sidan! Den ligger ju stilla eftersen den har levererat det den ska efter första anropet. (Jag ser den som avbrottsstyrd). Vad händer? I webläsaren finns nåt som heter submit (knapp). Det är en form som kan hantera information. Den formen måste väl ändå ha ett tajt samarbete mellan submit/webservern/POP, GET? Min fråga nu är om det möjligtvis kan vara så (hoppas hoppas) att webläsaren gör ett till anrop med URL:en och DET triggar igång PHP:n igen?
I form method="GET" eller "POST" så finns info till webläsaren om den ska skicka data i URL:en eller dolt.

Säg att jag har rätt!!!

Permalänk
Skrivet av Sweedland:

I webläsaren finns nåt som heter submit (knapp). Det är en form som kan hantera information. Den formen måste väl ändå ha ett tajt samarbete mellan submit/webservern/POP, GET? Min fråga nu är om det möjligtvis kan vara så (hoppas hoppas) att webläsaren gör ett till anrop med URL:en och DET triggar igång PHP:n igen?

Tror du överanalyserar det lite. Ett enkelt flöde kan se ut så här:

  1. Du klickar dig in på en sida och din webbläsare skickar ett anrop till webbservern, t.ex GET /contact

  2. Webbservern svarar med att skicka tillbaka kontaktsidan i form av HTML-kod (som PHP i detta fallet kan ha skapat)

  3. Din webbläsare tar emot kontaktsidans HTML och presenterar den för dig

  4. Du fyller i kontaktformuläret och klickar på skicka

  5. Din webbläsare skickar ett nytt anrop till webbservern som innehåller kontaktformuläret, i detta fall kan vi säga POST /contact

  6. Webbservern tar emot anropet och ber PHP ta hand om det

  7. PHP-koden bearbetar datan och skickar ett mail till någon utvald kontaktperson med innehållet från formulärdatan (som finns i $_POST)

  8. Webbservern skickar tillbaka svar till din webbläsare (kan vara HTML-kod som säger att kontaktformuläret har skickats eller en redirect som skickar vidare din webbläsare till en ny URL

Skrivet av Sweedland:

I form method="GET" eller "POST" så finns info till webläsaren om den ska skicka data i URL:en eller dolt.

Så kan man se det. Egentligen handlar det snarare om att specificera vilken metod som ska användas i HTTP-anropet till webbservern. Det är inget som hindrar dig att skicka ett POST-anrop (dvs ett anrop innehållande en request body) till en URL likt /contact?form=emergency.

Permalänk

Jag är helt med dig där. Du bekräftar det jag misstänkte. Rad 5 säger "skickar anrop". Det är väl URL:en med mer data förmodar jag.
Har jag rätt med submit? att den skapar ett till "vanligt" anrop men med mer data?

Permalänk
Skrivet av Sweedland:

Jag är helt med dig där. Du bekräftar det jag misstänkte. Rad 5 säger "skickar anrop". Det är väl URL:en med mer data förmodar jag.
Har jag rätt med submit? att den skapar ett till "vanligt" anrop men med mer data?

När du klickar på ett formulärs submit-knapp så skickas det till URL:en/resursen som fyllts i form-taggens action-attribut. Finns inget sådant attribut på form-taggen så skickas formuläret till samma URL du befinner dig på.

En form-tagg kan se ut ex. så här:

<form action="/contact" method="post"> ... </form>

När du klickar på submit-knappen kommer alltså din webbläsare göra anropet POST /contact. Eftersom method är POST så kommer all data i formuläret finnas i request bodyn som du i PHP på webbservern kommer åt via $_POST.

Om form-taggen istället ser ut på följande sätt så fungerar det lite annorlunda:

<form method="get"> ... </form>

Din webbläsare kommer skicka anropet till den URL du just nu befinner dig på. Kan vara /contact om vi går efter mitt tidigare exempel. method är dock GET, så all data i formuläret kommer finnas i URL:en (eller querystringen). Istället för POST /contact kan anropet se ut så här: GET /contact?firstname=test&lastname=noname.

Jag vet dock inte riktigt vad du menar med "vanligt" anrop

Permalänk
Medlem
Skrivet av Sweedland:

Jag är helt med dig där. Du bekräftar det jag misstänkte. Rad 5 säger "skickar anrop". Det är väl URL:en med mer data förmodar jag.
Har jag rätt med submit? att den skapar ett till "vanligt" anrop men med mer data?

Precis så. Men den URL du står på innan du trycker på submit kan du nu glömma bort för submit kommer skapa ett nytt anrop. Vart anropet ska gå definieras i parametern action inom form-taggen.

Webbservern tar nu emot anropet i form av GET eller POST beroende på vad man valt. Default är POST om inget annat definierats.

Istället för det tidigare formuläret kanske du nu ser ett resultat i form av: "Tack för din önskan om att prenumerera på vårat nyhetsbrev".

Tänk lite som "Anslagstavlan" på SVT. Så fort du anropar en ny URL antingen genom att klicka på en länk eller posta ett formulär så börjar cykeln om.

Skickades från m.sweclockers.com

Visa signatur

Windows 11 Pro | Intel i7 8700 | ASUS Prime Z370-P | Corsair 16GB 3000MHz | ASUS GTX 1080 | Fractal Design Define S | Corsair RM750x | Hyper 212 EVO

Permalänk
Skrivet av protovaffe:

Jag vet dock inte riktigt vad du menar med "vanligt" anrop

Ett anrop för mig är att webläsaren skickar ett anrop till den URL den pekar på. I detta fall så är det samma URL. Jag är ute efter att URL:en är ett funktionsanrop med parametrar. Då kan jag lixom se likheter med annan programmering som jag gör. När man kör submit med GET då syns parametrarna i URL:en till skillnad mot POST.
Om jag tänker rätt (alltså "URL med parametrar") så förstår jag vad som sker med PHP:n. Då dras scripten igång igen men denna gång med aktuella parametrar.

Permalänk
Skrivet av Joppis:

Precis så. Men den URL du står på innan du trycker på submit kan du nu glömma bort för submit kommer skapa ett nytt anrop. Vart anropet ska gå definieras i parametern action inom form-taggen.

Webbservern tar nu emot anropet i form av GET eller POST beroende på vad man valt. Default är POST om inget annat definierats.

Istället för det tidigare formuläret kanske du nu ser ett resultat i form av: "Tack för din önskan om att prenumerera på vårat nyhetsbrev".

Tänk lite som "Anslagstavlan" på SVT. Så fort du anropar en ny URL antingen genom att klicka på en länk eller posta ett formulär så börjar cykeln om.

Skickades från m.sweclockers.com

Jag kan säga att med denna tråd har jag nu har material att bearbeta. Det är ingen raketforskning ser jag. Det är bara ovant att tänka webläsare<>webserver<>php och sen skapa en kod som fungerar. Jag är van C-programmering där saker sker sekventiellt och inte "stannar" kvar som texten i en webläsare. Detta kommer att leda till en aha-upplevelse och det ska bli kul.

Jag HAR faktiskt skrivit typ 10-15 PHP-script med knappar o fält o allt sånt men har inte i brådrasket hunnit sätta mig in i detaljerna. Det har mest varit trial-and-error och sen ge sig i kast med nästa modul. Det är otillfredsställande.

Permalänk

Jag sitter just nu med en listbox med filnamn och sen en del fält som det ska fyllas i data i. Sen en Skicka knapp.
Jag tycker ju att Skicka knappen ska skapa en händelse som aktiverar PHP och som har en if-isset(knapp). Innanför if-satsen har jag den foreach($_POST....) som plockar fram filnamnet och sen kod som läser ut datat från fälten. Sist så plockar den ut datat ur filen samt kletar ihop det med fältens information. Sen skickar....
Så jag ser bara en if(isset...).

Permalänk
Skrivet av Sweedland:

Ett anrop för mig är att webläsaren skickar ett anrop till den URL den pekar på. I detta fall så är det samma URL. Jag är ute efter att URL:en är ett funktionsanrop med parametrar. Då kan jag lixom se likheter med annan programmering som jag gör. När man kör submit med GET då syns parametrarna i URL:en till skillnad mot POST.
Om jag tänker rätt (alltså "URL med parametrar") så förstår jag vad som sker med PHP:n. Då dras scripten igång igen men denna gång med aktuella parametrar.

Tror det ställer till det för mycket om du ser GET-anrop som ett metodanrop med parametrar. Det som händer är att du skickar HTTP-anrop mot en resurs/URL, det kan vara /contact eller /user?id=8734, med ett "verb" som metod (GET, POST, PUT, DELETE etc). Requests till webbservern har alltid en resurs, headers och en body. Bodyn kan vara tom, vilket dom oftast är i GET-anrop.

Kanske överkurs, men kanske hjälper dig lite att visa hur ett "komplett" HTTP-anrop kan se ut.

Första exemplet är ett anrop mot GET /contact (vilket helt enkelt kan ske när du klickar på en Kontakt-länk på en webbsida):

GET /contact HTTP/1.1 Host: example.com  

Översta raden är metoden, GET, och resursen, /contact. Andra raden är en request header, Host, som helt enkelt talar om vart anropet ska. Vid sidan av Host finns det mängder med request headers man kan skicka med. Request bodyn i detta anrop är tomt, så att det är den avslutande tomma raden är med mening. Hur ser då ett anrop med body ut? Så här

Andra exemplet är ett POST-anrop mot /contact (som kan hända när vi klickar på submit-knappen i kontaktformuläret):

POST /contact HTTP/1.1 Host: example.com firstname=test&lastname=nobody

Här är det ett POST-anrop som du kan se och formulärdatan, alltså fälten där du fyller i för- och efternamn, ligger längst ner i request bodyn.

Om du skickat samma formulär fast med GET (alltså method="get" i form-taggen) så hade anropet sett ut så här:

GET /contact?firstname=test&lastname=nobody HTTP/1.1 Host: example.com  

Som du ser ovan så innehåller alla HTTP-anop mot webbservrar alltid en resurs/URL, en metod, headers och request body (som kan vara tom). Därför kan du inte se det som ett metodanrop med parametrar som bara kommer från en querystring.

Permalänk
Skrivet av Sweedland:

Jag sitter just nu med en listbox med filnamn och sen en del fält som det ska fyllas i data i. Sen en Skicka knapp.
Jag tycker ju att Skicka knappen ska skapa en händelse som aktiverar PHP och som har en if-isset(knapp). Innanför if-satsen har jag den foreach($_POST....) som plockar fram filnamnet och sen kod som läser ut datat från fälten. Sist så plockar den ut datat ur filen samt kletar ihop det med fältens information. Sen skickar....
Så jag ser bara en if(isset...).

Glöm inte att PHP är ett scriptspråk som körs serverside till skillnad från JavaScript som körs i webbläsaren. Så fort du klickar på Skicka kommer webbläsaren skicka ett anrop till webbservern och därefter tar PHP vid.

Permalänk
Skrivet av protovaffe:

Glöm inte att PHP är ett scriptspråk som körs serverside till skillnad från JavaScript som körs i webbläsaren. Så fort du klickar på Skicka kommer webbläsaren skicka ett anrop till webbservern och därefter tar PHP vid.

Precis. Jag undviker JavaScript för tillfället.

Jag tror jag menar att "resurs/URL, en metod, headers och request body" är som parametrar. Det är väl för att få grepp på det hela.
GET kan jag lägga därhän så länge.
HTTP-anrop(requests) är det som aktiverar scripten. Det är nyckeln för mig.

Permalänk
Skrivet av protovaffe:

Tror det ställer till det för mycket om du ser GET-anrop som ett metodanrop med parametrar. Det som händer är att du skickar HTTP-anrop mot en resurs/URL, det kan vara /contact eller /user?id=8734, med ett "verb" som metod (GET, POST, PUT, DELETE etc). Requests till webbservern har alltid en resurs, headers och en body. Bodyn kan vara tom, vilket dom oftast är i GET-anrop.

Kanske överkurs, men kanske hjälper dig lite att visa hur ett "komplett" HTTP-anrop kan se ut.

Första exemplet är ett anrop mot GET /contact (vilket helt enkelt kan ske när du klickar på en Kontakt-länk på en webbsida):

GET /contact HTTP/1.1 Host: example.com  

Översta raden är metoden, GET, och resursen, /contact. Andra raden är en request header, Host, som helt enkelt talar om vart anropet ska. Vid sidan av Host finns det mängder med request headers man kan skicka med. Request bodyn i detta anrop är tomt, så att det är den avslutande tomma raden är med mening. Hur ser då ett anrop med body ut? Så här

Andra exemplet är ett POST-anrop mot /contact (som kan hända när vi klickar på submit-knappen i kontaktformuläret):

POST /contact HTTP/1.1 Host: example.com firstname=test&lastname=nobody

Här är det ett POST-anrop som du kan se och formulärdatan, alltså fälten där du fyller i för- och efternamn, ligger längst ner i request bodyn.

Om du skickat samma formulär fast med GET (alltså method="get" i form-taggen) så hade anropet sett ut så här:

GET /contact?firstname=test&lastname=nobody HTTP/1.1 Host: example.com  

Som du ser ovan så innehåller alla HTTP-anop mot webbservrar alltid en resurs/URL, en metod, headers och request body (som kan vara tom). Därför kan du inte se det som ett metodanrop med parametrar som bara kommer från en querystring.

Är texten "POST /contact HTTP/1.1 Host: example.com firstname=test&lastname=nobody" det som verkligen skickas till webservern?

Permalänk
Skrivet av Sweedland:

Är texten "POST /contact HTTP/1.1 Host: example.com firstname=test&lastname=nobody" det som verkligen skickas till webservern?

Yes, det är så det ser ut. Som sagt så kommer det säkerligen vara fler HTTP headers i normala anrop. Request bodyn, eller datan, kan vara formaterad på olika sätt också, som t.ex. JSON. Men så där ser det ut när du skickar vanliga POST-anrop.

PHP i sin tur använder resursen, alltså /contact?firstname=test&lastname=nobody, för att populera $_GET och parsar request bodyn för att populera $_POST. Via metoden getallheaders kan du vanligtvis hämta ut alla HTTP headers som finns i anropet.

Hoppas det hjälper dig att förstå hur HTTP-anropen skickas och skillnaden på främst GET- och POST-anrop, trots att jag inte är nån klippa på att förklara.

Permalänk
Skrivet av protovaffe:

Yes, det är så det ser ut. Som sagt så kommer det säkerligen vara fler HTTP headers i normala anrop. Request bodyn, eller datan, kan vara formaterad på olika sätt också, som t.ex. JSON. Men så där ser det ut när du skickar vanliga POST-anrop.

PHP i sin tur använder resursen, alltså /contact?firstname=test&lastname=nobody, för att populera $_GET och parsar request bodyn för att populera $_POST. Via metoden getallheaders kan du vanligtvis hämta ut alla HTTP headers som finns i anropet.

Hoppas det hjälper dig att förstå hur HTTP-anropen skickas och skillnaden på främst GET- och POST-anrop, trots att jag inte är nån klippa på att förklara.

Då förstår jag varför och när PHP exekveras. Viktigt. Jag tycker jag har fått grunderna nu.

Tack så hemskt mycket. Jag ska ta mig tiden och prova den där getallheaders. Får nog en hel del matnyttigt där. Mycket handlar om att bekräfta det jag tror. Att skriva ut allt är ju en bra debuggingmöjlighet också...

Permalänk
Medlem

Är man nyfiken på vad som skickas och tas emot på webläsarsidan kan man göra detta med developer console (F12 i de flesta webläsare).
Kan se ut som nedan (bara en viss del av anropen syns då det är så många och man behöver scrolla för att se alla)
Det är Sweclockers Forum som laddades.

Permalänk
Skrivet av iXam:

Är man nyfiken på vad som skickas och tas emot på webläsarsidan kan man göra detta med developer console (F12 i de flesta webläsare).
Kan se ut som nedan (bara en viss del av anropen syns då det är så många och man behöver scrolla för att se alla)
Det är Sweclockers Forum som laddades.
https://i.imgur.com/AbC9h0X.png

Det där var ett bra tips. Mycket att grotta i. Jag använder mestadels Opera. Den hade också så man kunde byta device alltså hur ser sidan ut på en biltelefon typ Galaxy S5 eller iPhone. DET är MYCKET nödvändigt för mig att använda mig av!