[js / php] ongewenst hidden element

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
php -> sessie wordt gestart

javascript -> declareer een variabele genaamd htmlOutput

javascript/php -> stop alle dynamisch gegenereerde html content (dus de complete pagina) in deze variabele.

javascript -> document.write(htmlOutput);

ik gebruik dit om bovenstaande pagina op te vragen vanaf een andere server.

probleem: werkt prima, maar
php wordt gecompileerd met de -enable-trans-id optie waardoor de session ID automatisch aan elke relatieve link wordt meegegeven en binnen elk form wordt een hidden element met daarin de session ID toegevoegd. dat hidden element bevat natuurlijk dubbelle dubbele quotjes (") , waardoor er in in de javascript string dus het volgende ontstaat en ik vanzelfsprekend geen output in me browser te zien krijg:

code:
1
2
3
htmlOutput += 
"<form name='login' method='post' action='http://www.domein/login.php?'>
<input type="hidden" name="PHPSESSID" value="05f28c72c94fbb714f668e80d0ef9497" />";


bij refreshen is het probleem opgelost, want de session id is opgeslagen in een cookie en wordt niet meer automatisch toegevoegd.

logische 'dirty' oplossing is natuurlijk bovenin de pagina kijken of de sessie reeds bestaat, zo niet: de pagina herladen zodat de sessie wel bestaat.

Als je de betreffende pagina direct opvraagt via de url, dan refresht hij netjes en gaat alles goed.

Echter, de bedoeling van het concept is dat de pagina binnen een andere pagina extern wordt aangeroepen:
code:
1
<script language="javascript" src="http://www.domein.com/externalHeader.php">


en dan blijkt de refresh niet te werken (logisch....)

ok nog even ter extra verduidelijking: het concept

------------------- http://www.domein.com/externalHeader.php ------------------


********** pagina inhoud hier **********

------------------- http://www.domein.com/externalHeader.php ------------------

iemand enig idee hoe ik dit probleem moet oplossen?
-enable-trans-id uitschakelen is geen optie, want dat gaat de hosting partij vast niet voor mij doen.

[ Voor 15% gewijzigd door Verwijderd op 23-01-2003 20:07 ]


Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
hm kan je niet iets met regular expressions, of een str_replace aangezien je die complete content hebt...

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ja heb ik geprobeerd, maar zodra die form tag in de htmlOutput string gaat wordt de string foutief. waar dat hidden element ook in gestopt wordt, hij veroorzaakt altijd een foute string omdat die " er omheen staan :(
ik had een replace in gedachten, maar dat werkt natuurlijk niet, want je hebt geen correcte string om in te replacen

[ Voor 10% gewijzigd door Verwijderd op 23-01-2003 20:50 ]


Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 11-09 11:19

chem

Reist de wereld rond

wellicht kan je het dmv een .htaccess voor elkaar krijgen, check de php.ini opties @ php.net
Of split de form naar 'for'+'m' ?

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

code:
1
ini_set('session.use_trans_sid', 0);

werkt bij mij prima.

Verder zou een goed gebruik van quotes je probleem wellicht ook oplossen.

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Gewoon goede quotes gebruiken dan is het helemaal geen probleem.
Als je enkele quotes gebruikt rondom de form en deze binnen de regel elke keer keurig escaped, dan is er toch niks aan de hand?

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Waarom zou je uberhaupt de trans_sid willen blijven gebruiken als je 'm niet gebruikt? ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Ik zie altijd en overal verkeerd gebruik van quotes in PHP code; pasgeleden heb ik daar eea over opgezocht , en toen bleek dat ik ook hard op weg was het verkeerd aan te leren.

Wat is nl het verschil tussen iets in "" (dubbele quotes) en iets in '' (enkele quotes)?
PHP zal alles wat tussen dubbele quotes staat eerst parsen om te kijken of er dingen in vervangen moeten worden, terwijl alles wat tussen enkele quotes staat als letterlijk wordt aangenomen.

Voobeeld:
code:
1
echo "Mijn naam is $naam";

Hier wordt de string "Mijn naam is $naam" dus eerst geinterpreteerd, waarbij $naam vervangen wordt door de inhoud van variabele naam.
Ik lees echter vaak dat het volgende sneller is en daarom aan te raden:
code:
1
echo "Mijn naam is ".$naam;

alleen waarom zou je nu nog dubbele quotes gaan gebruiken? Er hoeft immers niets meer geinterpreteerd te worden, dus uiteindelijk kan je beter dit doen:
code:
1
echo 'Mijn naam is '.$naam;

Gebruik je dit nu om HTML te echo-en, dan ben je meteen van het escape probleem af:
code:
1
echo '<form name="myform" action="login.php" method="post">';

(Bedenk hierbij dat het regel is om attributen in HTML tussen dubbele quotes te zetten).

En wat als ik nou dingen als \n erin wil hebben?
Maak daar een constant van en gebruik die:
code:
1
2
3
define('CR', "\n");
echo 'Dit is regel 1'.CR.
     'Dit is regel 2';


Voor grote stukken statische HTML en javascript (waar je dus wel veel enkele quotes in gebruikt) kan je het beste even uit PHP mode springen.

Misschien iets voor de FAQ?

[ Voor 12% gewijzigd door crisp op 24-01-2003 09:32 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Ach wat betreft dubbele en enkele quotes, dat heeft iemand hier getest en op een lus van duizenden (?) herhalingen was het geloof ik nog nauwelijks noemenswaardig.
Maar de rest kan inderdaad wel nettere code opleveren.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 24 January 2003 @ 01:41:
Gewoon goede quotes gebruiken dan is het helemaal geen probleem.
Als je enkele quotes gebruikt rondom de form en deze binnen de regel elke keer keurig escaped, dan is er toch niks aan de hand?
het probleem is dat ik die quotes van het automatisch door de server toegevoegde hidden element niet kan escapen, want dat hidden element staat helemaal niet fysiek in me code.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
crisp schreef op 23 January 2003 @ 23:33:
code:
1
ini_set('session.use_trans_sid', 0);
thnx dat is de oplossing!

[ Voor 24% gewijzigd door Verwijderd op 24-01-2003 16:33 ]

Pagina: 1