PHPNET Assistance

Support et Entraide PHPNET => Forum de programmation => Discussion démarrée par: sayoc le 06 juillet 2004 à 17:23:21

Titre: Recherche Dans Une Ligne De Tableau...
Posté par: sayoc 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 !
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: Ice 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";
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: Penelope 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 (http://www.nexen.net/docs/php/annotee/function.mysql-fetch-assoc.php).
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é (http://www.manuelphp.com/php/security.database.sql-injection.php)
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: NaJ 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.
 
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: sayoc 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...
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: Ice le 07 juillet 2004 à 13:08:45
Ta requete 2 ne doit pas être bonne.
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: NaJ 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.
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: NaJ 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).
 
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: sayoc 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:  
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: NaJ 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.

 
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: Ice 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());
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: sayoc 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...
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: sayoc le 07 juillet 2004 à 16:42:19
Je ne voit pas ce que tu veux dire Ice...?
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: sayoc 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...
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: NaJ 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 ?
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: NaJ le 07 juillet 2004 à 17:14:36
Le problème avec $requete2, c'est que quand tu définis $requete2, la variable $NomCarteVO ne contient rien. Fait un "echo $requete2" juste après le "$requete2 =" et tu comprendras.
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: sayoc le 07 juillet 2004 à 17:57:36
Si j'utilise uniquement la 2eme requete, ca ne donne rien, car ls variable dans la requete ne sont pas définient...

je veux juste faire afficher les données de la ligne de la table où se trouve le nom de la carte correspondante...

Si le nom saisi dans le moteur de rechere = un nom existant dans la table, alors on affiche les critères correspondant à ce nom...

C'est pour un site de carte à jjouer Magic marvel etc... un nom de carte correspond à un type de jeu, une carctéristiqye1 (couleur), une caractéristique2, une extension, en francais, en anglais, etc....
Je veux donc afficher tout ca selon le nom de la carte saisi...
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: NaJ le 07 juillet 2004 à 18:11:17
Alors je te confirme ce que je disais plus haut, ton script ne doit comporter qu'une seule requête, dans laquelle il y a une clause where du style "where monchamp = $mavaleurrecherchee".
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: sayoc le 07 juillet 2004 à 18:34:34
ok...
Donc d'après le script, ce que tu appels $mavaleurchercher correspond à $rechercher qui est égal à $_POST['RECHERCHER']

C'est ce que j'avais fait au tout debut, mais au debut $rechercher est vide... donc ca ne fonctionnait pas...
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: sayoc le 07 juillet 2004 à 18:56:20
J'ai reremodifier le script de cette manière, avec une seule requete :
 
Citer
if(isset($_POST['VALIDER'])){


  $rechercher = $_POST['RECHERCHER'];


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

  $carte = mysql_query("SELECT TypeJeu, ExtensionVO, ExtensionVF, NomCarteVO, NomCarteVF,
       Carac1, Carac2, FrequenceExtension, TexteCarteVO, TexteCarteVF FROM Produit WHERE
       NomCarteVO = '$rechercher'") or die ("Selection impossible" . mysql_error());


    while ($row = mysql_fetch_row($carte)) {
       for ($i=0;$i<count($row);$i++) {
       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);

       }
       }
    }
}

J'ai une erreur maintenant bien connu :P :
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/kriss/public_html/sitecartes/script/recherche9.php on line 78

Cette erreur ce répète 10 fois, ce qui correspond au nombre d'élément que la recherche est censé afficher...
Je pense ne pas être loin de la solution, mais je ne comprend vraiment pas à quoi est dû l'erreur...
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: Ice le 07 juillet 2004 à 19:11:13
mysql_fetch_assoc($Carte))

Tu as écris $Carte , avec un C majuscule au lieu de minuscule
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: Ice le 07 juillet 2004 à 19:12:29
De même pour mysql_free_result($Carte);
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: sayoc le 07 juillet 2004 à 19:16:27
C'est vrai... B)

Maintenant je n'est plus d'erreur, mais la recherche n'aboutit à rien...
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: Ice le 07 juillet 2004 à 19:22:22
Essaie de voir ce que donne ta requete :
au lieu de :
 $carte = mysql_query("SELECT TypeJeu, ExtensionVO, ExtensionVF, NomCarteVO, NomCarteVF,
    Carac1, Carac2, FrequenceExtension, TexteCarteVO, TexteCarteVF FROM Produit WHERE
    NomCarteVO = '$rechercher'") or die ("Selection impossible" . mysql_error());

tu fais :
$sql = "SELECT TypeJeu, ExtensionVO, ExtensionVF, NomCarteVO, NomCarteVF,
    Carac1, Carac2, FrequenceExtension, TexteCarteVO, TexteCarteVF FROM Produit WHERE
    NomCarteVO = '$rechercher'";
echo $sql;
 $carte = mysql_query($sql) or die ("Selection impossible" . mysql_error());


Et tu verras ce qu'il t'affiche.
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: sayoc le 07 juillet 2004 à 19:29:57
alors...
Ca m'affiche :

Citer
Connexion au serveur réussie.
Connexion à la base réussi ! &nbspSELECT TypeJeu, ExtensionVO, ExtensionVF, NomCarteVO, NomCarteVF, Carac1, Carac2, FrequenceExtension, TexteCarteVO, TexteCarteVF FROM Produit WHERE NomCarteVO = 'Aven Flock'

Donc apparemment la requete est bonne, car  'Aven Flock' est le nom de la carte saisi dans le moteur de recherche...
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: Ice le 07 juillet 2004 à 19:38:00
Et dans ta table Produit, tu as bien Aven Flock mot à mot, sans aucun autre mot en plus correspondant au champ NomCarteVO ?
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: sayoc le 07 juillet 2004 à 19:43:09
oui, car c'est un copier/coller du nom existant dans la table...

je viens d'essayer autrement :
Citer
while ($row = mysql_fetch_row($carte)) {
       for ($i=0;$i<count($row);$i++) {
      while ($tableau= mysql_fetch_row($carte)) {
         for ($i=0;$i<count($tableau);$i++) {
        echo $tableau[$i];
à la place d'un mysql_fetch_assoc, mais sans succès...  :(

Aucune erreur mais pas de résultat...
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: Ice le 07 juillet 2004 à 19:51:14
Essaie peut être :

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


  $rechercher = $_POST['RECHERCHER'];


  //$requete = "SELECT  NomCarteVO FROM Produit";
  //$NomVO = mysql_query($requete) or die ("recherche impossible" . mysql_error());
$sql = "SELECT TypeJeu, ExtensionVO, ExtensionVF, NomCarteVO, NomCarteVF,
    Carac1, Carac2, FrequenceExtension, TexteCarteVO, TexteCarteVF FROM Produit WHERE
    NomCarteVO LIKE '%".$rechercher."%'";
echo $sql;
  $carte = mysql_query($sql) or die ("Selection impossible" . mysql_error());
$nb_result = mysql_num_rows($carte);
for ($i=0;$i<$nb_result;$i++)
{
echo mysql_result($carte,$i,'TypeJeu');
echo mysql_result($carte,$i,'ExtensionVO');
echo mysql_result($carte,$i,'ExtensionVF');
echo mysql_result($carte,$i,'NomCarteVO');
echo mysql_result($carte,$i,'NomCarteVF');
echo mysql_result($carte,$i,'Carac1');
echo mysql_result($carte,$i,'Carac2');
echo mysql_result($carte,$i,'FrequenceExtension');
echo mysql_result($carte,$i,'TexteCarteVO');
echo mysql_result($carte,$i,'TexteCarteVF');
}
mysql_free_result($carte);


}
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: sayoc le 07 juillet 2004 à 20:01:50
OUUEEEEE CA MARCHE !!!

Merci beaucoup, c'est fraiment génial, suis trop content, ca faisait 3 jours que je galérais sur ce problème !

Encore une fois, merci beaucoup !
 :D  :D  :D  :D  :D    :lol:  :lol:  :lol:    ;)  ;)  ;))  B)  B)  B)  
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: Ice le 07 juillet 2004 à 20:06:04
Ca peut encore s'améliorer :
par exemple , si tu fais une recherche sur Aven Flock, on peut faire une recherche sur les 2 mots et non sur la phrase entière.
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: sayoc le 07 juillet 2004 à 20:11:47
Oui effectivement ca serait intéréssant, c'est d'ailleur prévu par le cahier des charge, et également la possibilité d'obliger l'utilisateur à taper un minimum de caractère (par exemple 3) pour que la recherche ne s'étendent pas trop...

Mais je ne me suis pas encore penché sur le problème...
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: Ice le 07 juillet 2004 à 20:17:18
Pour rechercher sur les mots :

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


 $rechercher = $_POST['RECHERCHER'];
$rechercher = strtolower($rechercher);
$mots = str_replace('+', ' ', trim($rechercher));
$mots = str_replace('\'', ' ', $mots);
$mots = str_replace(',', ' ', $mots);
$mots = str_replace(':', ' ', $mots);
$tab = explode(' ' , $mots);
$nb = count($tab);

 //$requete = "SELECT  NomCarteVO FROM Produit";
 //$NomVO = mysql_query($requete) or die ("recherche impossible" . mysql_error());
$sql = "SELECT TypeJeu, ExtensionVO, ExtensionVF, NomCarteVO, NomCarteVF,
   Carac1, Carac2, FrequenceExtension, TexteCarteVO, TexteCarteVF FROM Produit WHERE
   NomCarteVO LIKE '%".$tab[0]."%' ";
for($j = 1; $j < $nb; $j++)
{
$sql .= "OR NomCarteVO like '%".$tab[$j]."%' ";
}


echo $sql;
 $carte = mysql_query($sql) or die ("Selection impossible" . mysql_error());
$nb_result = mysql_num_rows($carte);
for ($i=0;$i<$nb_result;$i++)
{
echo mysql_result($carte,$i,'TypeJeu');
echo mysql_result($carte,$i,'ExtensionVO');
echo mysql_result($carte,$i,'ExtensionVF');
echo mysql_result($carte,$i,'NomCarteVO');
echo mysql_result($carte,$i,'NomCarteVF');
echo mysql_result($carte,$i,'Carac1');
echo mysql_result($carte,$i,'Carac2');
echo mysql_result($carte,$i,'FrequenceExtension');
echo mysql_result($carte,$i,'TexteCarteVO');
echo mysql_result($carte,$i,'TexteCarteVF');
}
mysql_free_result($carte);


}
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: sayoc le 07 juillet 2004 à 20:19:02
C'est super cool ;)

J'essai de suite  B)  
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: sayoc le 07 juillet 2004 à 20:21:57
Peux tu m'expliqué  str_replace ?
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: Ice le 07 juillet 2004 à 20:23:17
par exemple :
$mots = str_replace(':', ' ', $mots);

remplace ":" par " " (espace) dans $mots
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: sayoc le 07 juillet 2004 à 20:26:18
Ah ok.. c'est génial ca :)
je test, je test... ^^
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: sayoc le 07 juillet 2004 à 20:29:52
Et quelle fonction utiliser pour par exemple, si l'utilisateur tape "av" que le moteur de recherche trouve tout les mot commencant par "av", mais pas ceux comportant "av" dans leur chaine de caractères au mileu par exmple...?
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: Ice le 07 juillet 2004 à 20:36:16
Faut utiliser les expressions régulières ... Mais là, c'est hors de mes compétences immédiates :)
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: sayoc le 07 juillet 2004 à 20:44:37
ok... en tout cas je te remercis grandement pour ton aide, en espérant qu'un jour prochain je serais capable de te rendre la pareil... ;)
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: Ice le 07 juillet 2004 à 20:45:21
De rien :)
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: sayoc le 07 juillet 2004 à 21:11:02
Dernière chose si tu es encore là...

Je ne comprend pas bien la fonction "explode"... j'ai pourtant regardé sur nexen, mais c'est pas très clair...
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: Ice le 07 juillet 2004 à 22:46:28
Explode sépare les éléments  par rapport au caractère donné en les stockant dans un tableau.
si $mots= "un deux trois quatre"
alors $tab = explode(' ' , $mots);
va donner :
$tab[0] = "un";
$tab[1] = "deux";
$tab[2] = "trois";
$tab[3] = "quatre";

si on a : $mots = "un deux-trois quatre"
alors $tab = explode('-',$mots);
va donner :
$tab[0] = "un deux";
$tab[1] = "trois quatre";
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: rbonnefoi le 08 juillet 2004 à 01:17:56
Salut,

Pour les expressions regulieres, tu peux aller voir ici (http://www.commentcamarche.net/php/phpreg.php3) et aussi pour les fonctions PHP associees sur le manuel php (http://uk2.php.net/manual/fr/ref.regex.php).

Je pense que ca vaut le coup de se pencher un peu la-dessus, parce que c'est vraiment tres puissant (et ca sert aussi pas mal sur la securite, pour verifier par exemple la validite de certaines variables qui interviennent dans des commandes sensibles. Exemple l'upload de fichiers a partir d'une interface html : on utilise les expressions regulieres pour verifier que le fichier est bien celui qu'on attend, notamment en regardant l'extension).

Voila.
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: Portekoi le 08 juillet 2004 à 09:00:20
Lu,

Savoc, je te conseille vivement de commencer par le commencement :

http://www.phpdebutant.org/ (http://www.phpdebutant.org/)

Un site très bien fait.

++

Portekoi
Titre: Recherche Dans Une Ligne De Tableau...
Posté par: sayoc le 08 juillet 2004 à 11:02:13
Merci bien les gars, je vais allé voir tout ca...