Auteur Sujet: Recherche Dans Une Ligne De Tableau...  (Lu 5405 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne sayoc

  • Débutant
  • *
  • Messages: 40
Recherche Dans Une Ligne De Tableau...
« le: 06 juillet 2004 à 17:23:21 »
Bonjour,

question1:[/u]
Je cherche à touver le moyen pour afficher le contenu d'une ligne d'un tableau (d'une table sql), en
fonction de la valeur de la variable $rechercher qui correspond à un nom d'objet (carte à jouer) saisi à la main dans un champ input text du formulaire, lequel est testé si il existe dans la base.

Malheureusement j'ai une erreur du type:
Warning: mysql_fetch_row(): 3 is not a valid MySQL result resource in /home/kriss/public_html/sitecartes/script/recherche5.php on line 74

Je na comprend pas d'où cela peut venir.. pourriez vous m'éclairer ?

Citer
<?php

//Connection à la base et à la table----------------------------------------------
//°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

   $link = mysql_pconnect("localhost", "root", "")
        or die("Impossible de se connecter : " . mysql_error());

     if(!$link){
             echo "Connexion au serveur impossible.&nbsp";
          }else{
             echo "Connexion au serveur r&eacute;ussie.";
    echo "<br>";
          }

   $db = mysql_select_db('cartes', $link);
  if (!$db){
     die ("Impossible d\'utiliser la base : " . mysql_error());
  }else{
     echo "Connexion &agrave; la base r&eacute;ussi ! &nbsp";
  }

//----------------------------------------------------------------------------------------
//°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

   if(isset($_POST['VALIDER'])){


  $rechercher = $_POST['RECHERCHER'];
  $VO = $_POST['VO'];
  $VF = $_POST['VF'];


  $requete = ("SELECT NomCarteVO FROM Produit")
  or die ("recherche impossible" . mysql_error());

  $NomVO = mysql_query($requete);


    if (empty($rechercher)) {
       echo "<p>";
       echo "vous devez saisir un nom de carte avant de valider !";
       echo "</p>";
    }else if (!empty($rechercher)) {
       while ($row=mysql_fetch_row($NomVO)) {
      for ($i=0;$i<count($row);$i++){
         if ($row = mysql_fetch_assoc($NomVO)) {
        //for ($i=0;$i<count($row);$i++){

                   echo $elts["idProduit"];
                   echo $elts["TypeJeu"];
                   echo $elts["ExtensionVO"];

        mysql_free_result($NomVO);

        //}
         }
      echo $row[$i];
      }

           }
          }
          //echo $rechercher;
   }

   echo "<center>";
   echo "<form action='$PHP_SELF' method='POST'>";
  echo "<table>";
  echo "<tr>";
     echo "<td width='80'>Rechercher</td>";
     echo "<td width='160'><input type='text' name='RECHERCHER' size='0' maxlength='30' value=''></td>";
     echo "<td width='81'>VO<input type='checkbox' name='VO' value='VO' checked '$VO'>VF<input type='checkbox' name='VF' value='VF' '$VF'>";
  echo "</tr>";
  echo "<tr>";
     echo "<td colspan='3' align='center'><input name='VALIDER' value='CHERCHER' type='submit'></td>";
  echo "</tr>";
  echo "<tr>";
     echo "<td colspan='3'>";

     echo "</td>";
  echo "</tr>";
  echo "</table>";
   echo "</form>";
   echo "</center>";
   ?>

question2:[/u]
Quelqu'un serait m'expliquer en detail la procedure à suivre pour utiliser la fonction "mysql_fetch_assoc" et me dire si c'est une bonne idée d'utiliser cette fonction pour ce que je veux faire ?

Merci beaucoup !
« Modifié: 06 juillet 2004 à 17:47:14 par sayoc »

Hors ligne Ice

  • VIP
  • *****
  • Messages: 2 403
    • ATFX
Recherche Dans Une Ligne De Tableau...
« Réponse #1 le: 06 juillet 2004 à 18:53:29 »
 $requete = ("SELECT NomCarteVO FROM Produit")
  or die ("recherche impossible" . mysql_error());
Faux

$requete te renvoie dans ce cas là un booléen.
donc, il faut :
 $requete = "SELECT NomCarteVO FROM Produit";
« Modifié: 06 juillet 2004 à 18:54:06 par Ice »

Hors ligne Penelope

  • Habitué
  • **
  • Messages: 212
    • http://
Recherche Dans Une Ligne De Tableau...
« Réponse #2 le: 07 juillet 2004 à 10:33:30 »
Bien vu Ice.

Je suppose que le die n'est pas sur la bonne ligne

Remplacer :
 $requete = ("SELECT NomCarteVO FROM Produit")
  or die ("recherche impossible" . mysql_error());

  $NomVO = mysql_query($requete);
Par :
 $requete = ("SELECT NomCarteVO FROM Produit")

  $NomVO = mysql_query($requete) or die ("recherche impossible" . mysql_error());


La fonction mysql_fetch_assoc lit une ligne de résultats dans un tableau associatif.
Ca permets de mettre en tableau (array) une ligne du résultat de ta requête.

Sayoc, je crois que tu t'es mélangé les pinceaux dans ton code.
Je te conseilles de lire cette aide très bien faite.
Par exemple, pour exécuter ta requete et afficher le contenu de ton jeu de résultat:
  $result = mysql_query($requete );

    if (!$result) {
        echo "Impossible d'exécuter la requête ($requete) " . mysql_error();
        exit;
    }
    
    if (mysql_num_rows($result) == 0) {
        echo "Aucune ligne trouvées, rien à afficher.";
        exit;
    }

    // Tant qu'une ligne existe, place cette ligne dans la variable $tableau
    // sous la forme d'un tableau associatif.
    while ($tableau= mysql_fetch_assoc($result)) {
        echo $tableau["NomCarteVO "];
    }
        
    mysql_free_result($result);


Maintenant, si tu veux rechercher une seule carte dans ta base, il faut ajouter une clause WHERE à ta requête.
J'ai l'impression aussi que tu as mélangé les noms de variables. Par exemple : $VO et $NomVO,  $row et $elts.


Est-ce que tu ne cherche pas plutot à faire ça :

$NomVO = $_POST['VO'];

$requete = "SELECT idProduit,TypeJeu,ExtensionVO,NomCarteVO ";
$requete .= "FROM Produit WHERE NomCarteVO='".$NomVO ."' ";

Dans ce cas, il faudrait contrôler le contenu de $NomVO avant de l'utiliser dans la requête pour éviter ce genre de  
trou de sécurité
[color=ff9999]Cordialement, Penelope [/color]

Hors ligne NaJ

  • Connaisseur
  • ***
  • Messages: 354
    • http://photo.pyrollo.com
Recherche Dans Une Ligne De Tableau...
« Réponse #3 le: 07 juillet 2004 à 10:34:30 »
Citer
 $requete = ("SELECT NomCarteVO FROM Produit")
  or die ("recherche impossible" . mysql_error());
Faux

$requete te renvoie dans ce cas là un booléen.
donc, il faut :
 $requete = "SELECT NomCarteVO FROM Produit";
Je dirais même plus, le
or die ("recherche impossible" . mysql_error());
devrait être placé là :
$NomVO = mysql_query($requete) or die ("recherche impossible" . mysql_error());Ensuite, il me semble qu'il y a un paquet de problèmes dans le reste du code :

- La variable $elts est utilisée sans qu'aucune valeur ne lui ait été assignée.

- Tu semble faire référence à des colonnes que tu ne ramène pas dans le select.

- Si tu ne veux sélectionner des réponses correspondant à un critère (entré par exemple dans le formulaire), ajoute une clause where plutôt que de tout ramener pour effectuer la recherche toi même. En effet, c'est le rôle de la base de données.
 
www.traque-aux-plaques.com

Collection de photos de plaques et regards de chaussée

http://photo.pyrollo.com

Photos de balades

Hors ligne sayoc

  • Débutant
  • *
  • Messages: 40
Recherche Dans Une Ligne De Tableau...
« Réponse #4 le: 07 juillet 2004 à 12:26:48 »
Avant tou, merci à tous pour votre aide :)

j'ai modifié mon code comme ceci :

Citer
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>recherche</title>
<style type="text/css"><!--
body {
   background-color: black;
   color: white;
   font-family: arial, helvetica, sans-serif;
}
button {
   border-style: groove;
   color: #928D8D;
}
table {
   border-color: white;
   border-style: dotted;
}
td {
   background-color: #928D8D;
   border-color: white;
   border-style: groove;
}

--></style></head>


<body>

<?php

//Connection à la base et à la table----------------------------------------------
//°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

   $link = mysql_connect("localhost", "root", "")
        or die("Impossible de se connecter : " . mysql_error());

     if(!$link){
             echo "Connexion au serveur impossible.&nbsp";
          }else{
             echo "Connexion au serveur r&eacute;ussie.";
    echo "<br>";
          }

   $db = mysql_select_db('cartes', $link);
  if (!$db){
     die ("Impossible d\'utiliser la base : " . mysql_error());
  }else{
     echo "Connexion &agrave; la base r&eacute;ussi ! &nbsp";
  }

//----------------------------------------------------------------------------------------
//°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

   if(isset($_POST['VALIDER'])){


  $rechercher = $_POST['RECHERCHER'];
  $VO = $_POST['VO'];
  $VF = $_POST['VF'];


  $requete = "SELECT NomCarteVO FROM Produit";

  $requete2 = "SELECT  TypeJeu, ExtensionVO, ExtensionVF, NomCarteVO, NomCarteVF,
  Carac1, Carac2, FrequenceExtension, TexteCarteVO, TexteCarteVF FROM Produit WHERE
  NomCarteVO = '$rechercher->NomCarteVO'";

  $NomVO = mysql_query($requete) or die ("recherche impossible" . mysql_error());
  $carte = mysql_query($requete2) or die ("recherche impossible" . mysql_error());


    if (empty($rechercher)) {
       echo "<p>";
       echo "vous devez saisir un nom de carte avant de valider !";
       echo "</p>";
    }

       while ($row=mysql_fetch_row($NomVO)) {
      for ($i=0;$i<count($row);$i++){
         //echo $row[$i];
        if (!empty($rechercher) && $row[$i] = $NomVO) {
           while ($tableau=mysql_fetch_assoc($carte)) {
          //for ($i=0;$i<count($row);$i++) {
             //echo $row[$i];
             echo $tableau['TypeJeu'];
             echo $tableau['ExtensionVo'];
             echo $tableau['ExtensionVF'];
             echo $tableau['NomCarteVO'];
             echo $tableau['NomCarteVF'];
             echo $tableau['Carac1'];
             echo $tableau['Carac2'];
             echo $tableau['FrequenceExtension'];
             echo $tableau['TexteCarteVO'];
             echo $tableau['TexteCarteVF'];


          //}
           }
           mysql_free_result($carte);
        }
      }
       }
   }
   echo "<center>";
   echo "<form action='$PHP_SELF' method='POST'>";
  echo "<table>";
  echo "<tr>";
     echo "<td width='80'>Rechercher</td>";
     echo "<td width='160'><input type='text' name='RECHERCHER' size='0' maxlength='30' value=''></td>";
     echo "<td width='81'>VO<input type='checkbox' name='VO' value='VO' checked '$VO'>VF<input type='checkbox' name='VF' value='VF' '$VF'>";
  echo "</tr>";
  echo "<tr>";
     echo "<td colspan='3' align='center'><input name='VALIDER' value='CHERCHER' type='submit'></td>";
  echo "</tr>";
  echo "<tr>";
     echo "<td colspan='3'>";

     echo "</td>";
  echo "</tr>";
  echo "</table>";
   echo "</form>";
   echo "</center>";
   ?>

Malheureusement, j'ai toujours cette erreur :
Warning: mysql_fetch_assoc(): 4 is not a valid MySQL result resource in /home/kriss/public_html/sitecartes/script/recherche5.php on line 84

Warning: mysql_free_result(): 4 is not a valid MySQL result resource in /home/kriss/public_html/sitecartes/script/recherche5.php on line 101

qui se répète apparemment autant de fois que la boucle while s'execute.

En ce qui concerne $VO, cette variable correspond à une case à cocher qui devra servir de critère de recherche supplémentaire, afin d'affiner la recherche, mais je ne l'utilise pas, car ceci est optionnel dans le cahier des charges du projet... et je n'en suis pas encore là étant donné les difficultés que j'éprouve à la création de ce script...

Hors ligne Ice

  • VIP
  • *****
  • Messages: 2 403
    • ATFX
Recherche Dans Une Ligne De Tableau...
« Réponse #5 le: 07 juillet 2004 à 13:08:45 »
Ta requete 2 ne doit pas être bonne.

Hors ligne NaJ

  • Connaisseur
  • ***
  • Messages: 354
    • http://photo.pyrollo.com
Recherche Dans Une Ligne De Tableau...
« Réponse #6 le: 07 juillet 2004 à 14:44:46 »
Il y a un truc que je ne comprends pas, c'est pourquoi y a-t'il deux requêtes ?

Il me semble qu'il ne devrait y en avoir une, celle qui ramène l'enregistrement désiré, non ?

"is not a valid MySQL result resource" signifie que tu as passé en paramètre quelque chose qui n'est pas un résultat valide. C'est normal puisque lors de la deuxième répétition de la boucle, $carte a été libéré par mysql_free_result, il ne correspond donc plus à un résultat de requête.
« Modifié: 07 juillet 2004 à 14:45:13 par NaJ »
www.traque-aux-plaques.com

Collection de photos de plaques et regards de chaussée

http://photo.pyrollo.com

Photos de balades

Hors ligne NaJ

  • Connaisseur
  • ***
  • Messages: 354
    • http://photo.pyrollo.com
Recherche Dans Une Ligne De Tableau...
« Réponse #7 le: 07 juillet 2004 à 14:50:27 »
Oups là, attention, une erreur classique :

if (!empty($rechercher) && $row[$i] = $NomVO)
En effet, $row[$i] = $NomVO affecte la valeur de $NomVO à $row[$i] et renvoie cette valeur. Je pense que tu voulais comparer, ce qui s'écrit :

if (!empty($rechercher) && $row[$i] == $NomVO)
Ton script est trop tordu, il devrait ressembler à ça :

- Connexion
- Elaboration et exécution de la requête (avec la bonne clause Where)
- Une boucle sur chacun des résultats effectuant l'affichage de chacun de ces résultats
- Déconnexion

Tu ne dois plus avoir besoin de vérifier que le résultat est le bon puisque la requête s'occupe de ça (clause Where).
 
www.traque-aux-plaques.com

Collection de photos de plaques et regards de chaussée

http://photo.pyrollo.com

Photos de balades

Hors ligne sayoc

  • Débutant
  • *
  • Messages: 40
Recherche Dans Une Ligne De Tableau...
« Réponse #8 le: 07 juillet 2004 à 16:14:13 »
... j'ai refais un cript en utilisant vos conseils, je vous en remerie grandement d'ailleur... ;)

maintenant je n'ai plus d'erreur, mais le moteur de recherche ne trouve rien  :P  :blink:

Le code se présente comme ceci :

Citer
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>recherche</title>
<style type="text/css"><!--
body {
   background-color: black;
   color: white;
   font-family: arial, helvetica, sans-serif;
}
button {
   border-style: groove;
   color: #928D8D;
}
table {
   border-color: white;
   border-style: dotted;
}
td {
   background-color: #928D8D;
   border-color: white;
   border-style: groove;
}

--></style></head>


<body>

<?php

//Connection à la base et à la table----------------------------------------------
//°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

   $link = mysql_connect("localhost", "root", "")
        or die("Impossible de se connecter : " . mysql_error());

     if(!$link){
             echo "Connexion au serveur impossible.&nbsp";
          }else{
             echo "Connexion au serveur r&eacute;ussie.";
    echo "<br>";
          }

   $db = mysql_select_db('cartes', $link);
  if (!$db){
     die ("Impossible d\'utiliser la base : " . mysql_error());
  }else{
     echo "Connexion &agrave; la base r&eacute;ussi ! &nbsp";
  }

//----------------------------------------------------------------------------------------
//°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

   if(isset($_POST['VALIDER'])){


  $rechercher = $_POST['RECHERCHER'];
  $VO = $_POST['VO'];
  $VF = $_POST['VF'];


  $requete = "SELECT NomCarteVO FROM Produit";

  $requete2 = "SELECT  TypeJeu, ExtensionVO, ExtensionVF, NomCarteVO, NomCarteVF,
  Carac1, Carac2, FrequenceExtension, TexteCarteVO, TexteCarteVF FROM Produit WHERE
  '$NomVO' = '$rechercher->NomCarteVO'";

  $NomVO = mysql_query($requete) or die ("recherche impossible" . mysql_error());
  $carte = mysql_query($requete2) or die ("recherche impossible" . mysql_error());


       if (empty($rechercher)) {
      echo "<p>";
      echo "vous devez saisir un nom de carte avant de valider !";
      echo "</p>";
       }

       if (!$NomVO) {
      echo "Impossible d'executer la requete . $requete" . mysql_error();
      exit;
       }
       if (!$carte) {
      echo "Impossible d'executer la requete . $requete2" . mysql_error();
      exit;
       }

       if (mysql_num_rows($carte) == 0) {
            echo "Aucune ligne trouvées, rien à afficher.";
            exit;
         }
       if (!empty($rechercher) && $NomVO == $rechercher && $carte['NomCarteVO'] == $NomVO) {

            while ($tableau= mysql_fetch_assoc($carte)) {
                echo $tableau['NomCarteVO '];
         echo $tableau['NomCarteVF'];
          echo $tableau['TypeJeu'];
             echo $tableau['ExtensionVO'];
         echo $tableau['ExtensionVF'];
         echo $tableau['Carac1'];
         echo $tableau['Carac2'];
         echo $tableau['FrequenceExtension'];
         echo $tableau['TexteCarteVO'];
         echo $tableau['TexteCarteVF'];

            }
             }
           mysql_free_result($carte);
   }
   echo "<center>";
   echo "<form action='$PHP_SELF' method='POST'>";
  echo "<table>";
  echo "<tr>";
     echo "<td width='80'>Rechercher</td>";
     echo "<td width='160'><input type='text' name='RECHERCHER' size='0' maxlength='30' value=''></td>";
     echo "<td width='81'>VO<input type='checkbox' name='VO' value='VO' checked '$VO'>VF<input type='checkbox' name='VF' value='VF' '$VF'>";
  echo "</tr>";
  echo "<tr>";
     echo "<td colspan='3' align='center'><input name='VALIDER' value='CHERCHER' type='submit'></td>";
  echo "</tr>";
  echo "<tr>";
     echo "<td colspan='3'>";

     echo "</td>";
  echo "</tr>";
  echo "</table>";
   echo "</form>";
   echo "</center>";
   ?>

évidemment je ne parcours plus le tableau avec une boucle du type :
while ($row = mysql_fetch_row($NomVO)) {
            for ($i=0;$i<count($row);$i++) {

mais si j'ajoute ce type de boucle avant de chercher à afficher les résultats, j'ai cette erreur "Warning: mysql_num_rows(): 4 is not a valid MySQL result resource in /home/kriss/public_html/sitecartes/script/recherche7.php on line 89
Aucune ligne trouvées, rien à afficher."
et si dans : if (mysql_num_rows($carte) == 0) {
                      echo "Aucune ligne trouvées, rien à afficher.";
                      exit;
                 }
je remplace $carte par $NomVO, j'ai un beau : Warning: mysql_free_result(): 4 is not a valid MySQL result resource in /home/kriss/public_html/sitecartes/script/recherche7.php on line 111

Je ne comprend plus rien...  :(   :huh:  

Hors ligne NaJ

  • Connaisseur
  • ***
  • Messages: 354
    • http://photo.pyrollo.com
Recherche Dans Une Ligne De Tableau...
« Réponse #9 le: 07 juillet 2004 à 16:26:42 »
Je ne comprends toujours pas pourquoi il y a deux requêtes au lieu d'une seule. Quel est l'intérêt de la première requête ? Selon toi, que veux tu qu'elle ramène ?

Je pense qu'il faut repartir de zéro, avec une requête et une boucle.

 
www.traque-aux-plaques.com

Collection de photos de plaques et regards de chaussée

http://photo.pyrollo.com

Photos de balades

Hors ligne Ice

  • VIP
  • *****
  • Messages: 2 403
    • ATFX
Recherche Dans Une Ligne De Tableau...
« Réponse #10 le: 07 juillet 2004 à 16:37:54 »
De toute facon , ca ne peut pas aller :
  $requete2 = "SELECT  TypeJeu, ExtensionVO, ExtensionVF, NomCarteVO, NomCarteVF,
  Carac1, Carac2, FrequenceExtension, TexteCarteVO, TexteCarteVF FROM Produit WHERE
  '$NomVO' = '$rechercher->NomCarteVO'";

  $NomVO = mysql_query($requete) or die ("recherche impossible" . mysql_error());

Hors ligne sayoc

  • Débutant
  • *
  • Messages: 40
Recherche Dans Une Ligne De Tableau...
« Réponse #11 le: 07 juillet 2004 à 16:41:00 »
En fait la 1ere requete sert à selectionner le NomCarteVO de la table Produit, et la 2eme requete à sélectionner tout ce qui correspond au nom égal à ce qui à été saisi dans le moteur de recherche...
En fait au début je faisait une boucle qui parcourait le tableau jusqu'a ce qu'on se trouve dans NomCarteVO, pour ensuite tester si NomCarteVO correspond bien à ce qui à était saisi dans le moteur de recherche avec la 2eme requete...

Je vais essayer avec une seul requete, mais dans l'immédiat, je ne voit pas comment...

Hors ligne sayoc

  • Débutant
  • *
  • Messages: 40
Recherche Dans Une Ligne De Tableau...
« Réponse #12 le: 07 juillet 2004 à 16:42:19 »
Je ne voit pas ce que tu veux dire Ice...?

Hors ligne sayoc

  • Débutant
  • *
  • Messages: 40
Recherche Dans Une Ligne De Tableau...
« Réponse #13 le: 07 juillet 2004 à 16:45:54 »
J'ai modifier la requete comme ceci :
Citer
$requete2 = "SELECT  TypeJeu, ExtensionVO, ExtensionVF, NomCarteVO, NomCarteVF,
  Carac1, Carac2, FrequenceExtension, TexteCarteVO, TexteCarteVF FROM Produit WHERE
  '$NomVO' = '$rechercher'";
Mais ca ne change rien...

Hors ligne NaJ

  • Connaisseur
  • ***
  • Messages: 354
    • http://photo.pyrollo.com
Recherche Dans Une Ligne De Tableau...
« Réponse #14 le: 07 juillet 2004 à 17:13:28 »
Citer
En fait la 1ere requete sert à selectionner le NomCarteVO de la table Produit, et la 2eme requete à sélectionner tout ce qui correspond au nom égal à ce qui à été saisi dans le moteur de recherche...
Bien, ta première requête ne sert à rien puisque la deuxième selectionne aussi le NomCarteVO.

A part afficher ce qui correspond au critère de recherche, tu veux quoi d'autre ?
www.traque-aux-plaques.com

Collection de photos de plaques et regards de chaussée

http://photo.pyrollo.com

Photos de balades