Problème de recheche mysql php
Résolu
glodybiss
Messages postés
440
Date d'inscription
Statut
Membre
Dernière intervention
-
glodybiss Messages postés 440 Date d'inscription Statut Membre Dernière intervention -
glodybiss Messages postés 440 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Problème de recheche mysql php
- Easy php - Télécharger - Divers Web & Internet
- Mysql community server - Télécharger - Bases de données
- Expert php pinterest - Télécharger - Langages
- Recheche photo - Guide
- Mysql a répondu : documentation connexion impossible : paramètres incorrects. - Forum Bases de données
10 réponses
Bonjour,
C'est normal dans ta requete tu fait une selection sur le champs site_name avec un LIKE '%%'
Donc il te trouve toute tes lignes
Tu devrait faire plutot un truc du genre :
C'est normal dans ta requete tu fait une selection sur le champs site_name avec un LIKE '%%'
Donc il te trouve toute tes lignes
Tu devrait faire plutot un truc du genre :
mysql_query( "SELECT id,'nom', 'prenom',postnom, 'adresse', service, adresse2 FROM cyb_site WHERE site_name LIKE '%".$_GET['recherche']."%' LIMIT 10");
glodybiss
Messages postés
440
Date d'inscription
Statut
Membre
Dernière intervention
9
Merci ! mais ce n'est vraiment pas le grand problème regarde un peu plus bas je viens de poster le problème.
Hello,
Tu n'es plus un débutant maintenant, depuis le temps que tu postes ici ;-)
Comment veux-tu que ta requête effectue une recherche sachant que tu n'insères jamais dedans le contenu de ton champ de recherche :
"%%" signifie "n'importe quoi" donc cela te renvoie toute la base.
Il faudrait faire :
Tu n'es plus un débutant maintenant, depuis le temps que tu postes ici ;-)
Comment veux-tu que ta requête effectue une recherche sachant que tu n'insères jamais dedans le contenu de ton champ de recherche :
$result = mysql_query( "SELECT id,'nom', 'prenom',postnom, 'adresse', service, adresse2 FROM cyb_site WHERE site_name LIKE '%%' LIMIT 10");
"%%" signifie "n'importe quoi" donc cela te renvoie toute la base.
Il faudrait faire :
$result = mysql_query( "SELECT id,'nom', 'prenom',postnom, 'adresse', service, adresse2 FROM cyb_site WHERE site_name LIKE '%".$_GET['recherche']."%' LIMIT 10");
Mihawk Tu vas bien ?! Merci, je ne suis plus débutant alors d'accord. Merciii encore.
Mais je devais être encore plus précis en posant cette question puisqu'il s'agit d'un champs de recherche multiple, c'est à dire qu'il y a pleins de champs a rechercher tu peux rechercher par nom, postnom, prénom, adresse, etc... alors quand tu saisies dans un champs et que l'autre n'est pas remplit il est quand même possible qu'il fasse la recherche mais dans mon cas il affcihe le message
Mais je devais être encore plus précis en posant cette question puisqu'il s'agit d'un champs de recherche multiple, c'est à dire qu'il y a pleins de champs a rechercher tu peux rechercher par nom, postnom, prénom, adresse, etc... alors quand tu saisies dans un champs et que l'autre n'est pas remplit il est quand même possible qu'il fasse la recherche mais dans mon cas il affcihe le message
if( mysql_num_rows( $result ) == 0 ) { ?> <h3 style="text-align:center; margin:10px 0;">Pas de résultats pour cette recherche</h3>
Si j'ai bien compris tu souhaite que ta recherche se fasse sur les champs : nom, postnom, ...
En gros, si tu recherche le mot "bon", qu'il te trouve tous les résultats ou dans n'importe quel champs où le terme "bon" est présent (ex : le nom est "bondiman" ou l'adresse est "rue du grand bon de marsu)
C'est bien ça ??
En gros, si tu recherche le mot "bon", qu'il te trouve tous les résultats ou dans n'importe quel champs où le terme "bon" est présent (ex : le nom est "bondiman" ou l'adresse est "rue du grand bon de marsu)
C'est bien ça ??
Pas tout à fait ça, qu'il recherche par chaque entrée de ma table : nom, prénom, adresse.
C'est à dire que tu peux rechercher soit par le nom, par le prénom, par adresse ainsi de suite...
Voici le tableau de recherche.
C'est à dire que tu peux rechercher soit par le nom, par le prénom, par adresse ainsi de suite...
Voici le tableau de recherche.
<table width="480" border="0" class="right"> <tr> <td class="recherche_text"><label for="nom">ID interne</label></td> <td > <input type="text" name="nom" class="recherche" id="id_interne" value="<?php if (isset($_POST['nom'])) echo htmlentities(trim($_POST['nom'])); ?>"></td> </tr> <tr> <td class="recherche_text"><label for="prenom" >prenom</label></td> <td > <input type="text" name="prenom" class="recherche" id="id_provider" value="<?php if (isset($_POST['prenom'])) echo htmlentities(trim($_POST['prenom'])); ?>"></td> </tr> <tr> <td class="recherche_text"><label for="adresse">adresse</label></td> <td > <input type="text" name="matricule" class="recherche" id="nom_du_site" value="<?php if (isset($_POST['adresse'])) echo htmlentities(trim($_POST['adresse'])); ?>"></td> </tr> </table>
Donc il faudrait construire la requete puis l'executer :
Perso, j'aurais vu un truc de ce genre.
Après, il y a peut-être quelques choses de plus optimisé ou plus simple... ;)
// **** Construction de la requete **** $req = "SELECT id,'nom', 'prenom',postnom, 'adresse', service, adresse2 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 nom s'il est renseigné if (isset($_POST['nom']) $req = $req & " AND nom LIKE '%".htmlentities(trim($_post['nom']."%' " //Ajout de la recherche sur le prenom s'il est renseigné if (isset($_POST['prenom']) $req = $req & " AND prenom LIKE '%".htmlentities(trim($_post['prenom']."%' " //Ajout de la recherche sur l'adresse si elle est renseignée if (isset($_POST['adresse']) $req = $req & " AND adresse LIKE '%".htmlentities(trim($_post['adresse']."%' " $req = $req & " LIMIT 10;" // **** Execution de la requete **** $result = mysql_query($req)
Perso, j'aurais vu un truc de ce genre.
Après, il y a peut-être quelques choses de plus optimisé ou plus simple... ;)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
En effet si tu veux une recherche par champ cela implique une requête par recherche... Ni coupe pas
la même erreur revient voilà l'ensemble des codes
<?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°</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" if (mysql_num_rows($req)) { ?> <h3 style="text-align:center; margin:10px 0;">Pas de ré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 } } } ?>
J'ai rectifié mon code, j'avais fait quelques erreurs (horreurs), à ma décharge je suis un peu rouillé en PHP ca fait un bail que je n'en ai plus fait :
// CONSTRUCTION DE LA REQUETE $req = "SELECT id,'nom', 'prenom',postnom, 'adresse', service, adresse2 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 nom s'il est renseigné if (!empty($_POST['nom'])) {$req .= " AND nom LIKE '%".htmlentities(trim($_POST['nom']))."%' ";} //Ajout de la recherche sur le prenom s'il est renseigné if (!empty($_POST['prenom'])) {$req .=" AND prenom LIKE '%".htmlentities(trim($_POST['prenom']))."%' ";} //Ajout de la recherche sur l'adresse si elle est renseignée if (!empty($_POST['adresse'])) {$req .=" AND adresse LIKE '%".htmlentities(trim($_POST['adresse']))."%' ";} $req .=" LIMIT 10;"; // **** Execution de la requete **** $result = mysql_query($req);
C'était déjà fais.
J'ai utilisé un tableau
J'ai utilisé un tableau
$where = array(); if (isset($_POST['idsiteinterne'])) { $where[] = "idsiteinterne LIKE '%".mysql_real_escape_string(trim($_POST['idsiteinterne']))."%'"; } if (isset($_POST['idsiteprovider'])) { $where[] = "idsiteprovider LIKE '%".mysql_real_escape_string(trim($_POST['idsiteprovider']))."%'"; } if (isset($_POST['idetatsite'])) { $where[] = "idetatsite LIKE '%".mysql_real_escape_string(trim($_POST['idetatsite']))."%'"; } if (isset($_POST['site_name'])) { $where[] = "site_name LIKE '%".mysql_real_escape_string(trim($_POST['site_name']))."%'"; } if (isset($_POST['adresseIP'])) { $where[]= "adresseIP LIKE '%".mysql_real_escape_string(trim($_POST['adresseIP']))."%'"; } if (isset($_POST['service'])) { $where[] = "service LIKE '%".mysql_real_escape_string(trim($_POST['service']))."%'"; } $sqlWhere = implode(' AND ', $where);
C'est étonnant je viens d'essayer ça et ca ma donner correctement la requête :
<? $tableau = array(); $req = "SELECT id,'nom', 'prenom',postnom, 'adresse', service, adresse2 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 nom s'il est renseigné if (!empty($_POST['nom'])) {$tableau[] = "nom LIKE '%".htmlentities(trim($_POST['nom']))."%' ";} //Ajout de la recherche sur le prenom s'il est renseigné if (!empty($_POST['prenom'])) {$tableau[] ="prenom LIKE '%".htmlentities(trim($_POST['prenom']))."%' ";} //Ajout de la recherche sur l'adresse si elle est renseignée if (!empty($_POST['adresse'])) {$tableau[] = "adresse LIKE '%".htmlentities(trim($_POST['adresse']))."%' ";} $req .= implode (" AND ",$tableau)." LIMIT 10;"; echo $req; ?>
essayes comme ça:
$where = array(); if (!empty($_POST['idsiteinterne'])) { //si existe et pas vide $where[] = "idsiteinterne LIKE '%".mysql_real_escape_string(trim($_POST['idsiteinterne']))."%'"; } if (!empty($_POST['idsiteprovider'])) { $where[] = "idsiteprovider LIKE '%".mysql_real_escape_string(trim($_POST['idsiteprovider']))."%'"; } if (!empty($_POST['idetatsite'])) { $where[] = "idetatsite LIKE '%".mysql_real_escape_string(trim($_POST['idetatsite']))."%'"; } if (!empty($_POST['site_name'])) { $where[] = "site_name LIKE '%".mysql_real_escape_string(trim($_POST['site_name']))."%'"; } if (!empty($_POST['adresseIP'])) { $where[]= "adresseIP LIKE '%".mysql_real_escape_string(trim($_POST['adresseIP']))."%'"; } if (!empty($_POST['service'])) { $where[] = "service LIKE '%".mysql_real_escape_string(trim($_POST['service']))."%'"; } if(sizeof($where) >0) { // tu mets dans ton post plus haut: "C'est à dire que tu peux rechercher soit par le nom, par le prénom, par adresse ainsi de suite..." //donc a mon avis il faut des OR $sqlWhere = ' WHERE '.implode(' OR ', $where); // et rajouter le WHERE $reqette= "SELECT 'id', 'idsiteinterne', 'idsiteprovider', 'site_name', 'adresseIP', 'service' FROM cyb_site ".$sqlWhere; //etc..... }else{ echo 'Vous devez remplir au moins un des champs de recherche !'; }
le test de taille due l'array on le met ou pas suivant qu'on autorise une recherche avec tous les champs vides ou pas
Alain j'ai essayé de remplacer par tes source, il y a un problème d'abord même quand tout les champs sont rempli il envoi le message
De deux il me dit que toutes les variables que j'ai définie pour me permet d'afficher les résultats sont indéfinies
:
voici les codes
toutes variables définies dans les td
echo 'Vous devez remplir au moins un des champs de recherche !';
De deux il me dit que toutes les variables que j'ai définie pour me permet d'afficher les résultats sont indéfinies
:
Notice: Undefined variable: post in C:\wamp\www\internetservices\sitemanage.php on line 81 jusqu'à la ligne 87
voici les codes
$req; { ?> <div class="article-result"> <table> <tr> <td class="id"><?php echo $post->id; ?></td> <td class="td_seach"><?php echo $post->idsiteinterne; ?></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 } } ?>
toutes variables définies dans les td
Bonjour,
Peux-tu montrer la totalité de tes sources :
- formulaire HTML
- traitement PHP
Je vais tenter de voir ce qu'il ne pourrait pas aller ;)
Peux-tu montrer la totalité de tes sources :
- formulaire HTML
- traitement PHP
Je vais tenter de voir ce qu'il ne pourrait pas aller ;)
Je viens de créer une BDD d'une table pour recréer en totalité ton problème et le script ci-dessous est OK chez moi avec la table cyb_site rempli de quelques resultat, aucune erreur est apparu ;)
Regarde ce que ça donne chez toi ;)
http://www.fufox.net/?d=ACAB3AA132A1
Regarde ce que ça donne chez toi ;)
http://www.fufox.net/?d=ACAB3AA132A1