Erreur en sql php

Hacker#1 Messages postés 88 Statut Membre -  
 le père -
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

ben85350 Messages postés 622 Statut Membre 27
 
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).
0
le père
 
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.
0
Hacker#1 Messages postés 88 Statut Membre
 
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.
0
chupa23 Messages postés 152 Statut Membre 28
 
"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.
0
le père
 
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']"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
arthezius Messages postés 3756 Statut Membre 475
 
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.
0
le père
 
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
0