Erreur de type Warning: mysql_fetch_array()

Erreur de type Warning: mysql_fetch_array() - PHP - Programmation

Marsh Posté le 20-03-2009 à 08:01:49    

Bonjour à tous,
 
J'ai récupéré sur le net un script lequel permet d'utiliser des listes déroulantes dépendantes J'essaie de l'adapter mais il donne l'erreur suivante : Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-8\www\site mffe arradon. portable\php\_adetsuite.php on line 59.
 
J'utilise en réalité 2 fichiers nommés _adet.php et _adetsuite.php et c'est donc dans le second que se produit l'erreur. En voici les contenus en commençant par le premier _adet.php
 

Code :
  1. <?php
  2. include("_adetsuite.php" );
  3. ?>
  4. <HTML>
  5. <HEAD>
  6. <META NAME="Author" LANG="fr" CONTENT="Denis Blomme">
  7. <script language="javascript">
  8. <!-- Début
  9. if (window.screen)
  10. {
  11. if (screen.width<800) css="../feuille640.css";
  12. else if (screen.width<1024) css="../feuille800.css";
  13. else css="../feuille1024.css";}
  14. document.writeln('<link rel="stylesheet" href="'+css+'" type="text/css">');
  15. // End -->
  16. </script>
  17. <SCRIPT language="JavaScript">
  18. var nblist=<?php echo $nblist;?>; // Nombre de listes dépendantes
  19. // Mise à jour des listes via XMLHttpRequest
  20. function liste(f,q) {
  21.    document.frm.id_select.value="";
  22.    chp=""; // concatener les options
  23.    for(i=0;i<q;i++){
  24.       sel=f.elements["list"+i];
  25.       ind=sel.selectedIndex;
  26.       chp=chp+sel.options[ind].value+"/";
  27.    }
  28.    var l1 = f.elements["list"+(q-1)]; // La liste père
  29.    var l2 = f.elements["list"+q]; // La liste à mettre à jour
  30.    var index = l1.selectedIndex; // Index de la liste
  31. // Remise à zéro des listes suivantes
  32.    for(i=q;i<=nblist;i++) f.elements["list"+i].options.length = 0;
  33. // Si une option est sélectionnée, alors, il faut y aller ;)
  34.    if(index > 0) {
  35.    var xhr_object = null;
  36.    if(window.XMLHttpRequest) // Si Firefox
  37.       xhr_object = new XMLHttpRequest();
  38.    else if(window.ActiveXObject) // Si Internet Explorer
  39.       xhr_object = new ActiveXObject("Microsoft.XMLHTTP" );
  40.    else { // XMLHttpRequest non supporté par le navigateur
  41.       alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..." );
  42.       return;
  43.    }
  44. // On passe en GET le numéro du select à mettre à jour
  45.    xhr_object.open("POST", "_adetsuite.php?q="+q, true);
  46.    xhr_object.onreadystatechange = function() {
  47.    if(xhr_object.readyState == 4)
  48.       eval(xhr_object.responseText);
  49.    }
  50.    xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded" );
  51. // Les données sont préparées dans data avec :
  52. // - champ  : contient la value de l'option sélectionnée
  53. // - form   : contient le nom du formulaire
  54. // - select : contient le nom du select (les appeler tous listX où x va de 0 à n)
  55.    var data = "champ="+chp+"&form="+f.name+"&select=list"+q;
  56.    xhr_object.send(data);
  57.    }
  58. }
  59. </SCRIPT>
  60. <STYLE TYPE="text/css">
  61.    td,select,input { font:normal 8pt Verdana }
  62. </STYLE>
  63. </HEAD><BODY>
  64. <table><tr><td><fieldset>
  65. <legend>Sélectionnez&nbsp;</legend>
  66. <table><form name="frm" id="frm" method="POST">
  67. <tr>
  68.    <td align="right">Famille&nbsp;:</td>
  69.    <td><select style="width:200px" name="list0" id="list0" onchange="liste(this.form,1)">
  70.    <option value="">== Choisir ==</option>
  71.    <?php echo $liste_dpt;?>
  72.    <option value="*">== Tout ==</option>
  73.    </select></td>
  74. </tr><tr>
  75.    <td align="right">Genre&nbsp;:</td>
  76.    <td><select style="width:200px" name="list1" id="list1" onchange="liste(this.form,2)">
  77.    </select></td>
  78. </tr><tr>
  79.    <td align="right">French&nbsp;:</td>
  80.    <td><select style="width:200px" name="list2" id="list2" onchange="liste(this.form,3)">
  81.    </select></td>
  82. </tr><tr>
  83.    <td align="right">Adresse&nbsp;:</td>
  84.    <td><select style="width:200px" name="list3" id="list3" onChange="document.frm.id_select.value=this.value;">
  85.    </select></td>
  86. </tr><tr>
  87.    <td align="right">Identifiant&nbsp;:</td>
  88.    <td align="left"><input type="text" name="id_select" size="5" readonly="readonly"/>
  89.       &nbsp;&nbsp;&nbsp;<input type="submit" value="Envoyer"/></td>
  90. </tr>
  91. </form></table>
  92. </fieldset></td></tr></table>
  93. </BODY></HTML>


 
puis le second :

Code :
  1. <?php
  2. $nblist=3; // Nombre de listes dépendantes
  3. // Connexion à la base MySQL
  4. //@mysql_connect("localhost","root","" );
  5. //@mysql_select_db("plant" ); // Pays Régions Départements
  6. //@mysql_select_db("prd" ); // Pays Régions Départements
  7. // Inclusion du fichier de connexion à la base de données
  8. include "mysql_conf.inc.php";
  9. $link=mysql_connect($host,$login,$password) or die ('Erreur :'.mysql_error() );
  10. $base = mysql_select_db("plant" );
  11. $q=@$_GET["q"]; // "q" est le numéro du select à mettre à jour
  12. $f=@$_POST["form"]; // Le nom du formulaire
  13. $s=@$_POST["select"]; // Le nom du select
  14. $ids=@$_POST["champ"]; // L'identifiant a rechercher
  15. $id=explode("/",$ids."////" );
  16. //$chp=array("id_pays","id_region","id_dept" ); // Les noms des champs
  17. $chp=array("idPlant","idPlant","idPlant" ); // Les noms des champs
  18. //$chp=array("family","genre","french" ); // Les noms des champs
  19. // Creer le WHERE avec les identifiants
  20. $w=" WHERE 1=1";
  21. for($i=0;$i<sizeof($id);$i++){
  22.    if(($id[$i]!="" )&&($id[$i]!="*" )){
  23.       $w=$w." AND ".$chp[$i]."=".$id[$i];
  24.    }
  25. }
  26. switch($q) {
  27. // Il faut, pour toutes les requêtes, prendre dans l'ordre les champs identifiant, libellé où identifiant est numérique auto-incrémenté
  28.    case "1": // Liste des régions
  29.       $query = "SELECT idPlant,genre FROM plant".$w." ORDER BY genre";
  30. //      $query = "SELECT id_region,lib_region FROM regions".$w." ORDER BY lib_region";
  31.    case "2": // Liste des départements
  32.       if(!@$query) $query = "SELECT idPlant,french FROM plant".$w." ORDER BY french";
  33. //      if(!@$query) $query = "SELECT id_dept,lib_dept FROM departements".$w." ORDER BY lib_dept";
  34.    case "3": // Liste des villes
  35.       if(!@$query) $query = "SELECT idPlant,adresse FROM plant".$w." ORDER BY adresse";
  36. //      if(!@$query) $query = "SELECT id_ville,lib_ville FROM localites".$w." ORDER BY lib_ville";
  37. // On pourrait ajouter "à l'infini" d'autres tests ;)
  38. // On écrit du code JavaScript qui sera évalué et donc traité au retour
  39.    echo 'var o = null;'; // Création de l'objet "s" : la liste du formulaire à mettre à jour
  40.    echo 'var s = document.forms["'.$f.'"].elements["'.$s.'"];';  // On la vide en mettant sa taille à zéro
  41.    echo 's.options.length = 0;'; // On ajoute une première option à cette liste
  42.    echo 's.options[s.options.length] = new Option("== Choisir ==","" );'; // On ajoute les options trouvées dans le recordset
  43.    $result = @mysql_query($query);
  44.    while($r = mysql_fetch_array($result))
  45.       echo 's.options[s.options.length] = new Option("'.utf8_encode($r[1]).'","'.utf8_encode($r[0]).'" );';
  46.    // Dernière option du select si pas le dernier
  47.    if($q<$nblist){echo 's.options[s.options.length] = new Option("== Tout ==","*" );';}
  48.    break;
  49. //  Si q n'est ni 1, ni 2, ni 3, il faut préparer le 0 ;)
  50.    default: // Liste des pays
  51.    $liste_dpt = "";
  52.    $SQL = "SELECT idPlant,family FROM plant ORDER BY family";
  53. //   $SQL = "SELECT id_pays,lib_pays FROM pays ORDER BY lib_pays";
  54.    $res = mysql_query($SQL);
  55.    while($val = mysql_fetch_array($res))
  56.    $liste_dpt .= "<option value=\"".$val[0]."\">".$val[1]."</option>\n";
  57.    }
  58. @mysql_close();
  59. ?>


J'avoue ne pas trouver le pourquoi et me tourne vers vos lumières en vous remerciant d'avance.
tete278
 


Message édité par tete278 le 20-03-2009 à 08:03:19
Reply

Marsh Posté le 20-03-2009 à 08:01:49   

Reply

Marsh Posté le 20-03-2009 à 13:27:09    

[:sh@rdar]

FlorentG a écrit :

B] Faq technique: le langage, les erreurs classiques, les remèdes
 
    I)  Headers already sent
    II)  Parse error in... leFichierPhp.php on line xxx
    III) Warning: mysql_fetch_xxx(): supplied argument is not a valid MySQL result resource in...  leFichierPhp.php on line xxx
    IV)  Mon code s'affiche dans le navigateur au lieu d'etre interpreté


Reply

Marsh Posté le 20-03-2009 à 15:02:55    

Message reçu, j'espère avoir compris .... J'ai ajouté devant la ligne 59 en question la ligne suivante :

Code :
  1. echo mysql_errno($res) . ": " . mysql_error($res). "\n"; // ligne ajoutée


 
J'ai maintenant le message d'erreur  
Warning: mysql_errno(): supplied argument is not a valid MySQL-Link resource in ......._adetsuite.php on line 59
 
Warning: mysql_error(): supplied argument is not a valid MySQL-Link resource in ......._adetsuite.php on line 59
:  
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ........._adetsuite.php on line 60
 
Peut-être me suis-je trompé de fonction ?
 
Merci
tete278

Reply

Marsh Posté le 20-03-2009 à 15:29:34    

En fait, tu utilises bien les bonnes fonctions.
Mais l'argument que tu leur donnes - $res - n'est pas valide (ce qui explique, soit dit en passant, ton message de départ)...
Heureusement, tu n'es pas obligé de passer un argument :

Code :
  1. // Afficher le contenu de la requête
  2. echo "Contenu de la requête = ".$SQL."<br />";
  3. // Afficher le message d'erreur
  4. echo mysql_errno() . ": " . mysql_error();


Si tu ne vois pas d'errreur manifeste, tu peux toujours tester la requête sous PHPMyAdmin (ou n'importe quelle autre interface), histoire de voir ce qu'lle retourne.
 
Et n'hésite pas à poster le résultat des echo !

Reply

Marsh Posté le 20-03-2009 à 17:05:34    

Merci encore macgawel,
 
J'ai modifié le nom de la base qui était erroné et fait ta modification. J'obtiens maintenant ceci :
Contenu de la requête = SELECT idPlant,family FROM plant ORDER BY family
0:  
 
J'en déduis que tout est rentré dans l'ordre mais néanmoins j'ai le petit soucis suivant :
Le contenu de ma première liste déroulante est complet mais par contre celui de la seconde liste n'est que partiel en n'affichant qu'un seul genre correspondant à la famille sélectionnée dans la première liste alors que plusieurs genres devraient apparaître (une famille regroupe plusieurs genres ....)
 
Me suis-je exprimé de façon claire ?
 
tete278


Message édité par tete278 le 20-03-2009 à 17:11:14
Reply

Marsh Posté le 20-07-2011 à 15:35:20    

Si tu m'avais demandé, à l'époque, je t'aurais aidé puisque c'est moi qui ai pondu ce tuto sur asp-php.net ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed