När körs PHP-kod i .php-fil blandad med html?

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
Användarvisningsbild
JimmyAndersson
Inlägg: 26571
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

När körs PHP-kod i .php-fil blandad med html?

Inlägg av JimmyAndersson »

En bättre rubrik hade blivit för lång. :)
Låt säga att jag har en .php-fil som är uppbyggd såhär:

Kod: Markera allt

<table><tr><td>
<form action="<?echo $_SERVER['PHP_SELF']?>" method="POST">
<input name="data" id="data" type="text" >
<input type="submit" name="submit" value="Ok">
</form>
</td></tr></table>

<?
$data = &_POST['data'];
osv
?>
Då körs php-koden först efter jag tryckt på Submit-knappen. Men jag förstår inte varför. :)
Hade jag bytt ut PHP-koden mot html-kod så hade ju de raderna körts.
Så hur fungerar det? :)

Jag är mest van vid html och perl så där är ju "server-koden" separerad från formuläret i html-filen.


Orsaken till att jag undrar är för att jag ska ha flera formulär (med varsin submit-knapp) och olika PHP-kodblock på en och samma .php-fil. Kommer inte riktigt på hur jag ska göra...


edit: Lade till textinmatningsfältet i koden.
Vilken enormt lång tid det tar att skicka detta inlägg......
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Hade jag bytt ut PHP-koden mot html-kod så hade ju de raderna körts.

Inte koden efter "<form action..." väl !? De körs när man klickar på submit.
Men du menar att det skulle ha körst av PHP redan på servern innan
det skickas över till klienten ?

Jag tror att jag förstår vad du vill göra.
PHP ska dynamisk skapa dina formulär på servern innan de skickas
till klienten. Du kanske får skriva PHP kod som skapar hela <form .... </form> ?
Inte bara några delar inne i formuläret. !?

OK, lite ute på hal is här, men ändå... :-)
ragnwald
Inlägg: 165
Blev medlem: 9 mars 2006, 21:16:58
Ort: Stockholm
Kontakt:

Inlägg av ragnwald »

Anledningen är att $_POST['nånting'] har ett värde först efter du submittar formuläret till filen själv, om du förstår vad jag menar.

Formulärinfon lagras i $_POST-variabler och finns inga såna satta så kan ju inte koden utföra så mycket.
Användarvisningsbild
JimmyAndersson
Inlägg: 26571
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Alla inlägg är bra inlägg, trots att det inte riktigt var detta jag undrade över. :)

sodjan:

>> Hade jag bytt ut PHP-koden mot html-kod så hade ju de raderna körts.

> Inte koden efter "<form action..." väl !? De körs när man klickar på submit.
> Men du menar att det skulle ha körst av PHP redan på servern innan
> det skickas över till klienten ?

Det jag menade var ifall php-koden var utbytt mot html-kod, t.ex såhär:

Kod: Markera allt

<table><tr><td> 
<form action="<?echo $_SERVER['PHP_SELF']?>" method="POST"> 
<input name="data" id="data" type="text" > 
<input type="submit" name="submit" value="Ok"> 
</form> 
</td></tr></table> 

<center>lite text</center>
<a href="www.test.se">Länk</a>
Då hade ju "lite text" och länken visats innan jag tryckt på submit-knappen.
Om dessa rader istället är php-kod (som i mitt förra kodexempel) så hade inte php-koden körts förrän jag tryckt submit-knappen. Det jag undrade över var: varför? :)

Nu råkar ju den första raden av php-koden bestå av kod som tar emot det som postades i formuläret, men hur mycket kod hade körts om php-delen hade sett ut såhär:

Kod: Markera allt

Först html-delen med formuläret, sedan:
<?
echo "Tryck på knappen";  <--- Den hade väl körts innan man trycker submit?
$data = &_POST['data'];   <---- och den körs efter man tryckt?
echo "Tack.";               <--- samma med den.
?>
<center>lite text</center>     <------ Den visas innan submit?
<a href="www.test.se">Länk</a>   <------ och den här?
<?
$abc = $123;               <----- Men när körs den?
?>

Många frågor men jag försöker bara förstå från grunden. :)
Jag vill som sagt ha flera formulär med varsin submit-knapp på samma sida (dvs samma .php-fil). Sedan ska några kodblock med php-kod ta hand om det som matas in i varje formulär-block. Såhär:

Kod: Markera allt

Ta bort användare:           .     Editera användare:
 ________________     __     .    _________________      __
|________________|   |OK|    .   |_________________|    |OK|
                      ""     .                           ""
      ^                      .           ^
      |                      .           |
      |                      .           |
  ett php-block              .   ett annat php-block
  tar emot vad som           .   tar emot detta.
  skrivs och tar             .   
  bort den användaren        .
...........................................................

Jag tror att jag förstår vad du vill göra.
PHP ska dynamisk skapa dina formulär på servern innan de skickas
till klienten. Du kanske får skriva PHP kod som skapar hela <form .... </form> ?
Inte bara några delar inne i formuläret. !?


Även om du missförstod min fråga så var det en bra idé och svaret på en fråga jag inte hunnit skriva än. :D
backen
Inlägg: 60
Blev medlem: 22 juli 2005, 19:47:46
Kontakt:

Inlägg av backen »

Alla rader körs ju även första gången men &_POST['data']; är ju ingenting eftersom ingenting har skickats med POST. När filen körs efter att du tryckt på submit skickas ju även POST variablerna med.

Vill du ha flera formulär och köra olika kod beroende på vilket formular som skickats så kan du tex lägga till ett dolt formularfält med info om vilket formular som skickats.

Kod: Markera allt

<input type="hidden" name="formular" value="form1" />
eller

Kod: Markera allt

<input type="hidden" name="formular" value="form2" />
och sedan köra olika kod beroende på innehållet i &_POST['formular'];
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK, då är jag med.
Du kör samma html/php fil både vid första visningen och som
"target" för submit-knappen. Ja, då måste man ju hålla reda på
om den anropas från servern som ett resultat av första-visningen
eller som ett anrop från ett av formulären. Och självklart finns inte
variabler som skapas vid en POST i det första fallet.

Jag tror att *all* PHP kod körs (eller försöker köras), men vad hände
med den kod som försöker använda &_POST[...] ? Det beror väl på hur
felhanteringen i PHP fungerar, och det vet jag inte.
Användarvisningsbild
JimmyAndersson
Inlägg: 26571
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

backen:
Den lösningen kommer göra hela koden väldigt smidig. :)
Mycket bra idé! :tumupp:


"Alla rader körs ju även första gången men &_POST['data']; är ju ingenting eftersom ingenting har skickats med POST. När filen körs efter att du tryckt på submit skickas ju även POST variablerna med."

Aha, då har jag lite mer grepp om hur det fungerar.

edit: oj, såg att Sodjan hann före. Måste läsa.

edit; sodjan:
aha, då förstår jag. :)
Det är så mycket lättare att programmera när man förstår hur det fungerar. :D
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Inlägg av Micke_s »

På lyset har också andra vettiga tips att ge
http://www.onlamp.com/pub/a/php/2004/08 ... dling.html
Användarvisningsbild
JimmyAndersson
Inlägg: 26571
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

På lyset? Bild

Bra sida! Hittade flera bra lösningar där. :)



Off-topic:
"by David Sklar"
Undrar om han är släkt med den lysande basisten Leland Sklar. :)
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Jo, det blir inte enklare av att samma html/php fil kan anropas
på olika sätt. :-)

En metod för att hålla det lite "renare" (ifall det fungerar för övrigt)
är naturligtsvis att separera filerna, d.v.s en html/php fil som
lägger upp den första sidan och andra filer som sedan anropas
av formulären. Det blir lite jobbigare att få tillbaka samma sida, det
brukar bli en "kvittens" sida varifrån man sedan får "gå tillbaka" till
grundsidan igen.

Med en enda html/php så blir det lite snyggare för användaren, men,
som sagt, det blir lite mer att hålla reda på i koden. En annan metod
(som jag tror nämndes) är "hidden" fält i formulären, då får man även
en enkel metod för att se vilken av submit-knapparna som användes.
Man kan även enkelt ha flera submit knappar i samma formulär och
låta det hela gå via lite javascript som (beroende på vilken knapp som
klickades) fyller i lämpliga form-variabler innan form-action anropas...
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Man behöver inte ens något hidden-fält. Det räcker med att kolla om knappens "name"-värde är satt.

if (isset($_POST['submit_button_1']))
{
...
}
else if (isset($_POST['submit_button_2']))
{
...
}
tgr
Inlägg: 726
Blev medlem: 10 maj 2006, 09:17:07
Ort: Mölndal

Inlägg av tgr »

och självklart så kör man alla sina $_POST och $_GET igenom en regexp check eller motsvarande innan man gör något alls med dom. så slipper man andra som kör kod på ens server...
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Hm, jag kan inte förstå hur servern kan tillåta att *data* kan "köras".
Om inte servern har brister i skyddet mellan exekverbar (read only)
och data (read/write) minnessegment...
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

sodjan: Jag tror du missuppfattat något...
Användarvisningsbild
JimmyAndersson
Inlägg: 26571
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

tgr:
Räcker det om man då kollar så att vissa tecken (och ord) inte tillåts?

Helst bör man ju undvika $__POST när det gäller lösenord och sådant, men i det här fallet är det bara jag som kan komma åt sidan och de inblandade datorerna, så det borde inte vara någon fara.

Jag ska fixa en tråd lite senare om just säkerhet på servrar. :)


edit: Såg att sodjan frågade samma sak som jag funderade på, så någon får gärna förklara hur någon annan kan köra egen kod på t.ex min server.
Senast redigerad av JimmyAndersson 6 september 2007, 15:19:21, redigerad totalt 2 gånger.
Skriv svar