[php] $_POST mee naar include?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Passenger
  • Registratie: Januari 2000
  • Laatst online: 25-08 00:25
Ik heb een file genaamd index.php. Vanuit die file wordt include.php geinclude (dat klinkt best logisch :P). In die include.php kunnen 2 dingen gebeuren:
- de include kan waarden weergeven
- de include kan waarden toevoegen
Dit is afhankelijk van de variabele $action waarmee include.php aangeroepen wordt. Kortom, de include ziet er bijv. als volgt uit:
PHP:
1
include("include.php?action=read")

index.php zorgt voor de vormgeving, include.php voor de data.

Alleen nu is het probleem als volgt:
Als ik index.php?action=write aanroep, krijg ik allemaal mooie invoervakjes te zien. Deze vul ik in, en vervolgens worden deze gegevens verzonden naar index.php?action=read. In deze index.php staat dus de include, en voordat deze include gaat lezen, wil ik eerst dat de ingevulde waarden opgeslagen worden. Kortom, ik heb $_POST nodig.
Het probleem is alleen, zodra je in php een file include, gaat php over naar html mode, en gaat dan pas includen. Variabelen die VOOR de include zijn gedefiniëerd (zo ook $_POST dus) gaan dus niet mee naar de include, TENZIJ je dit in de URL aangeeft. Maar uiteraard wil ik niet dat mijn verzonden data in de url terecht komt.

Ik hoop dat mijn probleem een beetje duidelijk is? Heeft iemand een idee hoe ik dit op kan lossen?

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18:51
Tu-Tone schreef op 02 juli 2003 @ 01:59:
Het probleem is alleen, zodra je in php een file include, gaat php over naar html mode, en gaat dan pas includen. Variabelen die VOOR de include zijn gedefiniëerd (zo ook $_POST dus) gaan dus niet mee naar de include, TENZIJ je dit in de URL aangeeft. Maar uiteraard wil ik niet dat mijn verzonden data in de url terecht komt.

Ik hoop dat mijn probleem een beetje duidelijk is? Heeft iemand een idee hoe ik dit op kan lossen?
Je probleemomschrijving lijkt me duidelijk, maar wat je stelt is gewoon niet waar. De superglobals $_GET en $_POST (en ook $_COOKIE en de vergaarbak $E_REQUEST) worden precies eenmaal gevuld, bij het begin van de request, en daarna niet meer gewijzigd. Ook als je andere scripts include is de inhoud daarvan gewoon beschikbaar (in de PHP code, uiteraard). Dat PHP bij het includen overschakeld naar HTML modus heeft daar niets mee te maken.

Weet je zeker dat je geen HTML code include (in plaats van PHP code) met een constructie als include("http://www.mijndomein.com/filetje.php")? Dan doet PHP namelijk een request op de gegeven URL en krijg je hoogstwaarschijnlijk geen PHP-code maar gewoon HTML terug. In de PHP code achter de URL die je opgeeft is de inhoud van de superglobals van jouw (compleet ongerelateerde) request natuurlijk niet beschikbaar. Het zou me niets verbazen dat de bestandsnaam "file.php?xyz" ook al een URL gezien wordt en omdat de inhoud van $_GET toch al beschikbaar is (en niet gewijzigd zal worden door de include) is alles vanaf en inclusief het vraagteken overbodig. Probeer het eens met include("include.php") zonder query variabelen (en al helemaal zonder protocolspecificatie!)?

Acties:
  • 0 Henk 'm!

  • TRON
  • Registratie: September 2001
  • Laatst online: 16-09 13:13
Eehh, je wilt de geposte waarden opslaan?
PHP:
1
2
3
4
<?PHP
$query_save = "insert into tbl_tabel (op, te, slaan, gegevens) values ('".$_POST["op"]."', 
'".$_POST["te"]."', '".$_POST["slaan"]."', '".$_POST["gegevens"]."')";
PHP?>


srry for lay-out verneuking

[ Voor 80% gewijzigd door TRON op 02-07-2003 04:20 . Reden: -(34%) ]

Leren door te strijden? Dat doe je op CTFSpel.nl. Vraag een gratis proefpakket aan t.w.v. EUR 50 (excl. BTW)


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

1 tip: gebruik liever geen GET en POST variabelen door elkaar in dezelfde request. Ik heb eens meegemaakt met bepaalde browsers (ik meen Opera) dat GET-variabelen in een form-action bij een POST niet meegestuurd werden. Gebruik dan liever een hidden field om je extra waarde mee te sturen.
Verder zijn in een include gewoon de GET en POST variabelen van de request beschikbaar mits het inderdaad een include vanaf dezelfde server is.

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 02-09 11:02

D2k

PHP:
1
2
3
<?
include("include.php?action=read")
?> 

please tell me dat dat een parse error oplevert?

PHP:
1
2
3
4
<?
$action="read";
include("blaat.php");
?>

dit werkt. dus als $action bekend is is dat ook in je include bekend :)

Doet iets met Cloud (MS/IBM)


Acties:
  • 0 Henk 'm!

  • Passenger
  • Registratie: Januari 2000
  • Laatst online: 25-08 00:25
Soultaker schreef op 02 July 2003 @ 02:20:
[...]

Je probleemomschrijving lijkt me duidelijk, maar wat je stelt is gewoon niet waar. De superglobals $_GET en $_POST (en ook $_COOKIE en de vergaarbak $E_REQUEST) worden precies eenmaal gevuld, bij het begin van de request, en daarna niet meer gewijzigd. Ook als je andere scripts include is de inhoud daarvan gewoon beschikbaar (in de PHP code, uiteraard). Dat PHP bij het includen overschakeld naar HTML modus heeft daar niets mee te maken.

Weet je zeker dat je geen HTML code include (in plaats van PHP code) met een constructie als include("http://www.mijndomein.com/filetje.php")? Dan doet PHP namelijk een request op de gegeven URL en krijg je hoogstwaarschijnlijk geen PHP-code maar gewoon HTML terug. In de PHP code achter de URL die je opgeeft is de inhoud van de superglobals van jouw (compleet ongerelateerde) request natuurlijk niet beschikbaar. Het zou me niets verbazen dat de bestandsnaam "file.php?xyz" ook al een URL gezien wordt en omdat de inhoud van $_GET toch al beschikbaar is (en niet gewijzigd zal worden door de include) is alles vanaf en inclusief het vraagteken overbodig. Probeer het eens met include("include.php") zonder query variabelen (en al helemaal zonder protocolspecificatie!)?
grmf... dit is dus inderdaad het hele euvel... ik wist helemaal niet eens dat dat verschil uit maakte? is dit ook ergens terug te vinden in de php-manual, want daar heb ik dus finaal overheen gelezen!
in ieder geval iedereen hartelijk bedankt voor alle reacties, het werkt nu wel!

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18:51
Ok, dit topic kan gearchiveerd worden onder de argumenten waarom het idioot is om fopen-wrappers voor functies als include/require te gebruiken. 8)7 (Dat dossier wordt zo samen met de beveiligingsproblemen al aardig dik, gok ik.)

[ Voor 3% gewijzigd door Soultaker op 02-07-2003 12:32 ]

Pagina: 1