Avatar billede repsac Nybegynder
09. august 2003 - 00:03 Der er 53 kommentarer

Problem i at validere XHTML1.0 Strict pga. PHPSESSID

Hej "verden" :)

Nu sidder jeg så og fedter med en lille træls sag.

http://validator.w3.org/check?uri=http%3A%2F%2Ffnof.dyndns.dk%2Fvs%2Fwww%2Fkurser%2Fadmin%2Findex.php&charset=%28detect+automatically%29&doctype=%28detect+automatically%29&ss=1#line-51

Skidtet vil ikke validere fordi PHP kaster et hidden input ind automatisk.

Hvad er mulighederne?


Jeg formoder det er et spørgsmål vedr. PHP, hvorfor jeg har placeret mit spørgsmål i denne kategori -- hvis ikke, så bed mig endelig flytte det :)
Avatar billede phpwiz Nybegynder
09. august 2003 - 00:13 #2
prøv at bruge komplette stier i dine forms, istedet for bare :

/vs/www/kurser/admin/index.php

så skriv eks. :

http://dinhost.dk/vs/www/kurser/admin/index.php
Avatar billede repsac Nybegynder
09. august 2003 - 00:32 #3
Er ændret (echo 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];) og har ingen effekt.
Avatar billede Slettet bruger
09. august 2003 - 00:32 #4
Problemet er ikke hidden input elementet. Men formen i sig selv. Hvorfor den ikke må være, hvor den er, ved jeg ikke. Men det har ihvertfald ikke noget med PHP at gøre nej.
Avatar billede ohmish Nybegynder
09. august 2003 - 00:57 #5
lav en .htaccess fil og smid dette i:

php_value arg_separator.output "&"

voila
Avatar billede Slettet bruger
09. august 2003 - 00:58 #6
Læs nu hvad validatoren skriver. Det er ikke dét, der er problemet.
Avatar billede ohmish Nybegynder
09. august 2003 - 00:59 #7
siden er nede
Avatar billede repsac Nybegynder
09. august 2003 - 01:58 #8
Hopla -- lånte lige min stofanet-forbindelse-ting ud, hvorfor siden var nede, sorry. :)
Avatar billede repsac Nybegynder
09. august 2003 - 02:33 #9
ohmish: hm, forstår ikke hvad der burde ske, men jeg ser ingen ændring...

mercur8: PHP indsætter <input type="hidden" name="PHPSESSID" value="..."> for at overføre session variable, jo det er det der er problemet. Den "rigtige" kode indeholder jo ikke dette input-felt.

Den oprindelige kode er:
...
    <div id="login-form">
        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
        <fieldset>
            <legend>Login informations</legend>
...
Avatar billede repsac Nybegynder
09. august 2003 - 02:36 #10
ohmish: og jo, .htaccess-filen bliver læst og fulgt. Jeg har også ForceType'et til php (efter jeg laver dit php_value-whatever-trick :)) -- se evt. http://fnof.dyndns.dk/vs/www/kurser/admin/todo.txt :)
Avatar billede ohmish Nybegynder
09. august 2003 - 02:39 #11
Parse error: parse error, unexpected T_STRING in /var/www/html/vs/www/kurser/admin/todo.txt on line 2
Avatar billede ohmish Nybegynder
09. august 2003 - 02:48 #12
måske er det fordi <input type="hidden" name="PHPSESSID" value="4e85d56133e046f09b51f9bc2b1439a7" /> ligger forkert.

Men at smække sessionid på er unødvendigt.

prøv at lave formlinien om til bare:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
og fjern input linien.

i .htaccess skal dette så indsættes:
php_value session.use_trans_sid 1

Så følger session-id'et automatisk med undtagen i header-redirects.
Avatar billede ohmish Nybegynder
09. august 2003 - 02:50 #13
du siger at php kaster et hidden input ind automatisk.. det gir ikke mening.
Avatar billede 7th Praktikant
09. august 2003 - 03:03 #14
Du mangler for mig at se en <? echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n"; ?> før din doctype. Før kan dit dokument ikke blive valideret korrekt.
Avatar billede 7th Praktikant
09. august 2003 - 03:16 #15
Aha :) Jeg har fandt endnu en "fejl", men nu bliver den valideret korrekt. Tjek http://validator.w3.org/check?uri=http%3A%2F%2Fwww.justrandb.dk%2Fxhtml.php
Avatar billede ohmish Nybegynder
09. august 2003 - 03:19 #16
hvilken side bliver valideret korrekt 7th? din egen?
Avatar billede ohmish Nybegynder
09. august 2003 - 03:21 #17
repsac> din overskrift handler om xhtml 1.0. din doctype er xhtml 1.1. der er forskel.. vælg en.
Avatar billede 7th Praktikant
09. august 2003 - 03:21 #18
Nej, jeg lånte repsacs kodedel i formen, og prøvede mig frem.
Avatar billede 7th Praktikant
09. august 2003 - 03:25 #19
Først og fremmest manglede der en "<?xml version="1.0" encoding="iso-8859-1"?>. Dernæst så manglede der åbenbart noget omkring det hidden inputfelt. I mit tilfælde prøvede jeg bare at smide en div omkring, og det hjalp tilsyneladende på problemet, for nu bliver repsacs form ihvertfald valideret korrekt som XHTML 1.0 Strict.
Avatar billede repsac Nybegynder
09. august 2003 - 03:32 #20
ohmish: parse error, fordi det er en almindelig tekst-fil der bliver parset som php... ... "beviset" på at .htaccess-filen bliver "udført"...

1: Jeg indsætter ikke selv det hidden input-felt, det sker ganske magisk (jeg antager det er PHP).

2: jeg har brug for at session-id'et også følger header-redirects.


7th: Den er placeret lige efter doctype'en, og output'et som alm. tekst, altså ikke vi PHP's echo "funktion". Bemærk desuden at jeg validerer det xhtml1.1 og ikke 1.0 strict.

ohmish: jeg vælger xhtml1.1 :)
Avatar billede repsac Nybegynder
09. august 2003 - 03:34 #21
7th: der har heletiden været en <?xml... -- placeret i 3. linje, men fejlagtigt version="1.0" og ikke version="1.1".

Ja, jeg ved også at der skal noget omkring det input-tag, men som jeg tidligere har skrevet indeholder min kode _ikke_ det hidden input-tag.
Avatar billede repsac Nybegynder
09. august 2003 - 03:37 #22
Btw. så er problemet det samme om det så er xhtml1.1 eller xhtml1.0 strict...
Avatar billede repsac Nybegynder
09. august 2003 - 03:41 #23
7th: overse min post pr. 09/08-2003 03:34:28 -- jeg sludrer :)
Avatar billede repsac Nybegynder
09. august 2003 - 03:43 #24
(for at det ikke skal misforstås, så er det "kun" teksten efter "," i første linje der er sludder :))
Avatar billede repsac Nybegynder
09. august 2003 - 03:43 #25
Phust... snakker med mig selv, snakker med mig selv, taler med mit bedre jeg... ;)
Avatar billede 7th Praktikant
09. august 2003 - 03:50 #26
OK, jeg fangede heller ikke helt i første omgang det med det magiske inputfelt :) Anyway dumt spørgsmål, men hvad er det i dit php som gør at du får et magisk hidden inputfelt? Formoder du har skrevet noget i en .htaccess.
Avatar billede repsac Nybegynder
09. august 2003 - 03:54 #27
7th: jeg har intet skrevet i min .htaccess -- faktisk havde jeg ingen .htaccess, nu har jeg en, men har udkommenteret indholdet som ohmish, ellers foreslog skulle være der.
Avatar billede 7th Praktikant
09. august 2003 - 04:02 #28
Hmm tricky, for din http://fnof.dyndns.dk/vs/www/kurser/admin/index.php har jo intet hidden inputfelt, det fremkommer først når den bliver valideret. Mærkeligt...

Har du noget php kode i http://fnof.dyndns.dk/vs/www/kurser/admin/index.php eller der dokumentet blot som det fremgår via vis kilde?
Avatar billede repsac Nybegynder
09. august 2003 - 04:02 #29
Well, jeg skøjter til køjs -- der er jo et ur der ringer kl. 08:00 igen, men jeg lader min maskine stå tændt.
Avatar billede repsac Nybegynder
09. august 2003 - 04:04 #30
7th: niks, der er en session_start(); samt en mysql_pconnect og mysql_select_db...
Avatar billede repsac Nybegynder
09. august 2003 - 04:05 #31
... men godnat :)
Avatar billede 7th Praktikant
09. august 2003 - 04:05 #32
Sov godt :)
Avatar billede Slettet bruger
09. august 2003 - 07:00 #33
Dengang jeg kiggede på output fra validatoren, var det placeringen af selve formen, der var problemet. Du har nu tilsynelandende fjernet de <p> tags, der gav problemet.

Og anden gang jeg kiggede, inden jeg tog i byen og blev fuld, brokkede den sig over det hidden input felt. Måske fordi det ikke stod på en linje for sig selv?

PHP placerer et hidden input, for at der skal være session support, hvis man ikke har cookies slået til. Dette er en feature. Som man kan slå fra.

Se http://dk.php.net/manual/en/ref.session.php
Sæt session.use_trans_sid til false, hvis du ikke ønsker dette.
Avatar billede ohmish Nybegynder
09. august 2003 - 09:18 #34
validatoren bruger ikke cookies, og skal derfor have sess.id'et konstant.

derfor vil der også være forskel på om DU ser inputfeltet eller ej.
Avatar billede ohmish Nybegynder
09. august 2003 - 09:18 #35
ææh.. ja gomorgen, som man si'r. aaah kaffe.
Avatar billede detox Nybegynder
09. august 2003 - 09:28 #36
Hvis du ændrer linie 1 til:

<? echo "<?xml version='1.0' encoding='iso-8859-1'?>"?>

og flytter din hidden sådan her:

      <div id="login-form">
          <form action="/vs/www/kurser/admin/index.php" method="post">
          <fieldset>
          <input type="hidden" name="PHPSESSID" value="f197eec8b8f23c8eed760acb95e1536b" />

Så validerer det korrekt.
Avatar billede detox Nybegynder
09. august 2003 - 09:35 #37
Hmmm, godmorgen. Jeg havde vidst ikke helt forstået problematiken.
Avatar billede repsac Nybegynder
09. august 2003 - 18:31 #38
mercur8: Bemærk at validatoren hele tiden har brokket sig over det hidden input-felt, men i starten brokkede den sig også over et malplaceret p-tag.

Det jeg gør er nok at jeg først (*host*) får PHP op på en (*host*) 4.3 og derefter sætter session.use_only_cookies On (mest af hensyn til sikkerheden), men når jeg validerer (og dermed udvilker) sætter den Off og ændrer i stedet url_rewriter.tags så form=fakeentry bliver fjernet som mulighed, men (here we go... :-/) det kan jeg ikke få til at makke ret, eller også forstår jeg blot ikke hvad der bør ske/sker.
Ved at sætte url_rewriter.tags til
  a=href,area=href,frame=src,input=src,fieldset=fakeentry
så burde der blive placeret et "fakeentry" (hidden input-felt med PHPSESSID'et i), ikke? -- det gør der jo hvis form=fakeentry... Hvis det nu havde sket, kunne jeg have set ideen, men det sker ikke.
Avatar billede googolplex Novice
09. august 2003 - 18:49 #39
Jeg har nøjagtigt samme problem, men har aldrig kunnet finde en løsning, er ret sikker på det ikke kan lade sig gøre før PHP opgraderers :(

Jeg bruger samme løsning som dig, ændrer det når jeg validerer, det er bare ikke en særlig holdbar løsning.

Men hvis du finder en løsning vil jeg meget gerne høre den :-)
Avatar billede repsac Nybegynder
09. august 2003 - 19:31 #40
googolplex: det er da en ok løsning... imho

Hvis man ønsker at validere en side der kræver at en session kan hapses:
----
Deny from all
Allow from [din.ip.x.x]
php_value session.use_only_cookies Off
php_value url_rewriter.tags a=
----
- det er ligegyldigt om det fæle hidden input-felt indsættes, det er vel egentlig bedst hvis det ikke gør, da koden således ser ud for validatoren, som den ser ud for brugeren... og så tilgå det "hemlige" indhold som side.php?PHPSESSID=id'en -- hvor man med fordel kan echo'e strip_tags(SID) på alle siderne


Normalt:
----
session.use_only_cookies On
----


... eller har jeg forstået et eller andet helt galt?
Avatar billede repsac Nybegynder
09. august 2003 - 19:32 #41
pis

Normalt:
----
php_value session.use_only_cookies On
----
Avatar billede googolplex Novice
09. august 2003 - 19:42 #42
Så længe det virker, kan jeg accepterer det :-) Synes bare det er underligt at PHP opfører sig på den måde :-(
Avatar billede repsac Nybegynder
09. august 2003 - 19:42 #43
Hm... og hvis man bare ønsker at validere sine sider xhtml1.1 og ikke vil bruge session.use_only_cookies On, så kan man jo "bare" lave sine form's lidt anderledes, så man selv indsætter det hidden input-felt:

<form action="side.php" method="post">
<input type="hidden" name="<?php $a = explode('=', strip_tags(SID)); echo $a[0]; ?>" value="<?php echo $a[1]; ?>">

... og har
php_value url_rewriter.tags a=href,area=href,frame=src,input=src

... men måske det kan ordnes på en smartere måde?
Avatar billede googolplex Novice
09. august 2003 - 19:44 #44
Jeg synes din løsning virker fin, jeg synes bare det er besynderligt at man skal rode sig ud i sådan noget for at validere :-|
Avatar billede repsac Nybegynder
09. august 2003 - 19:50 #45
googolplex: hm, tjaeh, det smarte ville vel være at man kunne indsætte det hidden input-felt i fieldset hvilket jeg (som tidligere skrevet) har forsøgt uden succes... hvis det hidden input-felt da bare blev indsat i fieldset'et når
php_value url_rewriter.tags a=href,area=href,frame=src,input=src,fieldset=fakeentry
... men det sker tilsyneladende ikke... så man må ty til mit lille hack :)

... men måske smart nok at gøre følgende i stedet:
<form ...>
<?php
if (ini_get('session.use_only_cookies')) {
    $a = explode('=', strip_tags(SID));
    echo '<input type="hidden" name="' . $a[0] . '" value="' . $a[1] . '">';
}
?>
resten af form'en...
Avatar billede repsac Nybegynder
09. august 2003 - 19:52 #46
googolplex: helt enig -- det ville være rart hvis det fæle fæle input-felt bare blev placeret i fieltset hvis man sætter
php_value url_rewriter.tags a=href,area=href,frame=src,input=src,fieldset=fakeentry

... men det sker ikke -- i hvert fald ikke i PHP4.2.2 -- nogen der har en (*host*) tidssvarende installation?
Avatar billede googolplex Novice
09. august 2003 - 19:53 #47
Ja, det er besynderligt at det hidden field ikke ligger efter <fieldset). Men jeg synes dine løsninger er gode!

Men mon ikke de opgraderer PHP til at fungerer sammen med xhtml 1.1 før eller siden :-)
Avatar billede repsac Nybegynder
09. august 2003 - 19:54 #48
Hrmpf... og så sætte et lille ! foran ini_get :)
Avatar billede repsac Nybegynder
09. august 2003 - 19:55 #49
googolplex: "Men mon ikke de opgraderer PHP til at fungerer sammen med xhtml 1.1 før eller siden :-)" -- hmmm... "de"... vi kan da bare gøre det :)

Måske der også skal pilles ved Apache?
Avatar billede ohmish Nybegynder
11. august 2003 - 02:48 #50
prøv at sætte dine form tags inde i fieldsettet og div.
Avatar billede repsac Nybegynder
11. august 2003 - 11:05 #51
ohmish: eh, det forstår jeg ikke helt -- et fieldset er da en del af en form og ikke omvendt?
Helt konkret, er det så dette du mener?:
<fieldset>
<div>
<form ...>
</div>
</fieldset>
...
</form>

Det tror jeg næppe vil validere...
Avatar billede atheist Nybegynder
31. august 2003 - 15:40 #52
ok, nu har jeg læst alle svarene, og som nybegynder indenfor PHP er jeg ikke helt med på hvad der er løsningen, hvis der er en der gider opsummere hvad der virker, så det hele validerer, ville det være lækker...
Avatar billede ohmish Nybegynder
04. september 2003 - 03:13 #53
prøv at lave dit eget felt med PHPSESSID i formen.. det rigtige sted. så er jeg ret sikker på at php ikke gør det et forkert sted. comprende?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB