[php] form werkt niet meer na include

Pagina: 1
Acties:
  • 334 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Sv3n
  • Registratie: Mei 2002
  • Laatst online: 21:16
Situatie:
1 pagina met algemene lay out waarin subpagina's worden geinclude

Wat wil ik:
login script ook includen in de algemene lay out

Wat werkt er al:
Het form object wordt weergegeven

Wat werkt er niet:
Nadat er op de submit knop is gedrukt wordt niet de pagina gereload met daarin de post maar wordt er teruggegaan naar een andere subpagina

Relevante code:

het switch stuk in index.php dat zorgt voor de goede subpagina, na op de submit knop te hebben gedrukt gaat ie terug naar default
PHP:
1
2
3
4
5
6
7
8
9
10
11
switch(strtolower($_GET['pagina'])) 
{ 

  case "home":          $pagina="./html/nieuws.php";break;
  case "login":           $pagina="./html/login2.php";break;

 default:    $pagina="./html/nieuws.php";break; 
} 


include($pagina);


Form uit login script:
PHP:
1
2
3
4
5
  echo "<FORM METHOD=\"post\" ACTION=\"$_SERVER[PHP_SELF]\">\n";   
  echo "Gebruikersnaam:<BR><INPUT TYPE=\"text\" NAME=\"gebruikersnaam\" SIZE=\"20\"><BR>\n";   
  echo "Wachtwoord:<BR><INPUT TYPE=\"password\" NAME=\"wachtwoord\" SIZE=\"20\"><BR><BR>\n";   
  echo "<INPUT TYPE=\"submit\" NAME=\"login\" VALUE=\"login\">\n"; 
  echo "</FORM>\n";


Code die de post zou moeten pakken:
PHP:
1
  if ($_POST['login']) {


Het login script werkt prima als deze niet geinclude is.

Wat heb ik al gedaan:
Ik ben op zoek gegaan naar welk stuk code de fout veroorzaakt maar ik heb echt geen idee :| ik snap eigenlijk niet waarom ie terug gaat naar default en dat is nou net het hele probleem :P

Last.fm
Films!


Acties:
  • 0 Henk 'm!

  • Feyd-Rautha
  • Registratie: November 2001
  • Laatst online: 02-08 23:34
Volgens mij zit het zo:

Een include plakt letterlijk een stuk code in de pagina. Dus wat gebeurt er: in uw php-file met die switch, komt onderaan die switch uw form-object.
Wanneer je een POST doet door op submit te drukken, zal de pagina met de switch opnieuw geladen worden. Logisch ook aangezien dit nu uw pagina is die getoond wordt. De switch wordt opnieuw uitgevoerd:
* de form-variable "pagina" zal nu leeg blijken te zijn - NULL omdat deze niet opnieuw gepost zal worden nadat je op SUBMIT geklikt hebt
* aangezien de variable 'pagina' gelijk is aan NULL, wordt de default opgeroepen die gelijk is aan 'nieuws.php' ...

Dus de oplossing is om uw variable 'pagina' opnieuw mee te geven tijdens de POST, oftewel een of andere flag gebruiken die aangeeft of je gesubmitted hebt...

Een tip: gebruik eens enkele echo's op kritieke plaatsen in uw code om te zien welke waarden de variablen hebben, welke delen van de code worden uitgevoerd en welke niet, ...

[ Voor 27% gewijzigd door Feyd-Rautha op 21-04-2004 17:47 ]

I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. Where the fear has gone there will be nothing. Only I will remain.


Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Je gebruikt een GET-waarde. Die GET-waarde wordt echter niet meeverstuurt met je form, aangezien je PHP_SELF gebruikt, waar die GET-waarde niet in voorkomt... Bij $_SERVER["REQUEST_URI"] staan ze er echter wel bij, probeer die eens :)

Acties:
  • 0 Henk 'm!

  • Sv3n
  • Registratie: Mei 2002
  • Laatst online: 21:16
bedankt Feyd-Rautha het werkt ! :)

ik heb t op een beetje ranzige manier gedaan maar dat moet kunnen :P

ik heb een hidden field in m'n form gestopt:

PHP:
1
echo "<INPUT NAME = \"pagina\" TYPE = \"hidden\" VALUE=\"./html/login2.php\" > " ;


en in m'n index.php dit gezet:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
if ($_POST['login']) { 
    $pagina = $_POST['pagina'] ;
    } else {
switch(strtolower($_GET['pagina'])) 

{ 

  case "home":          $pagina="./html/nieuws.php";break;
  default:    $pagina="./html/nieuws.php";break; 
} }


include($pagina);


niet de beste oplossing maar het werkt wel _/-\o_

Last.fm
Films!


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

sv3n schreef op 21 april 2004 @ 18:32:
bedankt Feyd-Rautha het werkt ! :)

ik heb t op een beetje ranzige manier gedaan maar dat moet kunnen :P

ik heb een hidden field in m'n form gestopt:

PHP:
1
echo "<INPUT NAME = \"pagina\" TYPE = \"hidden\" VALUE=\"./html/login2.php\" > " ;


en in m'n index.php dit gezet:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
if ($_POST['login']) { 
    $pagina = $_POST['pagina'] ;
    } else {
switch(strtolower($_GET['pagina'])) 

{ 

  case "home":          $pagina="./html/nieuws.php";break;
  default:    $pagina="./html/nieuws.php";break; 
} }


include($pagina);


niet de beste oplossing maar het werkt wel _/-\o_
Je vertrouwt wel erg blind op wat de gebruiker je stuurt in dat hidden field he? Wat nou als iemand je form nabouwt en een andere waarde invult voor die file? Niet wenselijk. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Yo-han
  • Registratie: December 2001
  • Laatst online: 18-08 20:16

Yo-han

nope.

NMe84 schreef op 21 april 2004 @ 21:48:
[...]

Je vertrouwt wel erg blind op wat de gebruiker je stuurt in dat hidden field he? Wat nou als iemand je form nabouwt en een andere waarde invult voor die file? Niet wenselijk. ;)
Ik zou idd even een validatie doen op de input die je krijgt uit het "hidden field". Want je kan je hopelijk wel voorstellen als ik de waarde zou aanpassen naar: http://mijnsite.nl/zegmaardagtegenjecode.php :/

[ Voor 3% gewijzigd door Yo-han op 21-04-2004 23:47 . Reden: nederlands blijft moeilijk! ]


Acties:
  • 0 Henk 'm!

  • Sv3n
  • Registratie: Mei 2002
  • Laatst online: 21:16
Hmmm jullie hebben helemaal gelijk, heb er nu een beveiliging ingebouwd:

PHP:
1
2
3
if ($_POST['login']) { 
     if ($_POST['pagina'] = "login") {
        $pagina = "./html/login2.php" ; }

Last.fm
Films!


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
sv3n schreef op 22 april 2004 @ 14:09:
Hmmm jullie hebben helemaal gelijk, heb er nu een beveiliging ingebouwd:

PHP:
1
2
3
if ($_POST['login']) { 
     if ($_POST['pagina'] = "login") {
        $pagina = "./html/login2.php" ; }
goeie beveiliging, een assignment in je if statement.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Sv3n
  • Registratie: Mei 2002
  • Laatst online: 21:16
PHP:
1
if ($_POST['pagina'] = "login") {

moet natuurlijk dit zijn:
PHP:
1
if ($_POST['pagina'] == "login") {

:)

Last.fm
Films!

Pagina: 1