[HTML] Fouten bij W3C Validatie

Pagina: 1
Acties:

  • Digihelp ®
  • Registratie: Maart 2001
  • Laatst online: 21-04 10:15
Toevallig kwam ik de W3C validator tegen vandaag, en dacht ik: Laat ik dat ook eens proberen op mijn site. Er kwamen best wel wat "schoonheidsfoutjes" aan het daglicht, die ik bijna allemaal heb kunnen verbeteren.
Echter, er blijven een paar foutmeldingen terugkomen, die ik met geen mogelijkheid wegkrijg.

De foutmeldingen die ik nog overhou zijn o.a. :

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Line 34, character 179: 
... 8e1330bd54727f4f188dd8a56ea" />
^Warning: net-enabling start-tag; possibly missing required quotes around an attribute value

Line 34, character 179: 
... 8e1330bd54727f4f188dd8a56ea" />
^Error: element INPUT not allowed here; possible cause is an inline element containing a block-level element

Line 34, character 180: 
... e1330bd54727f4f188dd8a56ea" />
^Error: text is not allowed here; try wrapping the text in a more descriptive container

Line 39, character 45: 
... dden" name="newpass1" size=25>
^Error: element INPUT not allowed here; possible cause is an inline element containing a block-level element


De bovenste drie foutmeldingen hebben te maken met het /> teken, dat automatisch door PHP wordt gegenereerd vanwege de SESSIE id. Ik kan echter nergens vinden hoe ik daar gewoon > van maak.

De laatste foutmelding komt in totaal 5 keer voor: bij elke input box, behalve die van lijn: 36 en 37. Het enige verschil bij die 2 input boxen is dat ze netjes in een tabel staan, maar dat is toch niet verplicht?

Heeft iemand misschien enig idee waaraan bovenstaande foutmeldingen kunnen liggen, want ik kan het zelf echt niet meer vinden.
Als iemand mij zou kunnen vertellen waar ik hier meer over kan vinden ben ik al erg blij!

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
<TITLE></TITLE>
<LINK rel = "stylesheet" type="text/css" href = "profiel.css">
</HEAD>
<BODY>
   
<div id = "siteheader">
<p>Profiel 2003-2004</p>
</div>
  
<div id = "siteheadermenu">
<a href="index.html?PHPSESSID=615472e4db0e826ddc08efde4006155b">Home</a>  |
<a href="help.html?PHPSESSID=615472e4db0e826ddc08efde4006155b">Help</a> |
</div>
    
<div id="pagemenu">
<p class="info">Not logged in</p>
</div>
  
<div id="pagetext"><br>
<h3>Please login</h3>
<script type="text/javascript" src="md5.js"></script>
<script type="text/javascript">
function onformsubmit() {
logon.postpass.value = calcMD5(logon.postpass.value);
if (logon.newpass1.value) logon.newpass1.value = calcMD5(logon.newpass1.value);
if (logon.newpass2.value) logon.newpass2.value = calcMD5(logon.newpass2.value);
logon.rndval.value = calcMD5(logon.rndval.value);
return true;}
</script>

<form onSubmit="return onformsubmit();" name="logon" method="post" action="/index.php?categorie=1"><input type="hidden" name="PHPSESSID" value="615472e4db0e826ddc08efde4006155b" />
<table>
<tr><td class="header">Username:</td><td><input type="text" name="LoginNaam" value="" size="25"></td></tr>
<tr><td class="header">Password:</td><td><input type="password" name="postpass" size="25"></td></tr>
</table>
<input type="hidden" name="newpass1" size="25">
<input type="hidden" name="newpass2" size="25">
<input type="hidden" name="rndval" VALUE="1662196125">
<input type="hidden" name="screen" VALUE="1">
<input type="submit" name="submit" value="Logon">
</form>

</div>
</body>
</HTML>

[ Voor 23% gewijzigd door Digihelp ® op 18-05-2003 01:07 ]


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
ehh.. ik weet niet precies wat die foutmelding betekent, maar volgens mij horen er officieel quotjes om de waarde van je size=25

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

het lijkt me sterk dat PHP naast het toevoegen van de sessie-id aan de form-target ook nog eens de form-tag af gaat sluiten...

Ik kan je wel aanraden javascript in je <head> sectie te zetten...

[ Voor 22% gewijzigd door crisp op 18-05-2003 01:05 ]

Intentionally left blank


  • Digihelp ®
  • Registratie: Maart 2001
  • Laatst online: 21-04 10:15
Heb hierboven even een nieuwe source gepost, zoals die nu op de W3C site getoond wordt:

Marty:
Ik heb de quotes toegevoegd bij size="25" (zie boven). Helaas geen verandering in foutmeldingen.

Crisp:
De sessieID wordt ook niet aan target toegevoegd, maar als hidden input neergezet inclusief die />:

code:
1
<input type="hidden" name="PHPSESSID" value="615472e4db0e826ddc08efde4006155b" />


Javascript ga ik eens naar kijken of dat uitmaakt. Is enigzins lastig omdat de hele HTML dynamisch wordt gegenereerd, maar dat ga ik wel eens aanpassen.

edit:

Heb net handmatig Javascript in de HEAD gezet, maar foutmeldingen blijven helaas hetzelfde :(

[ Voor 15% gewijzigd door Digihelp ® op 18-05-2003 01:17 ]


  • Millennium
  • Registratie: Augustus 2000
  • Laatst online: 24-04 13:19

Millennium

Bug free !!!

/> is afkomstig uit XHTML, en levert zover ik weet geen problemen op met HTML validator van W3C.

Rampen bak 2004


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Ik krijg al meteen een foutmelding op het missen van een character encoding label. Ik heb deze even toegevoegd aan de <head> sectie:
HTML:
1
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

Ik zie dat je HTML4 strict gebruikt, daar mag je blijkbaar single-tags niet met /> afsluiten (XHTML style). Hij valideerd echter wel als HTML4 transitional.
2 keuzes: zorgen dat hij XHTML valideerd, of je doctype wijzigen naar HTML4 transitional :)

dat over javascript: het is gewoon netter om het in de <head> sectie te zetten omdat je dan zeker weet dat al je scripts al geladen zijn als hij de pagina nog aan het parsen is. Verder is het niet verplicht...

[ Voor 39% gewijzigd door crisp op 18-05-2003 01:23 ]

Intentionally left blank


  • Digihelp ®
  • Registratie: Maart 2001
  • Laatst online: 21-04 10:15
Klopt Crisp, zal die encoding ook nog even toevoegen. Bedankt!

Ik heb het probleem met de input elements al opgelost door alle input velden buiten de tabel binnen een <P> </P> te zetten. Blijkbaar moeten al die input velden ergens door omsloten worden.

Helaas geen echte oplossing voor />. Ik zal maar HTML4 transitional gebruiken dan, maar had liever gehad dat het ook met strict zou kloppen.

Voor de liefhebbers nog de volledige foutmeldingen:
http://www.htmlhelp.com/c...D1&warnings=yes&input=yes

  • Millennium
  • Registratie: Augustus 2000
  • Laatst online: 24-04 13:19

Millennium

Bug free !!!

Als je persee Strict wil gebruiken, zoek een XHTML tutorial (Wc3schools.com). Lijkt veel op HTML strict. Maar nog net ietsje strenger (alles, afgesloten met /> ook single tags, lowercase, etc)

Rampen bak 2004


  • Digihelp ®
  • Registratie: Maart 2001
  • Laatst online: 21-04 10:15
Ik heb al een andere oplossing gevonden.

Door het toevoegen van

PHP:
1
ini_set("session.use_trans_sid", "0");


Net boven mijn aanroep naar:

PHP:
1
session_start();


verdwijnt de extra hidden input en daarmee ook de foutmeldingen ! Het wordt nu volgens de STRICT HTML 4 goedgekeurd !!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

ik krijg 'm net niet xhtml1.1 strict gevalideerd; hij blijft zeuren over het feit dat sommige inputs niet in een <p> <div> <td> whatever staan? wtf?
ook mag je geen name attribuut aan de form-tag geven, maar daar valt mee te leven :)
hier de aangepaste source, morgen eens aan Cheatah vragen hoe dat zit met die inputs:

XHTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>wel een titel geven :)</title>
<link rel="stylesheet" type="text/css" href="profiel.css" />
<script type="text/javascript" src="md5.js"></script>
<script type="text/javascript">

function onformsubmit() {

  document.forms[0].postpass.value = calcMD5(document.forms[0].postpass.value);
  if (document.forms[0].newpass1.value) document.forms[0].newpass1.value = calcMD5(document.forms[0].newpass1.value);
  if (document.forms[0].newpass2.value) document.forms[0].newpass2.value = calcMD5(document.forms[0].newpass2.value);
  document.forms[0].rndval.value = calcMD5(document.forms[0].rndval.value);
  return true;

}

</script>

</head>
<body>
   
<div id = "siteheader">
<p>Profiel 2003-2004</p>
</div>
  
<div id="siteheadermenu">
<a href="index.html?PHPSESSID=615472e4db0e826ddc08efde4006155b">Home</a>  |
<a href="help.html?PHPSESSID=615472e4db0e826ddc08efde4006155b">Help</a> |
</div>
       
<div id="pagemenu">
<p class="info">Not logged in</p>
</div>
  
<div id="pagetext"><br />
<h3>Please login</h3>
<form onsubmit="return onformsubmit();" method="post" action="/index.php?categorie=1"><input type="hidden" name="PHPSESSID" value="615472e4db0e826ddc08efde4006155b" />
<table>
<tr><td class="header">Username:</td><td><input type="text" name="LoginNaam" value="" size="25" /></td></tr>
<tr><td class="header">Password:</td><td><input type="password" name="postpass" size="25" /></td></tr>
</table>
<input type="hidden" name="newpass1" size="25" />
<input type="hidden" name="newpass2" size="25" />
<input type="hidden" name="rndval" value="1662196125" />
<input type="hidden" name="screen" value="1" />
<input type="submit" name="submit" value="Logon" />
</form>

</div>
</body>
</html>

[ Voor 24% gewijzigd door crisp op 18-05-2003 01:53 ]

Intentionally left blank


  • Johnny
  • Registratie: December 2001
  • Laatst online: 24-04 11:10

Johnny

ondergewaardeerde internetguru

crisp schreef op 18 mei 2003 @ 01:52:
ik krijg 'm net niet xhtml1.1 strict gevalideerd; hij blijft zeuren over het feit dat sommige inputs niet in een <p> <div> <td> whatever staan? wtf?
ook mag je geen name attribuut aan de form-tag geven, maar daar valt mee te leven :)
hier de aangepaste source, morgen eens aan Cheatah vragen hoe dat zit met die inputs:
Verander name="" gewoon in id="" en zet alles in een <div>.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Johnny schreef op 18 May 2003 @ 13:29:
[...]
Verander name="" gewoon in id="" en zet alles in een <div>.
sure kan je name veranderen in id. Zoals je ziet heb ik nu zelfs helemaal geen name opgegeven voor het form, en in de js document.forms[0] gebruikt.
Ik meen echter gisteren ook gelezen te hebben dat het name attribuut voor inputs ook deprecated is; hoe moet je dan in hemelsnaam serverside iets gaan doen met form input als je geen name= meer mag gebruiken :?
Verder zie ik mezelf elke input al in een div zetten; ik zie daar de logica gewoon niet van in en zou dus graag weten wat daarvan de achterliggende gedachte is (of dat het misschien een foutje van de validator is).

Intentionally left blank


Verwijderd

Voor zover ik het weet is het name attribuut wel toegestaan in xhtml strict, tenminste het staat hier:
http://www.zvon.org/xxl/x...tput/Strict/el_input.html
Alleen die elementen waarbij de name attribute alleen als fragment identifier werd gebruikt, die zijn hun name attribuut kwijtgeraakt.

En inderdaad, kennelijk mag je niet rechtstreeks input elementen stoppen in form elementen.
Krijg je dit soort rare zinnen van:
"Element input cannot be a child of blockquote, body, form, noscript."
http://www.zvon.org/xxl/x...ce/Output/comparison.html
Waarom het niet mag is mij ook een raadsel.
Het is geen foutje van de validator iig. Ik zag verscheidene berichtjes in de w3c-html-list dat het niet mocht.

Verwijderd

crisp schreef op 18 May 2003 @ 13:38:

sure kan je name veranderen in id. Zoals je ziet heb ik nu zelfs helemaal geen name opgegeven voor het form, en in de js document.forms[0] gebruikt.
Ik meen echter gisteren ook gelezen te hebben dat het name attribuut voor inputs ook deprecated is; hoe moet je dan in hemelsnaam serverside iets gaan doen met form input als je geen name= meer mag gebruiken :?
Dat lijkt me absoluut niet waar, zeker als je gaat kijken waarom sommige elementen een id hebben gekregen, en andere elementen niet.

Er mag in een document maar één formulier zijn met een bepaalde naam, daarom krijgt een form een id (wat echt niets anders is dan een gegerandeerd unieke naam). Die formulieren kunnen echter allemaal dezelfde velden bevatten, of ze kunnen zelf meerdere elementen met dezelfde naam bevatten. Daarom krijgen elementen als input, select en textarea een name attribuut. Ja, ze mogen ook een id krijgen, maar daar wordt niet naar gekeken bij het versturen van een formulier, dat is voor andere doeleinden, zoals het kunnen koppelen van labels aan velden, etc.

Maar ik vind het vrij logisch dat anchors, frames, forms etc. een id attribuut hebben, en géén name attribuut, terwijl input, select en textarea wél een name attribuut hebben. Wat jij gelezen hebt lijkt me onzin eigenlijk, misschien een misinterpretatie van iemand die de doelstellingen van het W3C niet erg goed heeft begrepen. :)
Verder zie ik mezelf elke input al in een div zetten; ik zie daar de logica gewoon niet van in en zou dus graag weten wat daarvan de achterliggende gedachte is (of dat het misschien een foutje van de validator is).
Ik heb dat eigenlijk ook nooit echt 100% begrepen, ik vind het eigenlijk onzinnig dat als je een div binnen het form element zet, de validator niet gaat zeuren.

Volgens de DTD mogen er inderdaad alleen block-level elementen een directe child zijn van een formulier. Maar leg mij eens uit waarom een block-level tag binnen een block-level tag het probleem dan wel oplost? Ik zou het net iets logischer vinden als er een restricted set van block-level elementen zou zijn, die een bepaalde vorm van logica afdwingt. Zoals bijvoorbeeld het gebruik van een dl element, dat ik zelf erg geschikt vind voor het gemiddelde gebruik van een formulier, in combinatie met dt, label, dd en de invoer-elementen.
offtopic:
(Wie nu gaat beginnen over hoe dat er dan uit gaat zien heeft overigens duidelijk nog niet goed begrepen hoe (X)HTML en CSS op elkaar inhaken)


Wat ik zelf dus ook niet mooi vind, is een structuur in de combinatie tekst, invoerveld, br tag. En wat ik wel enigszins kan begrijpen, is dat niet zomaar alles binnen een formulier element gemikt kan worden. Een standaard HTML document dwingt je ook af om alleen block-level tags als directe children van het body element te gebruiken. Maar een div vind ik nou ook niet erg beschrijvend of verhelderend, dus wat dat betreft is het regelijk vreemd, gezien het feit dat het body element ook al een block-level element is.

Als er zonodig een bepaalde structuur wordt afgedwongen, zou ik dan dus toch liever zien dat een zinnige structuur wordt afgedwongen, zoals een lijst en/of een tabel en/of iets anders, maar alles is haast beter dan een div.

Wat je nu hebt, is dat mensen dan maar een div in een formulier gaan gooien, en daarbinnen weer net zo'n grote zooi gaan maken als zonder die div ;)

Formulier volgens Cheatah:
code:
1
2
3
4
5
6
7
8
<form id="loginform" action="servlet/login" method="post">
   <dl>
      <dt><label for="username">Gebruikersnaam</label></dt>
      <dd><input type="text" name="user_name" id="username" /></dd>
      <dt><label for="password">Wachtwoord</label></dt>
      <dd><input type="password" name="user_password" id="password" /></dd>
   </dl>
</form>

Uitgebreidere formulieren worden opgedeeld met fieldsets.

Conclusie: ik vind het zoals het nu geregeld is wat vreemd, en pleit voor het duidelijker maken van die 'regel', of voor het laten vallen ervan :)

[ Voor 5% gewijzigd door Verwijderd op 18-05-2003 17:10 ]


Verwijderd

Ik weet niet of definitielijsten daar zo bedoeld voor zijn.

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Bedankt voor je visie Cheatah!
wb het deprecated zijn van het name-attribuut in z'n geheel; ik geloof inderdaad dat ik dat van een of ander wazig forum had; op w3c heb ik inmiddels kunnen vinden dat het alleen deprecated is voor een aantal elementen waaronder het form-element.
Wel jammer aan de ene kant, omdat je forms-collectie voor javascript zo weer aan waarde inboet, en ik dit zo raar vind staan:
JavaScript:
1
var some_array = document.getElementById('form1').elements['input_array[]'];

kwestie van wennen dan denk ik maar...

dat inputs in een block-level element contained moeten zijn vind ik zelf dus ook niet handig. Ik ben het met je eens dat inline-input-<br /> niet mooi is, maar ben zelf ook niet zo te spreken over het gebruik van een definition-list voor zoiets (hoewel het wel weer mooier is als bijvoorbeeld een anonieme <div>).

Als PHP echter een hidden-field toevoegd met een sessie-id erin, zonder blocklevel-element daar omheen, krijg je dus nooit een xhtml-compliant pagina 8)7

[ Voor 3% gewijzigd door crisp op 18-05-2003 23:49 ]

Intentionally left blank


Verwijderd

crisp schreef op 18 May 2003 @ 23:48:

Bedankt voor je visie Cheatah!
wb het deprecated zijn van het name-attribuut in z'n geheel; ik geloof inderdaad dat ik dat van een of ander wazig forum had; op w3c heb ik inmiddels kunnen vinden dat het alleen deprecated is voor een aantal elementen waaronder het form-element.
Wel jammer aan de ene kant, omdat je forms-collectie voor javascript zo weer aan waarde inboet, en ik dit zo raar vind staan:
JavaScript:
1
var some_array = document.getElementById('form1').elements['input_array[]'];

kwestie van wennen dan denk ik maar...
Nou..., dat valt wel mee hoor :)
Zo'n beetje alle functionaliteit van de vroegere name attributen is nu overgedragen aan de id attributen. In de HTML DOM Specificatie wordt dat ook genoemd.
http://www.w3.org/TR/2003...0109/html.html#ID-1689064
http://www.w3.org/TR/2003...109/html.html#ID-75708506
Je kunt gewoon document.forms['form1'].elements['input_array[]']; blijven gebruiken, of document.forms.namedItem('form1').elements.namedItem('input_array[]') natuurlijk.
dat inputs in een block-level element contained moeten zijn vind ik zelf dus ook niet handig. Ik ben het met je eens dat inline-input-<br /> niet mooi is, maar ben zelf ook niet zo te spreken over het gebruik van een definition-list voor zoiets (hoewel het wel weer mooier is als bijvoorbeeld een anonieme <div>).
Probleem is natuurlijk dat er op dit moment volgens mij geen element is dat het beter beschrijft. Een named list of misschien een ander speciaal element zou wellicht beter op zijn plaats zijn. Tabellen zijn het ook weer net niet.
Als PHP echter een hidden-field toevoegd met een sessie-id erin, zonder blocklevel-element daar omheen, krijg je dus nooit een xhtml-compliant pagina 8)7
Dat moet je dan ook uitzetten, en er zelf een module ervoor schrijven ;)

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Verwijderd schreef op 19 May 2003 @ 08:56:
[...]

Nou..., dat valt wel mee hoor :)
Zo'n beetje alle functionaliteit van de vroegere name attributen is nu overgedragen aan de id attributen. In de HTML DOM Specificatie wordt dat ook genoemd.
http://www.w3.org/TR/2003...0109/html.html#ID-1689064
http://www.w3.org/TR/2003...109/html.html#ID-75708506
Je kunt gewoon document.forms['form1'].elements['input_array[]']; blijven gebruiken, of document.forms.namedItem('form1').elements.namedItem('input_array[]') natuurlijk.
stom, had ik natuurlijk makkelijk even kunnen testen.
de shortform document.form1.inputveld.value werkt in ieder geval niet meer, maar daar kan ik niet rouwig om zijn ;)
[...]
Dat moet je dan ook uitzetten, en er zelf een module ervoor schrijven ;)
ik heb het sowieso uitstaan; ik hou er niet van als er dingen aan mijn (x)html worden toegevoegd zonder dat ik dat wil. Daarbij neemt het gebruik van session.use_trans_sid een zeker veiligheidsrisico met zich mee.

Intentionally left blank

Pagina: 1