Bonjour à tous,

Depuis quelques jours, je m'efforce ce corriger mon code pour le rendre valide. Pour cela j'utilise avec bonheur le site
http://www.validome.org Il est en français et donne les mêmes résultat pour l'instant que le W3C.

Mais je me heurte à un problème et j'aimerais avoir vos idées sur le sujet.

Lorsque j'affiche mon site avec le navigateur, il n'y a pas de problème de visu et lorsque je regarde le code, j'ai ceci :
<div id="menugeneral">
<h4>Contact Resine</h4>
<ul>
 <li><a href="indexcr.php?page=accueil">Bienvenue</a></li>
 <li><a href="indexcr.php?page=catalogue>Catalogue</a></li>
......


Mais ensuite quand je passe par la validation, il m'indique une erreur et si je lui demande le code, j'ai ceci :
<div id="menugeneral"> 
<h4>1</h4>   <ul> 
   <br /> 
<b>Warning</b>:  mysql_fetch_array(): supplied argument is not a valid MySQL result resource in <b>
/home/contactr/www/inc/menudroite.php</b> on line <b>22</b><br /> 
   </ul> 
   <h4>2</h4>   <ul>

Tout ceci venant d'une requete Mysql

Comrpenez vous pourquoi ces deux codes sont différents ?
J'arrive pas trop à me l'expliquer

Merci d'avance

JP
Modifié par tibrus (14 Oct 2005 - 17:51)
Il faudrait qu'on connaisse le code PHP autour de cette fameuse requête MySQL. Et une URL aussi tiens, ça ne fait jamais de mal.
Puisque c'est demandé si gentiellement: Smiley cligne

Donc le lien : http://www.contact-resine.com

Et le code enfin le début

$cr_where = $cr_langue.'titre=\''.$donnees[$cr_langue].'\'';
/* Calcul du nombre de liens par menu */
$retour1 = mysql_query("SELECT * FROM cr_menuliens WHERE 
$cr_where ORDER BY position");
    while ($donnees1 = mysql_fetch_array($retour1))
    {
    if ($donnees1['valider'] == 'oui')
      {echo '<li><a href="'.$donnees1['liens'].'">'.$donnees1[$cr_langue].'</a></li>';} 
    if ($donnees1['sousmenu'] == 'oui')


Cela correspond à l'affichage du menu surla droite. C'est le début mais c'est déjà la que se trouve le problème

JP
Comment est initialisée la variable $cr_langue ? Avec l'en-tête HTTP Accept-Language ?

<supposition> Accept-Language n'est pas envoyée par le validateur, et comme tu n'as pas prévu de langue de fallback, $cr_langue est vide, la requête ne retourne rien et donc mysql_fetch_array() plante. Pour y remédier prévois une langue de secours ou fais un test de non-nullité sur $retour1 avant ton while de la ligne 22 </supposition>
Alors merci pour cette info et le problème est résolu.
Tout venait de la détection de la langue.

/* Test pour la langue */
if (isset($_COOKIE['langue']))  /* le cookie existe-t-il ? */
  { $cr_langue = $_COOKIE['langue']; }  /* Oui, on récup lg du cookie */
else
  {
  if (isset($_SESSION['langue']))   /* Non, la var de session existe ? */
    {$cr_langue = $_SESSION['langue']; }  /* Oui, récup var session */
  else
    { 
    if (substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2) == '')
      {$cr_langue = $cr_langue_defaut;}
    else
      {$cr_langue = substr($_SERVER ['HTTP_ACCEPT_LANGUAGE'],0,2); /* Non, on récup lg du nav */
       $_SESSION['langue'] = $cr_langue;}  
      }
  }

Effectivement, Validome n'est pas un navigateur donc ma variable n'avait jamais de valeur. J'ai réglé cela en testant la valeur de la langue du navigateur qui si elle est nulle me fait dire que c'est autre chose qu'un navigateur qui accède au site

Encore merci de cette piste djfeat

JP