Page 1 sur 1

Champ de recherche multiple avec php mysql

Posté : 28 déc. 2011, 11:49
par glodybiss4
Bonjour à tous !

J'ai créer un moteur de recherche qui permet de rechercher plusieurs catégorie avec plusieurs champs.
Une erreur #-o n'arrête pas d'apparaître lors de l'exécution de mon script.

L'erreur c'est sur la ligne 40

Code : Tout sélectionner

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\wamp\www\internetservices\sitemanage.php on line 40
Voici la ligne 40 de mon code

Code : Tout sélectionner

if (mysql_num_rows($result)==0)
Et voici le code entier

Code : Tout sélectionner

<?php //recherche des résultats dans la base de données$result = mysql_query( 'SELECT prenom if(isset($_GET['recherche'])){ extract($_GET); $req = "SELECT `id`, `idsiteinterne`, `idsiteprovider`, `site_name`, `adresseIP`, `service` FROM cyb_site WHERE 1=1 "; //Le WHERE 1=1 permet de pas s'embeter à savoir si le WHERE a déjà été mis ou pas après dans les différents "if isset..." //Ajout de la recherche sur le idsiteinterne s'il est renseigné if (isset($_POST['idsiteinterne'])) $req = $req & " AND idsiteinterne LIKE '%".htmlentities(trim($_post['idsiteinterne']))."%'"; //Ajout de la recherche sur le idsiteprovider s'il est renseigné if (isset($_POST['idsiteprovider'])) $req = $req & " AND idsiteprovider LIKE '%".htmlentities(trim($_post['idsiteprovider']))."%'"; //Ajout de la recherche sur site_name si elle est renseignée if (isset($_POST['site_name'])) $req = $req & " AND site_name LIKE '%".htmlentities(trim($_post['site_name']))."%' "; if (isset($_POST['adresseIP'])) $req = $req & " AND adresseIP LIKE '%".htmlentities(trim($_post['adresseIP']))."%' "; if (isset($_POST['service'])) $req = $req & " AND service LIKE '%".htmlentities(trim($_post['service']))."%' "; $req = $req & " LIMIT 10"; echo'<h4>Resultat de recherche</h4>'; echo '<table>'; echo '<tr>'; echo '<th class="td_seach_titre">N&deg;</th>'; echo '<th class="td_seach_titre">ID Provider</th>'; echo '<th class="td_seach_titre">ID Interne</th>'; echo '<th class="td_seach_titre">Etat du site</th>'; echo '<th class="td_seach_titre">Nom du site</th>'; echo '<th class="td_seach_titre">Adresse IP</th>'; echo '<th class="td_seach_titre">Service</th>'; echo '</tr>'; echo '</table>'; // affichage d'un message "pas de résultats" //$result = mysql_query($req) echo $result = mysql_query($req); if (mysql_num_rows($result)==0) { ?> <h3 style="text-align:center; margin:10px 0;">Pas de r&eacute;sultats pour cette recherche</h3> <?php } else { // parcours et affichage des résultats while( $result = mysql_query($result)) { ?> <div class="article-result"> <table> <tr> <td class="id"><?php echo $post->id; ?></td> <td class="td_seach"><a href="accueil.php?view=24&u='.$row['id'].'""><?php echo $post->idsiteinterne; ?></a></td> <td class="td_seach"><?php echo $post->idsiteprovider; ?></td> <td class="td_seach"><?php echo $post->idetatsite; ?></td> <td class="td_seach"><?php echo $post->site_name; ?></td> <td class="td_seach"><?php echo $post->adresseIP; ?></td> <td class="td_seach"><?php echo $post->service; ?></td> </tr></table> </table> </div> <?php } } } ?> <div id="boxManage"> <h4>Rechercher un site</h4> <p>Trouvez un site par son nom, sa date de cr&eacute;ation, son ID, son statut. </p> <form method="get" action=""> <table width="480" border="0" class="right"> <tr> <td class="recherche_text"><label for="id_interne">ID interne</label></td> <td > <input type="text" name="idsiteinterne" class="recherche" id="id_interne" value="<?php if (isset($_POST['idsiteinterne'])) echo htmlentities(trim($_POST['idsiteinterne'])); ?>"></td> </tr> <tr> <td class="recherche_text"><label for="id_provider" >ID Provider</label></td> <td > <input type="text" name="idsiteprovider" class="recherche" id="id_provider" value="<?php if (isset($_POST['idsiteprovider'])) echo htmlentities(trim($_POST['idsiteprovider'])); ?>"></td> </tr> <tr> <td class="recherche_text"><label for="nom_du_site">Nom du site</label></td> <td > <input type="text" name="site_name" class="recherche" id="nom_du_site" value="<?php if (isset($_POST['site_name'])) echo htmlentities(trim($_POST['site_name'])); ?>"></td> </tr> <tr> <td class="recherche_text"> <label for="adresse_ip">Adresse IP</label></td> <td > <input type="text" name="adresseIP" class="recherche" id="adresse_ip" value="<?php if (isset($_POST['adresseIP'])) echo htmlentities(trim($_POST['adresseIP'])); ?>"></td> </tr> <tr> <td class="recherche_text">Statut</td> <td class="seach_name" > <?php $query = "SELECT * FROM `etat_site`"; $result = mysql_query($query); echo '<SELECT name="idetatsite" class="recherche_select">'; while ($row = mysql_fetch_array($result)) { echo '<OPTION>'.$row['etatsite'].'</OPTION>'; } echo '</SELECT>'; ?> </td> </tr> <tr> <td></td> <td><input type="submit" name="recherche" class="recherche_submit" value="Rechercher" /></td> </tr> </table> </form> </div> <div id="results"></div>

Re: Champ de recherche multiple avec php mysql

Posté : 28 déc. 2011, 12:02
par Mazarini
echo $result = mysql_query($req);
Cela signifie que la requete ci-dessus s'est mal exécutée puisque $result n'est pas une ressource.

Pour savoir ce qui pose problème, il faut afficher mysql_error() et éventuellement $req. Il y a une erreur si mysql_errno() n'es pas à 0.

Re: Champ de recherche multiple avec php mysql

Posté : 28 déc. 2011, 12:21
par glodybiss4
Erreur SQL !DHEAT
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
c'est ça l'erreur affichée

Re: Champ de recherche multiple avec php mysql

Posté : 28 déc. 2011, 12:55
par Ryle
Affiche le contenu de $req, tu devrais rapidement voir le problème :)

Quant à l'opérateur qui permet de concaténer des chaines ensemble, c'est le point "." ... Le "&" seul permet de faire une comparaison bit à bit, mais ne colle pas deux chaines l'une avec l'autre :-*

Re: Champ de recherche multiple avec php mysql

Posté : 28 déc. 2011, 14:48
par glodybiss4
Peux-tu s'il te plait m'expliquer
Affiche le contenu de $req, tu devrais rapidement voir le problème
Ce n'est pas ce que j'ai fais ici ?
echo $result = mysql_query($req)

Re: Champ de recherche multiple avec php mysql

Posté : 28 déc. 2011, 14:53
par xTG
Non là tu affiches le contenu de $result. ;)
echo $req;

Re: Champ de recherche multiple avec php mysql

Posté : 28 déc. 2011, 16:44
par glodybiss4
Quand je fais un echo sur ma req
il me remet ma requete
SELECT `id`, `idsiteinterne`, `idsiteprovider`, `site_name`, `adresseIP`, `service` FROM cyb_site WHERE 1=1 

Re: Champ de recherche multiple avec php mysql

Posté : 28 déc. 2011, 17:08
par Mazarini
J'avoue ne pas faire le raprochement entre la requete que tu indiques et le message d'erreur précédent. La requete me semble bonne sauf problème potentiel de nom de table, nom de colonne ou connexion (mais le message d'erreur serait autre).

A priori, si tu as remplacé les & par des . pour la concaténation, ca devrait marcher .

Re: Champ de recherche multiple avec php mysql

Posté : 28 déc. 2011, 18:16
par Ryle
Quand je fais un echo sur ma req
il me remet ma requete
SELECT `id`, `idsiteinterne`, `idsiteprovider`, `site_name`, `adresseIP`, `service` FROM cyb_site WHERE 1=1 
Euh... le echo faut le faire juste avant le mysql_query() pour voir ce que tu envois à MySQL comme requête et comprendre ce qui ne lui convient pas :)

Si tu le fais juste après le premier $req= , tu loupes toutes les modifications qui sont apportées à cette variable avant que tu ne demandes à Mysql de l'exécuter ;)