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   -
Bonjour,

J'ai créer un champ de recherche qui cherche dans ma base des données mysql mais le problème est ce que lors de la recherche il ne trouve pas le texte saisie dans le champs de recherche il me trouve toute les données de ma base et quand tu saisies par exemple une données qui ne se trouve pas dans la data base il te sors toujours les données.

voici ma raquette.

Une aide s'il vous plait, je précise que je ne suis qu'un débutant en php

merci d'avance

if(isset($_GET['recherche'])){ 
extract($_GET); 
$result =   mysql_query( "SELECT id,'nom', 'prenom',postnom, 'adresse', service, adresse2 FROM cyb_site WHERE 
 site_name LIKE '%%'  LIMIT 10"); 
//affichage des resultats
 echo'<h4>Resultat de recherche</h4>'; 
 echo '<table>'; 
 echo '<tr>'; 
 echo '<th class="td_seach_titre">N°</th>'; 
 echo '<th class="td_seach_titre">nom</th>'; 
 echo '<th class="td_seach_titre">prenom</th>'; 
 echo '<th class="td_seach_titre">postnom</th>'; 
 echo '<th class="td_seach_titre">adresse</th>'; 
 echo '<th class="td_seach_titre">Adresse 2</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( $result ) == 0 ) 
{ 
?> 
    <h3 style="text-align:center; margin:10px 0;">Pas de résultats pour cette recherche</h3>






A voir également:

10 réponses

Stringman621 Messages postés 1308 Date d'inscription   Statut Membre Dernière intervention   340
 
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 :

mysql_query( "SELECT id,'nom', 'prenom',postnom, 'adresse', service, adresse2 FROM cyb_site WHERE
 site_name LIKE '%".$_GET['recherche']."%'  LIMIT 10");

0
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.
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
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 :

$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"); 

0
glodybiss Messages postés 440 Date d'inscription   Statut Membre Dernière intervention   9
 
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

if( mysql_num_rows( $result ) == 0 ) 
{ 
?> 
    <h3 style="text-align:center; margin:10px 0;">Pas de résultats pour cette recherche</h3>
0
Stringman621 Messages postés 1308 Date d'inscription   Statut Membre Dernière intervention   340
 
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 ??
0
glodybiss Messages postés 440 Date d'inscription   Statut Membre Dernière intervention   9
 
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.

 <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>
0
Stringman621 Messages postés 1308 Date d'inscription   Statut Membre Dernière intervention   340
 
Donc il faudrait construire la requete puis l'executer :

// **** 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... ;)
0
glodybiss Messages postés 440 Date d'inscription   Statut Membre Dernière intervention   9
 
Merci j'essaie te je te dis quoi. Thanks
0
glodybiss Messages postés 440 Date d'inscription   Statut Membre Dernière intervention   9
 
Apparemment il y a des parenthèse que tu as oublié de fermé.
0
Stringman621 Messages postés 1308 Date d'inscription   Statut Membre Dernière intervention   340
 
Yes à la fin des isset, exemple :
if (isset($_POST['adresse'])) $req = $req & " AND adresse LIKE '%".htmlentities(trim($_post['adresse']."%'  
0
glodybiss Messages postés 440 Date d'inscription   Statut Membre Dernière intervention   9
 
ça y est presque
Je crois que c'est le dernier problème à la quel je dois tu vas m'aider.
Warning: mysql_num_rows() expects parameter 1 to be resource, string given in C:\wamp\www\internetservices\sitemanage.php on line 36

Ligne 36
if( mysql_num_rows( $req ) == 0 )
0
Stringman621 Messages postés 1308 Date d'inscription   Statut Membre Dernière intervention   340
 
C'est :
mysql_num_rows($result)
0

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

Posez votre question
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
En effet si tu veux une recherche par champ cela implique une requête par recherche... Ni coupe pas
0
glodybiss Messages postés 440 Date d'inscription   Statut Membre Dernière intervention   9
 
Oui Mihawk c'est ce que nous avions avec Stringman621.
0
Stringman621 Messages postés 1308 Date d'inscription   Statut Membre Dernière intervention   340
 
Alors ca fonctionne ?
0
glodybiss Messages postés 440 Date d'inscription   Statut Membre Dernière intervention   9
 
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
    }
}
}
?>
0
Stringman621 Messages postés 1308 Date d'inscription   Statut Membre Dernière intervention   340
 
C'est normal, tu n'as pas vu mon commentaire à 14:10 :

C'est :
mysql_num_rows($result)

et pas
mysql_num_rows($req)
0
glodybiss Messages postés 440 Date d'inscription   Statut Membre Dernière intervention   9
 
ça me donne une erreur quand j'essaie de modifier comme ça
mysql_num_rows($result)

erreur
Parse error: parse error, expecting ''('' in C:\wamp\www\internetservices\sitemanage.php on line 38


ligne 38

if mysql_num_rows($result)
0
Stringman621 Messages postés 1308 Date d'inscription   Statut Membre Dernière intervention   340
 
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);

0
glodybiss Messages postés 440 Date d'inscription   Statut Membre Dernière intervention   9
 
C'était déjà fais.
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);
0
Stringman621 Messages postés 1308 Date d'inscription   Statut Membre Dernière intervention   340
 
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;

?>
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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 !';
}
0
Stringman621 Messages postés 1308 Date d'inscription   Statut Membre Dernière intervention   340
 
sans faire ton test de la taille du tableau j'ai pu faire fonctionner la construction de la requete dans tout les cas, même si le tableau est vide...
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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
0
Stringman621 Messages postés 1308 Date d'inscription   Statut Membre Dernière intervention   340
 
OK j'avais pas vu le "echo" dans la clause else {}, désolé
0
glodybiss Messages postés 440 Date d'inscription   Statut Membre Dernière intervention   9
 
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
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
0
Stringman621 Messages postés 1308 Date d'inscription   Statut Membre Dernière intervention   340
 
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 ;)
0
glodybiss Messages postés 440 Date d'inscription   Statut Membre Dernière intervention   9
 
D'accord merci !!! Tu peux trouver le fichier ici
[URL=http://www.fufox.net/?d=0AEB3208E26E]http://www.fufox.net/?d=0AEB3208E26E[/URL]
0
glodybiss Messages postés 440 Date d'inscription   Statut Membre Dernière intervention   9
 
Avez-vous vu le fichier ? sinon je peux le coller seulement ici
0
Stringman621 Messages postés 1308 Date d'inscription   Statut Membre Dernière intervention   340
 
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
0
glodybiss Messages postés 440 Date d'inscription   Statut Membre Dernière intervention   9
 
Chez moi il n'affiche aucun résultat mais aucune erreur.
0
Stringman621 Messages postés 1308 Date d'inscription   Statut Membre Dernière intervention   340
 
Affiche la requête est exécute la en direct sur ta BDD
0
glodybiss Messages postés 440 Date d'inscription   Statut Membre Dernière intervention   9
 
ça me renvoi la valeur 1
0
Stringman621 Messages postés 1308 Date d'inscription   Statut Membre Dernière intervention   340
 
??? comment ca 1 ??? dans ton SELECT il y a bien plusieurs champs non ? Montre moi la requête, ça me parait chelou que ça ne fonctionne pas chez toi et chez moi tout va nickel je récupère quelques résultats cohérents
0
Stringman621 Messages postés 1308 Date d'inscription   Statut Membre Dernière intervention   340
 
par contre les deux premieres lignes de mon script :
mysql_connect("localhost","root") or die("erreur de connexion au serveur $host");
mysql_select_db("test_2");


Il faut que tu les enlèves et fasse ta connexion à ta BDD ces 2 lignes m'ont servis à faire les tests sur MA base de données ;)
0