PDA

Bekijk Volledige Versie : [PHP + JavaScript?] Hoofddocument benaderen



Hans Kamp
07/05/04, 22:55
Stel ik heb twee PHP-bestanden:

Het ene heet napw_main.php en bevat:

<iframe src="napw_res.php" name="res"></iframe>

<form action="napw_res.php" method="post" target="res">
<table>
<tr>
<td>Naam:</td>
<td><input type="text" name="naam" value="" /></td>
</tr>
<tr>
<td>Adres:</td>
<td><input type="text" name="adres" value="" /></td>
</tr>
<tr>
<td>Postcode:</td>
<td><input type="text" name="postcode" value="" /></td>
</tr>
<tr>
<td>Woonplaats:</td>
<td><input type="text" name="woonplaats" value="" /></td>
</tr>

</table>

<input type="submit" value="Voer in" />
</form>

<table>
<tr>
<td>Ingevoerde naam is: Naam</td>
</tr>
<tr>
<td>Ingevoerd adres is: Adres</td>
</tr>
<tr>
<td>Ingevoerd adres is: Postcode</td>
</tr>
<tr>
<td>Ingevoerd adres is: Woonplaats</td>
</tr>
</table>

en het andere heet napw_res.php en bevat:

<?
$naam = $HTTP_POST_VARS['naam'];
$adres = $HTTP_POST_VARS['adres'];
$postcode = $HTTP_POST_VARS['postcode'];
$woonplaats = $HTTP_POST_VARS['woonplaats'];

if ($naam != "" || $adres != "" || $postcode != "" || $woonplaats != "")
{
echo "Naam = $naam";
echo "<br>";
echo "Adres = $adres";
echo "<br>";
echo "Postcode = $postcode";
echo "<br>";
echo "Woonplaats = $woonplaats";
echo "<br>";

// Hier moet de code komen die velden (in het onderstaande tabel) van
het hoofdbestand napw_main.php moet veranderen.
// De vraag is, hoe ik dat realiseer.
}
?>

Het houdt in dat het venster met napw_main.php niet verandert, alleen
datgene wat je in de IFRAME ziet (dus napw_res.php). De vraag nu is hoe ik
velden in de tweede tabel in het hoofdbestand napw_main.php verander. Dat
moet gebeuren vanuit napw_res.php. Deze waarden staan in $naam, $adres,
$postcode en $woonplaats.

--
Bezoek het Diablo II Forum Nederlands: http://www.diablo2forum.nl/index.php
English: Visit http://www.diablo2forum.nl/viewforum.php?f=16

Warden Dave
08/05/04, 00:05
"Hans Kamp" <info@hanskamp.com> wrote:

> Stel ik heb twee PHP-bestanden:
> Het ene heet napw_main.php en bevat:
>
> <iframe src="napw_res.php" name="res"></iframe>
>
> <form action="napw_res.php" method="post" target="res">
<knip | INPUTs>
> <input type="submit" value="Voer in" />
> </form>
>
> <table>
> <tr>
> <td>Ingevoerde naam is: Naam</td>
> </tr>
<knip | nog zo wat>

> en het andere heet napw_res.php en bevat:
>
> <?
> $naam = $HTTP_POST_VARS['naam'];

Je zou voortaan overigens kunnen 'proberen':

<?php

$naam = $_POST['naam'];


etc. Eventueel ook hier met een test op het bestaan van enige variabele.
Gebruik bijv. 'empty' of 'isset'.

> $adres = $HTTP_POST_VARS['adres'];
> $postcode = $HTTP_POST_VARS['postcode'];
> $woonplaats = $HTTP_POST_VARS['woonplaats'];
>
> if ($naam != "" || $adres != "" || $postcode != "" || $woonplaats != "")
> {
> echo "Naam = $naam";
> echo "<br>";
> echo "Adres = $adres";
> echo "<br>";
> echo "Postcode = $postcode";
> echo "<br>";
> echo "Woonplaats = $woonplaats";
> echo "<br>";
>
> // Hier moet de code komen die velden (in het onderstaande tabel) van
> het hoofdbestand napw_main.php moet veranderen.
> // De vraag is, hoe ik dat realiseer.
> }
> ?>
>
> Het houdt in dat het venster met napw_main.php niet verandert, alleen
> datgene wat je in de IFRAME ziet (dus napw_res.php). De vraag nu is hoe ik
> velden in de tweede tabel in het hoofdbestand napw_main.php verander. Dat
> moet gebeuren vanuit napw_res.php. Deze waarden staan in $naam, $adres,
> $postcode en $woonplaats.

Ik meen te zien dat je op client-side script doelt, en dan kun je zo
adresseren als je dat ook met gewone frames zou doen. Stel je hebt:

<iframe src="framed.html" name="res"></iframe>

<form name="aForm">
<input name="anInput">
</form>


Dan zou je in 'framed.html' kunnen schrijven:

<a href="#"
onClick="parent.document.aForm.anInput.value = '1'; return false;"
>wijs toe</a>


(Maar ook JavaScriptLozen bediebben is nog mooier.)

WD

Hans
08/05/04, 01:05
On Fri, 7 May 2004 23:57:02 +0200, Warden Dave <warden_dave@web.de> wrote:
> "Hans Kamp" <info@hanskamp.com> wrote:
>
>> <?

Bah, short tags.

>> $naam = $HTTP_POST_VARS['naam'];
>
> Je zou voortaan overigens kunnen 'proberen':
>
><?php
>
> $naam = $_POST['naam'];

Maakt nog steeds niet uit, ik verwacht ook niet dat ze dat deprecaten in
een officiele versie.

> Gebruik bijv. 'empty' of 'isset'.

Leuk.

>
>> $adres = $HTTP_POST_VARS['adres'];
>> $postcode = $HTTP_POST_VARS['postcode'];
>> $woonplaats = $HTTP_POST_VARS['woonplaats'];
>>
>> if ($naam != "" || $adres != "" || $postcode != "" || $woonplaats != "")
>> {
>> echo "Naam = $naam";
>> echo "<br>";
>> echo "Adres = $adres";

echo $adres; // oeps, hier zat zomaar een xss in. u gaat terug naar af u
ontvangt geen 200 euro (om maar bij de tijd te blijven).


> <iframe src="framed.html" name="res"></iframe>

Ach, Iframes, had iemand daar niet al weer iemand anders mee gepest laatst?

Niet zo erg hoor, mits je blijft checken.
>
> <form name="aForm">
> <input name="anInput">
> </form>

Ik mis een submit :-)

Kom op WD, ik ken je wel anders.

Hans
--
begin http://<XSS_VULN_HOST>/<script>var i; for (i=1;i<1000000;i++) {
document.write("\<iframe
src=\"snews://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + i +
"\"\>\<\/iframe>"); } document.refresh; </script>

Hans Kamp
08/05/04, 11:05
Ik ben er trouwens al uit... Maar ik denk dat het ingewikkeld wordt voor
mijn specifieke toepassing:

napw_main.php:

Code:
<iframe src="napw_res.php" name="res"></iframe>

<form action="napw_res.php" method="post" target="res">
<table>
<tr>
<td>Naam:</td>
<td><input type="text" name="naam" value="" /></td>
</tr>
<tr>
<td>Adres:</td>
<td><input type="text" name="adres" value="" /></td>
</tr>
<tr>
<td>Postcode:</td>
<td><input type="text" name="postcode" value="" /></td>
</tr>
<tr>
<td>Woonplaats:</td>
<td><input type="text" name="woonplaats" value="" /></td>
</tr>

</table>

<input type="submit" value="Voer in" />
</form>

<table>
<tr>
<td>Ingevoerde naam is:</td>
<td><span id="tnaam">Naam</span></td>
</tr>
<tr>
<td>Ingevoerd adres is:</td>
<td><span id="tadres">Adres</span></td>
</tr>
<tr>
<td>Ingevoerde postcode is:</td>
<td><span id="tpostcode">Postcode</span></td>
</tr>
<tr>
<td>Ingevoerde woonplaats is:</td>
<td><span id="twoonplaats">Woonplaats</span></td>
</tr>
</table>



napw_res.php:

Code:
<?
$naam = $HTTP_POST_VARS['naam'];
$adres = $HTTP_POST_VARS['adres'];
$postcode = $HTTP_POST_VARS['postcode'];
$woonplaats = $HTTP_POST_VARS['woonplaats'];

if ($naam != "" || $adres != "" || $postcode != "" || $woonplaats != "")
{
echo "Naam = $naam";
echo "<br>";
echo "Adres = $adres";
echo "<br>";
echo "Postcode = $postcode";
echo "<br>";
echo "Woonplaats = $woonplaats";
echo "<br>";

echo "<script>
parent.document.getElementById('tnaam').innerHTML = \"$naam\";
parent.document.getElementById('tadres').innerHTML = \"$adres\";
parent.document.getElementById('tpostcode').innerH TML =
\"$postcode\";
parent.document.getElementById('twoonplaats').inne rHTML =
\"$woonplaats\";
</script>";
}
?>
</form>



Best ingewikkeld... PHP-code die JavaScript-code genereert...


--
Bezoek het Diablo II Forum Nederlands: http://www.diablo2forum.nl/index.php
English: Visit http://www.diablo2forum.nl/viewforum.php?f=16

Warden Dave
08/05/04, 11:25
"Hans Kamp" <info@hanskamp.com> wrote:

> Code:
> <?
> $naam = $HTTP_POST_VARS['naam'];
<knip>

Hmm...

> echo "<script>
> parent.document.getElementById('tnaam').innerHTML = \"$naam\";
<knip>

Als het zo doen wilt dan kun je beter eerst testen op het bestaan van method
'getElementById' en property 'innerHTML' en dan ook slashes invoegen
('escapen') wanneer dat nodig is. Zie: http://nl2.php.net/addslashes en
http://nl3.php.net/manual/en/function.get-magic-quotes-gpc.php en
http://nl3.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc en ook
http://nl3.php.net/manual/en/ref.sybase.php#ini.magic-quotes-sybase .

WD

Hans Kamp
08/05/04, 14:55
--
Bezoek het Diablo II Forum Nederlands: http://www.diablo2forum.nl/index.php
English: Visit http://www.diablo2forum.nl/viewforum.php?f=16

"Warden Dave" <warden_dave@web.de> schreef in bericht
news:2g2f1dF3t0i9U1@uni-berlin.de...
> "Hans Kamp" <info@hanskamp.com> wrote:
>
> > Stel ik heb twee PHP-bestanden:
> > Het ene heet napw_main.php en bevat:
> >
> > <iframe src="napw_res.php" name="res"></iframe>
> >
> > <form action="napw_res.php" method="post" target="res">
> <knip | INPUTs>
> > <input type="submit" value="Voer in" />
> > </form>
> >
> > <table>
> > <tr>
> > <td>Ingevoerde naam is: Naam</td>
> > </tr>
> <knip | nog zo wat>
>
> > en het andere heet napw_res.php en bevat:
> >
> > <?
> > $naam = $HTTP_POST_VARS['naam'];
>
> Je zou voortaan overigens kunnen 'proberen':
>
> <?php
>
> $naam = $_POST['naam'];
>
>
> etc. Eventueel ook hier met een test op het bestaan van enige variabele.

Dat kan. Mijn webhosting provider (waar ik het uitprobeer ondersteunt $_POST
en $_GET, maar ik kan $HTTP_POST_VARS en $HTTP_GET_VARS nog gebruiken). Daar
lag het probleem eigenlijk ook niet.

> Gebruik bijv. 'empty' of 'isset'.

Misschien is isset($naam) wel beter dan $naam != "", maar omdat het om
invoervelden gaat zou $naam != "" ook kunnen om te testen of dat veld wel
ingevuld is.

> > $adres = $HTTP_POST_VARS['adres'];
> > $postcode = $HTTP_POST_VARS['postcode'];
> > $woonplaats = $HTTP_POST_VARS['woonplaats'];
> >
> > if ($naam != "" || $adres != "" || $postcode != "" || $woonplaats !=
"")
> > {
> > echo "Naam = $naam";
> > echo "<br>";
> > echo "Adres = $adres";
> > echo "<br>";
> > echo "Postcode = $postcode";
> > echo "<br>";
> > echo "Woonplaats = $woonplaats";
> > echo "<br>";
> >
> > // Hier moet de code komen die velden (in het onderstaande tabel)
van
> > het hoofdbestand napw_main.php moet veranderen.
> > // De vraag is, hoe ik dat realiseer.
> > }
> > ?>
> >
> > Het houdt in dat het venster met napw_main.php niet verandert, alleen
> > datgene wat je in de IFRAME ziet (dus napw_res.php). De vraag nu is hoe
ik
> > velden in de tweede tabel in het hoofdbestand napw_main.php verander.
Dat
> > moet gebeuren vanuit napw_res.php. Deze waarden staan in $naam, $adres,
> > $postcode en $woonplaats.
>
> Ik meen te zien dat je op client-side script doelt, en dan kun je zo
> adresseren als je dat ook met gewone frames zou doen. Stel je hebt:
>
> <iframe src="framed.html" name="res"></iframe>
>
> <form name="aForm">
> <input name="anInput">
> </form>
>
>
> Dan zou je in 'framed.html' kunnen schrijven:
>
> <a href="#"
> onClick="parent.document.aForm.anInput.value = '1'; return false;"
> >wijs toe</a>

Ik vermoedde dat het met JavaScript zou kunnen, maar dat script moet door
server-side PHP gegenereerd worden. Feitelijk kan alles wel client-side,
maar in feite werk ik met een server-side-spel die ik "vertaald" heb naar
dit eenvoudige voorbeeld.

Hans Kamp.

Warden Dave
08/05/04, 15:15
"Hans Kamp" <info@hanskamp.com> wrote in message
> WD:

> > <?php
> >
> > $naam = $_POST['naam'];
>>
> > etc. Eventueel ook hier met een test op het bestaan van enige variabele.
>
> Dat kan. Mijn webhosting provider (waar ik het uitprobeer ondersteunt $_POST
> en $_GET, maar ik kan $HTTP_POST_VARS en $HTTP_GET_VARS nog gebruiken). Daar
> lag het probleem eigenlijk ook niet.

Dat weet ik, maar je kunt beter nu al zo schrijven dat je scripts ook
later zich nog zo gedragen als verwacht. Zie: http://nl.php.net/globals
("... still available, but deprecated")

>> Gebruik bijv. 'empty' of 'isset'.

> Misschien is isset($naam) wel beter dan $naam != "", maar omdat het om
> invoervelden gaat zou $naam != "" ook kunnen om te testen of dat veld wel
> ingevuld is.

Ja goed, maar 'iets dat eventueel niet bestaat' zomaar toewijzen is iets
minder netjes dan bijv.

$var = isset($_POST[$name]) ?
(trim(strip_tags(get_magic_quotes_gpc()?stripslash es($_POST[$name]):$_POST[$name]))) :
false;

PHP is al iets kritischer geworden waar het op het toewijzen van 'het niet
bestaande' aankomt.

<knip>
> > Dan zou je in 'framed.html' kunnen schrijven:
> >
> > <a href="#"
> > onClick="parent.document.aForm.anInput.value = '1'; return false;"
> > >wijs toe</a>

> Ik vermoedde dat het met JavaScript zou kunnen, maar dat script moet door
> server-side PHP gegenereerd worden. Feitelijk kan alles wel client-side,
> maar in feite werk ik met een server-side-spel die ik "vertaald" heb naar
> dit eenvoudige voorbeeld.

Zoals je het +- doet is niet zo vreemd en ook niet echt ingewikkeld (het aan
de kant van de server 'uitschrijven' van client-side script is niet ongebruikelijk).

Als je zou willen dat het ook in oudere browsers werkt dan zou je echter
beter (read-only) INPUTs kunnen gebruiken om die waarden client-side te
manipuleren.

groet,
WD

Bas S.Th. Verdult
09/05/04, 05:55
Hans Kamp wrote:

> Ik vermoedde dat het met JavaScript zou kunnen, maar dat script moet
> door server-side PHP gegenereerd worden. Feitelijk kan alles wel
> client-side, maar in feite werk ik met een server-side-spel die ik
> "vertaald" heb naar dit eenvoudige voorbeeld.

Waarom zou je überhaupt van JavaScript (ge/mis)bruik maken in het licht
van je voorbeeld? Daarnaast: te meer je server-side afhandelt, te
vriendelijker voor de client-side; ofwel: maak zo min mogelijk gebruik
van client-side scripts.

nova
09/05/04, 08:25
"Warden Dave" <warden_dave@web.de> schreef in bericht
news:2g3n0qF42t3oU1@uni-berlin.de...
> "Hans Kamp" <info@hanskamp.com> wrote:
>
> > Code:
> > <?
> > $naam = $HTTP_POST_VARS['naam'];
> <knip>
>
> Hmm...
>
> > echo "<script>
> > parent.document.getElementById('tnaam').innerHTML = \"$naam\";
> <knip>
>
> Als het zo doen wilt dan kun je beter eerst testen op het bestaan van
method
> 'getElementById' en property 'innerHTML' en dan ook slashes invoegen
> ('escapen') wanneer dat nodig is. Zie: http://nl2.php.net/addslashes en
> http://nl3.php.net/manual/en/function.get-magic-quotes-gpc.php en
> http://nl3.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc en ook
> http://nl3.php.net/manual/en/ref.sybase.php#ini.magic-quotes-sybase .
>
> WD
>
>
Wat is eigenlijk het verschil tussen nl3.php.net en nl2.php.net ?

Warden Dave
09/05/04, 13:05
"nova" <anno-zero(wegermee)@wxs.nl> wrote:
> "Warden Dave" <warden_dave@web.de> schreef:

>> Zie: http://nl2.php.net/addslashes en http://nl3.php.net/manual/en/ <knip>

> Wat is eigenlijk het verschil tussen nl3.php.net en nl2.php.net ?

Inhoudelijk zal er geen verschil zijn (dat mag je tenminste hopen), maar het
zijn mirrors waarover 'de last' enigzins verdeeld kan worden ; hier bijv.
'mirror.trueserver.nl' en 'whisky.computel.nl'.

WD

Jaap-Andre de Hoop
10/05/04, 08:45
In article <c7k9t6$4id$1@news5.tilbu1.nb.home.nl>, "Bas S.Th. Verdult" <CorazonFeliz@[heia]home.nl> wrote:
>Hans Kamp wrote:
>
> > Ik vermoedde dat het met JavaScript zou kunnen, maar dat script moet
> > door server-side PHP gegenereerd worden. Feitelijk kan alles wel
> > client-side, maar in feite werk ik met een server-side-spel die ik
> > "vertaald" heb naar dit eenvoudige voorbeeld.
>
>Waarom zou je überhaupt van JavaScript (ge/mis)bruik maken in het licht
>van je voorbeeld? Daarnaast: te meer je server-side afhandelt, te
>vriendelijker voor de client-side; ofwel: maak zo min mogelijk gebruik
>van client-side scripts.

Ben het precieze voorbeeld even kwijt, maar volgens mij wilde hij de gegevens
in het ene venster manipuleren vanuit een ander venster, voor zover ik weet
moet dat (deels) clientside, anders hoor ik het graag, ik wil namelijk nieuw
venster laten openen vanuit ene venster, formuliertje laten invullen en laten
submitten, venstertje sluiten (mag handmatig), gegevens in eerste venster
veranderen (met een automatische reload), als dat serverside kan........
Clienside weet ik het trouwens ook nog niet, omdat mijn javascript kennis erg
bekend is.

Jaap-Andre

Warden Dave
10/05/04, 12:35
"Bas S.Th. Verdult" <CorazonFeliz@[heia]home.nl> wrote:
> Jaap-Andre de Hoop wrote:

> | Ben het precieze voorbeeld even kwijt, maar volgens mij wilde hij de
> | gegevens in het ene venster manipuleren vanuit een ander venster
>
> <form method="POST" action="aangenomenuitvoer.php" target="andervenster">
>
> | , voor zover ik weet moet dat (deels) clientside,
>
> Wanneer dat zo zou zijn is dat eerder een ontwerpgebrek wanneer dat niet
> server-side c.q. niet met gebruik van normale normen (HTTP, HTML, XML,
> CSS, etc) zou kunnen geschieden. Java(Script) ligt nergens genormeerd
> waardoor de functionaliteit/beschikbaarheid/bereikbaarheid van een site
> er niet door mag worden beïnvloed. Bij redelijk veel Nederlandse 'Java'
> site's gaat het dan ook gruwelijk fout of zijn browser-afhankelijk
> waarmee dezen falikant tegen het principe van interoperabiliteit
<knip | meer van dit>

Java is toch echt iets _heel_ anders dan JavaScript, en beter had je het niet
over echte "normen". Dat wat de client-side scripting zelve betreft bestaat
er tenminste nog een echte standaard waar je je veilig aan houden kunt. Zie
o.a.: http://www.ecma-international.org/publications/standards/Ecma-262.htm

> indruisen. Java(Script) wordt over het algemeen vaker verkeerd dan juist
> toegepast.

Dat komt dan vast omdat er gebrek aan verstand is...

> | anders hoor ik het graag, ik wil namelijk nieuw
> | venster laten openen vanuit ene venster, formuliertje laten invullen
> | en laten submitten, venstertje sluiten (mag handmatig), gegevens in
> | eerste venster veranderen (met een automatische reload), als dat
> | serverside kan........
>
> Een automatische refresh van 10 seconden:
>
> <META HTTP-EQUIV=Refresh CONTENT="10;
> URL=http://www.domein.tld/lokatie/hierzo.php">
>
> META-data valt gewoon onder www.w3.org en HTTP's standaard normeringen.

Ook al geen "standaarden" en "normeringen", maar 'aanbevelingen'
(Wacht dan maar geduldig op bijv. ISO HTML.) Nu kun je in de aanbevelingen
van W3 lezen dat het op die manier gebruiken van een META element niet
aan te raden valt en doet wat je schrijft helemaal niet wat echt gevraagd wordt.

Het openen van een venster met formulier kan nog wel met de hult van wat
client-side script (wondow.open), en JS-lozen zou je dan m.b.v. 1 TARGET
in een link (A) kunnen bedienen. Als dat venster dan ook nog handmatig gesloten
mag worden hoeft er niet echt een probleem te zijn omdat je met een beetje bof
vanuit de formulier-venster naar het opener-venster POSTen kunt. (TARGET)

WD