Erreur en sql php

Bonjour,
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<form  name="form1" method="post" action="avancee.php">
  <label>
  <input type="text" name="name" id="textfield" />
  </label>
  <label>
  <input type="checkbox" name="nom" id="checkbox3">
  </label>
  <p>
    <label>
    <input type="text" name="home" id="textfield2" />
    </label>
    <label>
    <input type="checkbox" name="maison" id="checkbox" />
    </label>
  </p>
  <p>
    <label>
    <input type="text" name="writer" id="textfield3" />
    </label>
    <label>
    <input type="checkbox" name="auteur" id="checkbox2" />
    <br>
    </label>
    <input type="submit" name="search" value="rechercher" id="submit" />
  </p>
</form>
<?php
if(isset($_POST["search"]))
{$a=$_POST["name"];
$b=$_POST["home"];
$c=$_POST["writer"];
if(isset($_POST["maison"])&&isset($_POST["auteur"])&&isset($_POST["nom"]))
{mysql_connect('localhost','root','');
mysql_select_db('compte');
$req=mysql_query("SELECT * FROM livre where nom='$a'and maison d edition='$b' and auteur='$c'");
echo "<table border>";
while($data=mysql_fetch_row($req))
{
echo "<tr>
<td> <span class='style1'> nom ".$data['nom']."<br>auteur ".$data['auteur']."<br>maison d edition ".$data['maison d edition']
."<br>nbre d exemplaire ".$data['nbre d exemplaire']."</span></td>
<td></td>
</tr>";
}
echo"</table>";
mysql_close();}
}
?>
</body>
</html>

Quand je met mes variable et je clique sur rechercher jai le message suivant
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in C:\wamp\www\compte\avancee.php on line 44
aider moi a resoudre ce probleme

6 réponses

  1. Cela signifie que ta requête n'est pas correcte :
    "SELECT * FROM livre where nom='$a'and maison d edition='$b' and auteur='$c'
    a remplacer par
    "SELECT * FROM livre where nom='".$a."'and maison d edition='".$b."' and auteur='".$c.'"

    Deuxième point : éviter de mettre des espaces dans les noms des tables (maison d edition).
    1. Bonjour

      Tu as (au moins...) deux problèmes dans ta requête :

      1 - les espaces dans le nom de ton champ. Cela t'oblige à entourer le nom de ce champ avec des accents graves
      2 - il manque un espace entre '$a' et and

      "SELECT * FROM livre where nom='$a' and `maison d edition`='$b' and auteur='$c'"

      Sinon, il est totalement inutile de couper la chaîne en 36 morceaux pour les concaténer.
      1. j ai ajoute les accents graves et l espace entre and et $a
        mais des nouveaux messages d'erreur appraissent?!
        voila ce qui donne a l affichage
        Notice: Undefined index: nom in C:\wamp\www\compte\avancee.php on line 47
        
        Notice: Undefined index: auteur in C:\wamp\www\compte\avancee.php on line 47
        
        Notice: Undefined index: maison d edition in C:\wamp\www\compte\avancee.php on line 47
        
        Notice: Undefined index: nbre d exemplaire in C:\wamp\www\compte\avancee.php on line 48
        nom
        auteur
        maison d edition
        nbre d exemplaire 	

        j n ai pas compris votre deuxieme proposition expliquer de plus
        Sinon, il est totalement inutile de couper la chaîne en 36 morceaux pour les concaténer.
    2. "Sinon, il est totalement inutile de couper la chaîne en 36 morceaux pour les concaténer." Je te dirais bien faux pour ça , essaie de placer une variable sessions dans une requête sans concaténer tes variables.Et de plus essaie d'utiliser de vrai de variable : a b c, ça veut rien dire.

      Et place ceci après ta requête pour afficher l'erreur dans tes requêtes:
      or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

      Ceux qui donne :
      $req=mysql_query("SELECT * FROM livre where nom='".$a."'and maison d edition='".$b."' and auteur='".$c.'") or die('Erreur SQL !'.$req.'<br/>'.mysql_error());
      


      De plus , essai de creer des chazmps sans espace dans tes bdd pour simpliier l'utilisation.
      1. Sinon, il est totalement inutile de couper la chaîne en 36 morceaux pour les concaténer Je maintiens.
        Je n'ai aucun problème pour mettre des variables de session dans une requête, et d'ailleurs il n'est pas question ici de variables de session.
        Je maintiens aussi qu'on peut très bien utiliser des espaces dans un nom de table ou de champ (même si ça n'est pas une bonne idée, je suis d'accord) à la condition de l'entourer d'accents graves comme dans la requête que j'ai donnée
        A ceux qui ne savent pas utiliser une variable de session (ou n'importe quel élément de tableau) dans une chaîne, je rappelle qu'il ne FAUT PAS mettre d'apostrophes autour de l'indice quand la variable est utilisée à l'intérieur d'une chaîne. Il faut écrire
        "SELECT * FROM `matable` WHERE `nom`=$_SESSION[login]"
        et non pas
        "SELECT * FROM `matable` WHERE `nom`=$_SESSION['login']"
        1. Y'a plusieurs manière d'écrire ces requêtes sql. Ce qui compte c'est surtout d'en utiliser une qui marche. Chacun fait comme il veux ensuite. Faut je pense surtout être à l'aise avec la manière qu'on utilise.
          1. Ces nouveaux messages d'erreurs sont bon signe, ils indiquent que la requête marche maintenant.
            Ce qui ne marche pas, c'est que tu utilises la fonction mysql_fetch_rows qui rend un tableau avec comme indices des numéros et non pas des noms de champs. Remplace-la par la fonction mysql_fetch_array