Erreur en sql php

Fermé
Hacker#1 Messages postés 76 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 20 avril 2010 - 12 avril 2009 à 18:43
 le père - 12 avril 2009 à 21:51
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 610 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 2 avril 2013 27
12 avril 2009 à 18:49
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
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 76 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 20 avril 2010
12 avril 2009 à 21:41
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 149 Date d'inscription samedi 13 décembre 2008 Statut Membre Dernière intervention 20 juillet 2009 28
12 avril 2009 à 19:29
"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
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 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
12 avril 2009 à 21:46
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
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