Requete sql ne me comprend pas ?

Eléphanteau du PHP | 40 Messages

01 févr. 2008, 13:36

Bonjour;

SGBD:2.6.1

J'explique mon sujet je desire faire une recherche d'info dans ma base de donné et d'y afficher des données en fonction de ce que je tape dans un forumulaire.

Voici le formulaire :

Code : Tout sélectionner

<form method="get" action="index.php"> <input type="text" name="adip" />&nbsp;<input type="submit" value="Rechercher" />
Donc par exemple j'entre dans mon formulaire "toto", donc une variable $adip=toto se cré lorsque je clique sur "rechercher".

Je voudrais ensuite que la base sql se serve de cette valeur pour faire ma recherche donc j'ai ecrit :

Code : Tout sélectionner

$reponse = mysql_query("SELECT * FROM imprimante WHERE ip="$adip""); while ($donnees = mysql_fetch_array($reponse) ) {...
mais le probleme c'est que apparament , je narrive pas a obtenir :

$reponse = mysql_query("SELECT * FROM imprimante WHERE ip='toto'");

et du coup ca me cause un message derreur et je ne voit pas comment faire merci pour votre aide

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

01 févr. 2008, 13:56

Ce qui aide pas mal sur un forum en cas d'erreur c'est le message d'erreur en question 8-)

Mais apparemment il y a un souci de concaténation et manque de délimiteur de chaine de caractères (=apostrophe) ici :
$sql = "SELECT * FROM imprimante WHERE ip = '".$adip."'";
$reponse = mysql_query();

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

MrPinkfr
Invité n'ayant pas de compte PHPfrance

04 févr. 2008, 13:17

Salut,

2eme hypothese, comment lis-tu la variables en provenance de ton formulaire ?
A priori, je vois un "where ip=$variable"....

Cela ne fonctionne plus depuis php4 (si mes souvenirs son bons). Il faut :

Code : Tout sélectionner

"where ip=".$_POST['variable']." suite de la requete"
@+

ViPHP
ViPHP | 4674 Messages

04 févr. 2008, 15:19

Attention à ne pas confondre avec le register_globals. Mais oui, il est à off depuis PHP 4.2.0.
On estime que $adip vaut addslashes($_POST['adip']) par exemple.
Mais Truc a trouvé la bonne solution, le problème de concaténation, entourer de simples quotes.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

ViPHP
AB
ViPHP | 5818 Messages

05 févr. 2008, 03:47

J'en profite pour dire qu'il y a dans la faq (ou les tutos) un sujet qui traite des premiers débugages à faire quand une requête ne fonctionne pas comme prévu.

Entre autre si tu mets ta requête dans une variable (ce qui est conseillé) avant d'effectuer ta requête ex
$reponse = "SELECT * FROM imprimante WHERE ip="$adip"";
$query_reponse =  mysql_query("$reponse");
En faisant un echo de ta requête cela t'aurais permis de constater que ta variable n'est pas interprétée correctement si tu fais :
$reponse = "SELECT * FROM imprimante WHERE ip="$adip"";
echo $reponse;
//$query_reponse =  mysql_query("$reponse");

Sinon j'aime bien ton titre :lol: mais essaies quand même d'être plus explicite la prochaine fois :wink:


EDIT Et penses aux deux remarques précédentes. Truc t'a donné le principe mais encore faut-il qu'avant ta requête tu aies défini $adip . Pour que cela marche à tous les coups, il vaut mieux faire
$adip = get_magic_quotes_gpc()?  $_POST['adip'] : addslashes($_POST['adip']) ;
Ensuite si tu fais une requête avec des données sensibles il faudra t'intéresser à mysql_real_escape_string()