[PHP] $_POST meegeven in include();

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Goedemiddag,

Ik ben bezig met een index.php waarin ik, aan de hand van een pagina id de pagina informatie ophaal uit de database en deze dan door middel van een include in de index.php wil includen, maar nu stuit ik op een probleempje.

Dit is mijn situatie:

1. Door middel van de mod_write worden mijn url's (bijv. http://www.example.com/4) omgezet naar index.php?id=4
2. Via een SQL query zoek ik de bestandsnaam die geinclude moet worden in de index van het betreffende id (dus daar komt bijvoorbeeld /informatie.php uit)
3. De /informatie.php include ik vervolgens op de volgende wijze:
PHP:
1
include("http://".$_SERVER['SERVER_NAME']."/informatie.php);


Dit werkt allemaal goed, maar nu stuit ik op een probleem.
Wanneer ik namelijk in informatie.php een formulier heb staan waar een post wordt gebruikt, en overigens ook met een get. Dan post deze pagina dit weer naar http://www.example.com/4. Waardoor hij vervolgens weer heel het traject opnieuw begint, hij weer informatie.php gaat includen etc. Maar hier verlies ik dus mijn $_POST.

Is er een manier om met een include ook $_POST en $_GET mee te geven?
Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • posttoast
  • Registratie: April 2000
  • Laatst online: 23:34
Misschien snap ik je probleem niet helemaal, maar bij een include verlies je je $_POST en $_GET niet hoor.

omniscale.nl


Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Probeer je nou PHP-code of PHP-output te includen in je stukje code?

Want PHP-code includen gaat natuurlijk niet werken, tenzij de PHP-code uit informatie.php zelf somehow plain-tekst PHP-code uitpoept naar de webserver.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Waarom zou je $_POST of $_GET 'foetsie' zijn? Heb je dat getest/geprobeerd?

edit:
Spuit 11 :X

[ Voor 14% gewijzigd door RobIII op 28-07-2008 13:26 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Tarabass
  • Registratie: Februari 2008
  • Laatst online: 09-04 17:02

Tarabass

Webmaster

Je kan dan toch gewoon in je include het volgende zetten?

PHP:
1
2
3
if isset($_POST['variable']) {
    $variable = $_POST['variable'];
}

Acties:
  • 0 Henk 'm!

  • Nielsvr
  • Registratie: Maart 2004
  • Laatst online: 27-08 14:55
Volgens mij probeer je de POST informatie over meerdere stappen te behouden? Dan zou je een kijkje moeten gaan nemen naar het opslaan in sessies.

Acties:
  • 0 Henk 'm!

  • posttoast
  • Registratie: April 2000
  • Laatst online: 23:34
Waarschijnlijk zit het hem er trouwens in dat je include via "http:// enz." en niet gewoon het lokale bestand.

omniscale.nl


Acties:
  • 0 Henk 'm!

  • soap
  • Registratie: December 2000
  • Laatst online: 17:27

soap

diskoers.

Of je POST action moet naar informatie.php gaan;
code:
1
<form method="POST" action="informatie.php">


en dan in informatie.php
PHP:
1
2
3
4
5
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  // doe je post ding
  // ga terug naar pagina met een extra querystring-var die 
  // aangeeft dat het gepost is zodat je nette message kan laten zien
}


Of idd gewoon 'lokaal' includen ipv remote (wat hierboven wordt gezegd).

[ Voor 10% gewijzigd door soap op 28-07-2008 13:31 ]

.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik probeer hetvolgende:

index.php
PHP:
1
2
print_r($_POST);
include("http://www.example.com/informatie.php");


informatie.php
PHP:
1
2
3
4
5
6
7
print_r($_POST);

echo "<form name=\"test\" action=\"4\" method=\"post\">\n"; // die 4 staat dus in de database voor informatie.php
echo " <label for=\"test\">Test</label>\n";
echo " <input type=\"text\" name=\"test\" id=\"test\" />\n";
echo " <button type=\"submit\">inloggen</button>\n";
echo "</form>\n";


Wanneer ik nu het formuliertje verstuur, wat al eerder geinclude is. Krijg ik netjes in de index.php mijn print_r($_POST); aan de praat, hij spuugt alles uit. Maar m'n print_r($_POST); in de informatie.php geeft niets.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Kloppen je rewrite rules dan wel? Volgens mij voert je server een redirect uit zodat je post vars niet meer bestaan en het een GET request is geworden (dit kun je checken met echo $_SERVER[''REQUEST_METHOD]). Zoals gezegd zouden $_POST vars gewoon beschikbaar moeten blijven bij een include.

edit:

ik zie het al, je include doe je via je url, dat werkt natuurlijk niet. Je include wordt als GET ingeladen. je moet dus includen volgens je filesystem. Dus loos de www. etc :)

[ Voor 24% gewijzigd door Cartman! op 28-07-2008 13:36 ]


Acties:
  • 0 Henk 'm!

  • Nielsvr
  • Registratie: Maart 2004
  • Laatst online: 27-08 14:55
Je include ook via HTTP, dat is natuurlijk uit den boze... gewoon je filestructuur gebruiken (dus wss gewoon include("informatie.php");

[ Voor 39% gewijzigd door Nielsvr op 28-07-2008 13:34 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ah kijk :-) Daar zat inderdaad het probleem in! Thanks guys!..
Ik heb overigens die include dit weekend nog verbouwd naar http://etc. omdat ik dan ook dingen als informatie.php?aktie=bekijken zou kunnen includen..
Zouden get-variabelen dan ook meegestuurd moeten kunnen worden op deze manier?

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
tuurlijk...

Acties:
  • 0 Henk 'm!

  • Observer
  • Registratie: April 2001
  • Laatst online: 16:24
Wat anderen ook al hebben gezegd: je include informatie.php met "http://". Dat doet een nieuwe request naar je server en dus een nieuwe GET (of POST maar ik gok een GET) en daar zit de POST data die je van je client krijgt niet in.

Als je nou informatie.php lokaal zou includen dan werkt 't wel:

PHP:
1
include(dirname(__FILE__) . '/informatie.php'); //of iets dergelijks


Edit: te laat...

There are 10 kinds of people in the world: those that understand binary and those that don't


Acties:
  • 0 Henk 'm!

  • disjfa
  • Registratie: April 2001
  • Laatst online: 03-07 14:47

disjfa

be

Zoals al 10 keer gezegd zijn get en post waarden echt niet ineens kwijt na een serversided include. gewoon geen "http://..." includen.

disjfa - disj·fa (meneer)
disjfa.nl


Acties:
  • 0 Henk 'm!

  • posttoast
  • Registratie: April 2000
  • Laatst online: 23:34
Verwijderd schreef op maandag 28 juli 2008 @ 13:38:
ah kijk :-) Daar zat inderdaad het probleem in! Thanks guys!..
Ik heb overigens die include dit weekend nog verbouwd naar http://etc. omdat ik dan ook dingen als informatie.php?aktie=bekijken zou kunnen includen..
Zouden get-variabelen dan ook meegestuurd moeten kunnen worden op deze manier?
Waarom zou je op die manier variabelen mee willen sturen? Dat lijkt me niet zo'n mooie manier.

omniscale.nl


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
posttoast schreef op maandag 28 juli 2008 @ 13:40:
[...]

Waarom zou je op die manier variabelen mee willen sturen? Dat lijkt me niet zo'n mooie manier.
Omdat ik dan bijvoorbeeld aan ID 2 in de database kan zeggen dat ie informatie?aktie=bekijken kan laten includen :) misschien beetje simpele gedachte, maar mij leek ie wel stoer :o

Acties:
  • 0 Henk 'm!

  • disjfa
  • Registratie: April 2001
  • Laatst online: 03-07 14:47

disjfa

be

Verwijderd schreef op maandag 28 juli 2008 @ 13:47:
[...]
maar mij leek ie wel stoer :o
...

Je kan natuurlijk alles wat je wilt.

PHP:
1
2
$actie = "hatsekidee";
include("bestand.php");


En in je bestand.php kan je dan alles wa je wilt met $actie. Of je doet gewoon willekeurig wat met wat jij nou wilt.

disjfa - disj·fa (meneer)
disjfa.nl


Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 19:24

Patriot

Fulltime #whatpulsert

posttoast schreef op maandag 28 juli 2008 @ 13:40:
[...]

Waarom zou je op die manier variabelen mee willen sturen? Dat lijkt me niet zo'n mooie manier.
Volgens mijn was zijn algehele gedachtegang beinvloed door het feit dat hij dacht dat variabelen niet doorgegeven werden aan bestanden die geïnclude worden.

Acties:
  • 0 Henk 'm!

Verwijderd

Offtopic:

Include (en meestal wil je liever require gebruiken) is geen functie maar een language construct, de haakjes zijn dan ook overbodig.

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Modbreak:Ik heb een en ander afgesplitst naar PHP en scopes: wat is good practice?. :)

'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!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:27

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op maandag 28 juli 2008 @ 14:31:
Offtopic:

Include (en meestal wil je liever require gebruiken) is geen functie maar een language construct, de haakjes zijn dan ook overbodig.
Je redenatie klopt niet. Je hebt verder wel gelijk dat je bij include geen haakjes nodig hebt, maar niet omdat het een language construct is. Bij isset() heb je namelijk wel haakjes nodig, ookal is het een language construct :)

[ Voor 5% gewijzigd door .oisyn op 29-07-2008 11:14 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
.oisyn schreef op dinsdag 29 juli 2008 @ 11:13:
[...]


Je redenatie klopt niet. Je hebt verder wel gelijk dat je bij include geen haakjes nodig hebt, maar niet omdat het een language construct is. Bij isset() heb je namelijk wel haakjes nodig, ookal is het een language construct :)
De PHP-manual redeneert wel een béétje op die manier:
Because include() is a special language construct, parentheses are not needed around its argument.
't Is wel meer het woordje 'special' wat het keywoord van de 'because' is, maar ik kan me voorstellen dat mensen dit interpreteren zoals hij deed :)

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:27

.oisyn

Moderator Devschuur®

Demotivational Speaker

Die documentatie is net zo suf. "Language constructs" zitten in de grammatica van de taal verwerkt. Als jij als ontwerper van de taal wilt dat je voor include drie haakjes openen en 6 blokhaken sluiten nodig hebt, dan definieer je dat zo. Ze zeggen bij het if-statement toch ook niet dat je haakjes nodig hebt omdat dat een (special) language construct is? :)

En het dan ook nog "include()" noemen terwijl de haken overbodig zijn :X (doen ze bij return trouwens ook, maar bij continue/break dan weer niet)

[ Voor 7% gewijzigd door .oisyn op 29-07-2008 13:06 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
't Mag dan wel suf zijn, maar het staat er wel, dus zouden mensen er conclusies uit kúnnen trekken, terwijl ze dat niet zouden moeten doen ;)

Verder ben ik 't met je eens hoor :P

Acties:
  • 0 Henk 'm!

Verwijderd

.oisyn schreef op dinsdag 29 juli 2008 @ 11:13:
[...]


Je redenatie klopt niet. Je hebt verder wel gelijk dat je bij include geen haakjes nodig hebt, maar niet omdat het een language construct is. Bij isset() heb je namelijk wel haakjes nodig, ookal is het een language construct :)
Ja ok, zo bedoelde ik het ook niet.

Veel mensen zetten de haakjes neer omdat ze denken dat het een functie is, net als dat veel mensen denken dat isset een functie is.

Omdat include geen functie is maar een language construct zijn de haakjes niet nodig wat niet direct wil zeggen dat een language construct per definitie geen haakjes nodig heeft. Sommige language constructs behoeven geen haakjes, sommige juist expliciet wel.

Beetje verwarrend dus, zoals ook in de manual een beetje verwarrend staat, maar volgens mij bedoelen we allemaal hetzelfde.

Acties:
  • 0 Henk 'm!

  • Tarabass
  • Registratie: Februari 2008
  • Laatst online: 09-04 17:02

Tarabass

Webmaster

Verwijderd schreef op dinsdag 29 juli 2008 @ 13:28:
[...]

Ja ok, zo bedoelde ik het ook niet.

Veel mensen zetten de haakjes neer omdat ze denken dat het een functie is, net als dat veel mensen denken dat isset een functie is.

Omdat include geen functie is maar een language construct zijn de haakjes niet nodig wat niet direct wil zeggen dat een language construct per definitie geen haakjes nodig heeft. Sommige language constructs behoeven geen haakjes, sommige juist expliciet wel.

Beetje verwarrend dus, zoals ook in de manual een beetje verwarrend staat, maar volgens mij bedoelen we allemaal hetzelfde.
Dus gooien we gewoon overal haakjes om :P
Pagina: 1