5568 sujets

Sémantique web et HTML

Bonjour,

J'ai un script PHP qui tourne bien.
Si j'affiche la source html, nickel.
Si je vérifie avec le debugueur html BBedit, nickel.
Maintenant, si j'appelle le debugueur du W3C, page non valide, et, en début de la source de ma page vue par le W3C, je trouve le message d'erreur suivant.

1: <br />
2: <b>Warning</b>: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in <b>/data0/web/6/0/user10006/home/2j4c8l40ghj4/htdocs/www/funTraite.php</b> on line <b>15</b><br />
3: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

...etc...

Ce message d'erreur est invisible dans le navigateur, dans la source du navigateur, dans BBedit, etc...

J'avoue ne rien comprendre, d'autant moins que le script s'exécute parfaitement bien, si quelqu'un connaît, merci d'avance.
A mon avis tu as une requete dynamique (qui utilise PHP quoi)
Et lorsque le visiteur est le validateur de W3, eh bien la requête foire.
Vu que tu n'affiche pas le mysql_error() le script ne plante qu'au mysql_fetch_row(), et ça va pas t'aider pour le debuggage.

En tous cas c'est un problème de PHP et ça a pas trop sa place ici Smiley lol
Mais on pourrais pas t'aider plus sans voir ton code.
D'accord, admettons que ce soit un bug PHP, mais comment expliques-tu que le script s'exécute parfaitement, sans ce warning, pour tout autre utilisateur que le débugueur W3C.

Ne serait-ce pas une histoire de rechargement de la page, qui elle provoque sans doute une erreur car des variables POST ne passent plus ?

Est-ce que le validateur recharge la page que tu lui soumets ?

Pour BBedit, tout est clean...

Le code PHP est long et avec des fonctions persos, je ne veux pas vous l'infliger pour l'instant.

MERCI de ton aide.
Pour le fait que ça bugge seulement avec le validateur W3C je pourrais pas trop te le dire sans voir ton code.
Faut juste se dire que le validateur de W3C est un simple visiteur sans session ni cookies, et suivant le but de ton code tu pourrais ne pas tenir de ça, mettre une de ces infos dans ta requete qui donc n'aboutirrais pas.
Mais bon, c'est qu'une supposition et ça pourrais venir d'énormément d'autres choses.

En fait, on aurais juste besoin de la requête qui précède le mysql_fetch_rows() pour t'aider Smiley cligne + quelques éventuelles explications.

Mais en fait, le plus simple serais que tu affiches les mysql_error() après tes requêtes (au moins celle-là), et là le validateur W3C pour qui la requête bug t'affichera l'erreur renvoyée par MySQL (ce qui sera beaucoup moins inspide que le warning sur le mysql_fetch_row()
Je vais pas t'infliger le code avant d'avoir logé quelques mysql_error, comme tu conseilles.

Je ferai plus tard, je suis sur autre chose.

Autrement, j'utilise à la fois un cookie (mais facultatif) et des variables de session, c'est peut-être là d'où vient l'hisoire.

Si ça t'amuse, tu peux voir le site (prototype non débuggué).
www.pharmalien.com

Tu cliques sur "Consulter Transaction" et tu tombes sur le formulaire non valide.

MERCI de ton aide, je te tiens au courant.
Tu peux enregistrer ta page avec ton navigateur et soumettre le fichier au validateur du W3C en utilisant le lien "validate local file".
Oui, j'y ai pensé.

Ou je peux faire un copier-coller de la source du navigateur, l'enregistrer en .html et soumettre. Je suis presque sûr que ça va passer.

Il y a ce petit morceau de code :


$nombre = "SELECT COUNT(cat) FROM annv WHERE $requete";
$nombre = mysql_query ($nombre, $connexion);
$nombre = mysql_fetch_row ($nombre);
$nombre = $nombre[0];


Le navigateur trouve le bon nombre, mais le validateur W3C trouve toujours 0, ce qui est bizarre. J'ai essayé de diversifier les noms de variables ($nombre1, $nombre2, etc.) mais le bug reste là.

Sur un autre script valide pour BBedit, le debugueur W3C coupe la source au milieu du Doctype, alros que le Doctype est le même pour d'autres pages qu'il trouve valide.
Je veux bien croire que c'est un bug qui vient de chez moi, ou du serveur, mais vicieux...

MERCI de votre aide. Smiley cligne
Voilà, je viens de faire le test :

Je lance le script avec le navigateur, je fais un copier-coller de la source, je crée un fichier .html, je soumets au validateur W3C, et la page est valide !!!

Si je soumets directement la même page, message d'erreur PHP dans la source W3C, et un paquet d'erreurs vu qu'il ne voit pas le Doctype.

Pensez-vous que le validateur W3C a des problèmes avec PHP ? Ou mon hébergeur ?

Bizarre... Smiley eek
Vu que PHP génère une page différente à chaque fois, et que ce n'est qu'avec le validateur de W3C qu'il y a un problème, valider la page HTML que t'a généré PHP ne sert à rien Smiley cligne
Au fait : http://validator.w3.org/check?uri=http%3A%2F%2Fwww.pharmalien.com%2Ffun.php%3Faction%3Dcnanv
Si tu parle bien de cette page, "This Page Is Valid HTML 4.01 Strict!"

Sinon c'est sûr, le validateur W3C n'a pas de problème avec le PHP vu que c'est un simple visiteur (accès au code HTML généré par PHP seulement)

Et ta requête m'a l'air correcte...
Si tu fais
mysql_query (/* */) or die (mysql_error())
Ca t'affiche quoi exactement dans le validateur W3C ?
Et vu ta requête, rien ne correspond à une donnée variable selon le visiteur... A moins qu'il s'agisse de $requete
Merci de ton intérêt, je commente ta réponse très intéressante :


Vu que PHP génère une page différente à chaque fois, et que ce n'est qu'avec le validateur de W3C qu'il y a un problème, valider la page HTML que t'a généré PHP ne sert à rien

Réponse : ben, ça vérifie que code html est bien conforme, non ? En contournant le message d'erreur PHP, dont je commence à avoir une idée...

Au fait : http://validator.w3.org/check?uri=http%3A%2F%2Fwww.pharmalien.com%2Ffun.php%3Faction%3Dcnanv
Si tu parle bien de cette page, "This Page Is Valid HTML 4.01 Strict!"

Réponse : OUI, mais si tu lances une requête, tu actives le script funTraite.php, et c'est là où le validateur provoque le message d'erreur PHP, le code html n'ayant presque pas bougé par rapport à la page valide.

Sinon c'est sûr, le validateur W3C n'a pas de problème avec le PHP vu que c'est un simple visiteur (accès au code HTML généré par PHP seulement)

Réponse : bon, j'ai l'impression que le validateur exécute le script fun.traite "dans le vide", sans agir sur le submit qui transmet les variables POST. D'où le message d'erreur PHP qui ensuite fait flipper le validateur.
Il faut que je rajoute dans mon code quelques sécurités (if (isSet()) de façon à ne pas planter les requêtes à vide, j'en suis là dans ma réflexion...

Et ta requête m'a l'air correcte...

Réponse : OUI, le script marche, mais il faut des valeurs soient transmises, même vides d'ailleurs car les fonctions du script que tu ne voies pas (FunRequete, etc.) font ensuite le tri.

Si tu fais

mysql_query (/* */) or die (mysql_error())

Ca t'affiche quoi exactement dans le validateur W3C ?
Et vu ta requête, rien ne correspond à une donnée variable selon le visiteur... A moins qu'il s'agisse de $requete

Réponse : je crois que le premier problème est que $nombre (le nombre d'annonces correspondant à ta requête) n'est pas défini quand aucune valeur n'est transmise.
Je vais corriger dès que j'ai le temps.
Je te tiens au courant.

Encore MERCI. Smiley smile
Ok ben c'est presque bon Smiley lol
Tu as trouvé tout seul, il te suffis de mettre des empty() et ça sera bon Smiley smile
Quand on va directement sur la page funTraite.php ça affiche la même erreur.
Je m'en occupe au plus tôt, mais j'ai plein de trucs à faire, je te tiens au courant, MERCI.
Mon impression est la suivante:

Tu passes des paramêtres soit en Get ou Post à ta page mais quand tu appelles ta page avec le validateur, il ne passe pas c'est paramêtre à ta page donc il essai de faire ta requete avec des variables inexistantes.

J'espère que ça peut t'aider.
Oui, merci, c'est exactement ça, et j'espère régler le problème ce soir, si j'ai le temps Smiley confused , je vous tiens au courant...
Bon, voilà UNE solution, peut-être pas la meilleure mais la plus simple.

Au début de mon script funTraite.php, je vérifie une variable POST qui doit nécessairement être définie.
Si elle n'est pas définie, je renvoie vers le formulaire de base (fun.php), avec une variable GET qui enverra le bon message d'erreur.

Cela donne dans funTraite.php :


$cat = $_POST["cat"];
if (!isSet ($cat)) {header ("Location:/fun.php?action=erreur\n\n"); exit;}


et dans fun.php :


if ($action == 'erreur') {$context = "<tr><td colspan=\"3\"><h4 class=\"ro\">Désolé, votre requête a été exécutée à vide. Veuillez la recommencer.</h4></td></tr>";}


Vous pouvez voir le résultat : http://www.pharmalien.com/funTraite.php

Le validateur W3C est content, et, pour tester la vraie page créée par funTraite, je fais un copier-coller de la source html.

Bon, désolé d'avoir pollué ce forum avec une question PHP et pas CSS, à très bientôt pour d'autres question purement CSS, MERCI de votre aide. Smiley biggrin
Un détail; j'utilise checky (http://checky.mozdev.org/) qui permet de valider selon une foule de validateur divers (dont les principaux, css et xhtml) avec un menu contextuel. Rien de flagrant même si pratique, par contre on peut aussi le faire en local, il enregistre automatiquement la page en temporaire et la valide. Pratique lors de script avec des sessions etc.
Merci de l'info.

Personnellement, j''utilise d'abord Icab, navigateur MacIntosh équipé d'un petit débugueur qui trouve les grosses erreurs, puis BBedit, assez puissant, enfin le W3C pour le tampon définitif.

J'irai voir checky.