IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Problème requete pour moteur de recherche


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 295
    Points : 87
    Points
    87
    Par défaut Problème requete pour moteur de recherche
    Bonjour, j'ai 1 soucis avec la requete de mon moteur de recherche.

    il est sensé récupérer uniquement les fiches ( d'informations ) lié au(x) mot(s) clé(s) saisie. Seulement il m'affiche dans mon select toute les fiches de ma bdd.

    Je pense qu'il s'agit d'un problème de requete pour ca que je post ici .

    Comment l'optimiser :
    merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    if(isset($search) && trim($search) != '') 
    					{
    					$search = str_replace('+', ' ', trim($search));
    					$search = str_replace('\'', ' ', $search);
    					$search = str_replace(',', ' ', $search);
    					$search = str_replace(':', ' ', $search);
    					$tabsearch = explode(' ' , $search );
    					//on compte le nombre de mots
    					$nbsearch = count($tabsearch);
    					//on prépare la requête SQL.
    					if(!empty($tabsearch[0]))
    						{
    						$sql = "select * 
    								from fiches
    								where numFiche ='".$tabsearch[0]."' 
    								or nomFiche like %'".$tabsearch[0]."'%
    								or datecreaFiche ='".$tabsearch[0]."'
    								or loginF ='".$tabsearch[0]."'
    								or descriptifFiche like %'".$tabsearch[0]."'%
    								or resolutionFiche like %'".$tabsearch[0]."'%
    								or nomProjet ='".$search."'
    								or nbhresolution = '".$tabsearch[0]."'
    								or enseigne = '".$tabsearch[0]."'
    								or privee ='".$tabsearch[0]."'
    								or emailF = '".$tabsearch[0]."'";
    						}
    							// on boucle pour integrer tous les mots dans la requête
    							$sql = "select * from fiches where 1"; 
    							for ($i = 0; $i < $nb; $i++)
    								{ 
    								if(!empty($tabsearch[$i]))
    									{
    									$sql .= " AND ( numFiche='".$tabsearch[$i]."'
    									or nomFiche like %'".$tabsearch[$i]."'%
    									or datecreaFiche ='".$tabsearch[$i]."'
    									or loginF ='".$tabsearch[$i]."'
    									or descriptifFiche like %'".$tabsearch[$i]."'%
    									or resolutionFiche like %'".$tabsearch[$i]."'%
    									or nomProjet '".$search."'
    									or nbhresolution = '".$tabsearch[$i]."'
    									or enseigne = '".$tabsearch[$i]."'
    									or privee ='".$tabsearch[$i]."' 
    									or emailF = '".$tabsearch[$i]."' )"; 
    									}
    								}
    							// on execute la requête SQL.
    							$result = mysql_query($sql);
    							if ($result)
    								{
    								if (mysql_num_rows($result) == 0) 
    									{
    									// Si il n'y a pas de résultats
    									echo '<script language=javascript> alert ("Pas de résultat");</script>';
    									echo '<SCRIPT LANGUAGE="JavaScript">document.location.href="accueil.php" </SCRIPT>';
    									exit;
    									}else{
    										echo "<select name='searchselection'>";
    										while($datafichiers = mysql_fetch_assoc($result)) 
    											{ 
    											 echo '<option>'.$datafichiers['nomFiche'].'</option>'; 
    											 echo '<br>'; 
    											}
    									echo'</select>';
    										}
    								}
    					mysql_free_result($result);

  2. #2
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 129
    Points : 127
    Points
    127
    Par défaut
    or nomFiche like %'".$tabsearch[0]."'%
    tes LIKE de sont pas bons, essaies avec cette syntaxe la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    or nomFiche like '%".$tabsearch[0]."%'
    Il y a peut etre autre chose

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 295
    Points : 87
    Points
    87
    Par défaut
    J'ai donc modifié cela, mais il m'affiche toujours toute les informations:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    <?php 
    				if(isset($search) && trim($search) != '') 
    					{
    					$search = str_replace('+', ' ', trim($search));
    					$search = str_replace('\'', ' ', $search);
    					$search = str_replace(',', ' ', $search);
    					$search = str_replace(':', ' ', $search);
    					$tabsearch = explode(' ' , $search );
    					//on compte le nombre de mots
    					$nbsearch = count($tabsearch);
    					//on prépare la requête SQL.
    					if(!empty($tabsearch[0]))
    						{
    						$sql = "select * 
    								from fiches
    								where numFiche ='".$tabsearch[0]."' 
    								or nomFiche like '%".$tabsearch[0]."%'
    								or datecreaFiche ='".$tabsearch[0]."'
    								or loginF ='".$tabsearch[0]."'
    								or descriptifFiche like '%".$tabsearch[0]."%'
    								or resolutionFiche like '%".$tabsearch[0]."%'
    								or nomProjet ='".$search."'
    								or nbhresolution = '".$tabsearch[0]."'
    								or enseigne = '".$tabsearch[0]."'
    								or privee ='".$tabsearch[0]."'
    								or emailF = '".$tabsearch[0]."'";
    						}
    							// on boucle pour integrer tous les mots dans la requête
    							$sql = "select * from fiches where 1"; 
    							for ($i = 0; $i < $nb; $i++)
    								{ 
    								if(!empty($tabsearch[$i]))
    									{
    									$sql .= " AND ( numFiche='".$tabsearch[$i]."'
    									or nomFiche like '%".$tabsearch[$i]."%'
    									or datecreaFiche ='".$tabsearch[$i]."'
    									or loginF ='".$tabsearch[$i]."'
    									or descriptifFiche like '%".$tabsearch[$i]."%'
    									or resolutionFiche like '%".$tabsearch[$i]."%'
    									or nomProjet '".$search."'
    									or nbhresolution = '".$tabsearch[$i]."'
    									or enseigne = '".$tabsearch[$i]."'
    									or privee ='".$tabsearch[$i]."' 
    									or emailF = '".$tabsearch[$i]."' )"; 
    									}
    								}
    							// on execute la requête SQL.
    							$result = mysql_query($sql);
    							if ($result)
    								{
    								if (mysql_num_rows($result) == 0) 
    									{
    									// Si il n'y a pas de résultats
    									echo '<script language=javascript> alert ("Pas de résultat");</script>';
    									echo '<SCRIPT LANGUAGE="JavaScript">document.location.href="accueil.php" </SCRIPT>';
    									exit;
    									}else{
    										echo "<select name='searchselection'>";
    										while($datafichiers = mysql_fetch_assoc($result)) 
    											{ 
    											 echo '<option>'.$datafichiers['nomFiche'].'</option>'; 
    											 echo '<br>'; 
    											}
    									echo'</select>';
    										}
    								}
    					mysql_free_result($result);

  4. #4
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    salut je ne vois pas a quoi sert cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    if(!empty($tabsearch[0])) 
                      { 
                      $sql = "select * 
                            from fiches 
                            where numFiche ='".$tabsearch[0]."' 
                            or nomFiche like '%".$tabsearch[0]."%' 
                            or datecreaFiche ='".$tabsearch[0]."' 
                            or loginF ='".$tabsearch[0]."' 
                            or descriptifFiche like '%".$tabsearch[0]."%' 
                            or resolutionFiche like '%".$tabsearch[0]."%' 
                            or nomProjet ='".$search."' 
                            or nbhresolution = '".$tabsearch[0]."' 
                            or enseigne = '".$tabsearch[0]."' 
                            or privee ='".$tabsearch[0]."' 
                            or emailF = '".$tabsearch[0]."'"; 
                      }
    il me semble que cest repris dans la suite.

    de plsu ou est déclaré ta variable nombre?

    Bon courage

    Michel

  5. #5
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Bonjour,

    Fais un echo $sql pour voir la requête qui est réellement exécutée.
    Ca nous évitera de debugger 80 lignes de code et par la même occasion on verra si tous les critères sont bons
    Pensez au bouton

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 295
    Points : 87
    Points
    87
    Par défaut
    Citation Envoyé par Cybher
    salut je ne vois pas a quoi sert cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    if(!empty($tabsearch[0])) 
                      { 
                      $sql = "select * 
                            from fiches 
                            where numFiche ='".$tabsearch[0]."' 
                            or nomFiche like '%".$tabsearch[0]."%' 
                            or datecreaFiche ='".$tabsearch[0]."' 
                            or loginF ='".$tabsearch[0]."' 
                            or descriptifFiche like '%".$tabsearch[0]."%' 
                            or resolutionFiche like '%".$tabsearch[0]."%' 
                            or nomProjet ='".$search."' 
                            or nbhresolution = '".$tabsearch[0]."' 
                            or enseigne = '".$tabsearch[0]."' 
                            or privee ='".$tabsearch[0]."' 
                            or emailF = '".$tabsearch[0]."'"; 
                      }
    http://www.developpez.net/forums/vie...+recherche+sql

    J'ai retrouvé ca dans le code de la plupart des utilisateurs du meme type e requete. Il s'agit d'une requete pour préparer l'autre requete "[0]" 1 seul mot, "[$i]" si plusieurs mots.


    de plus ou est déclaré ta variable nombre?
    Oui c'etait donc $nbsearch

    Donc après avoir modifié tout ca j'ai l'erreur sur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in C:\wamp\www\rbdc\traitementsearch.php on line 154
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    				if(isset($search) && trim($search) != '') 
    					{
    					$search = str_replace('+', ' ', trim($search));
    					$search = str_replace('\'', ' ', $search);
    					$search = str_replace(',', ' ', $search);
    					$search = str_replace(':', ' ', $search);
    					$tabsearch = explode(' ' , $search );
    					//on compte le nombre de mots
    					$nbsearch = count($tabsearch);
    					//on prépare la requête SQL.
    					if(!empty($tabsearch[0]))
    						{
    						$sql = "select * 
    								from fiches
    								where (numFiche ='".$tabsearch[0]."' 
    								or nomFiche like '%".$tabsearch[0]."%'
    								or datecreaFiche ='".$tabsearch[0]."'
    								or loginF ='".$tabsearch[0]."'
    								or descriptifFiche like '%".$tabsearch[0]."%'
    								or resolutionFiche like '%".$tabsearch[0]."%'
    								or nomProjet ='".$search."'
    								or nbhresolution = '".$tabsearch[0]."'
    								or enseigne = '".$tabsearch[0]."'
    								or privee ='".$tabsearch[0]."'
    								or emailF = '".$tabsearch[0]."')";
    						}
    							// on boucle pour integrer tous les mots dans la requête
    							$sql = "select * from fiches where 1"; 
    							for ($i = 0; $i < $nbsearch; $i++)
    								{ 
    								if(!empty($tabsearch[$i]))
    									{
    									$sql .= " AND ( numFiche='".$tabsearch[$i]."'
    									or nomFiche like '%".$tabsearch[$i]."%'
    									or datecreaFiche ='".$tabsearch[$i]."'
    									or loginF ='.$tabsearch[$i].'
    									or descriptifFiche like '%".$tabsearch[$i]."%'
    									or resolutionFiche like '%".$tabsearch[$i]."%'
    									or nomProjet '".$search."'
    									or nbhresolution = '".$tabsearch[$i]."'
    									or enseigne = '".$tabsearch[$i]."'
    									or privee ='".$tabsearch[$i]."' 
    									or emailF = '".$tabsearch[$i]."' )"; 
    									}
    								}
    							// on execute la requête SQL.
    							$result = mysql_query($sql);
    							if ($result)
    								{
    								if (mysql_num_rows($result) == 0) 
    									{
    									// Si il n'y a pas de résultats
    									echo '<script language=javascript> alert ("Pas de résultat");</script>';
    									echo '<SCRIPT LANGUAGE="JavaScript">document.location.href="accueil.php" </SCRIPT>';
    									exit;
    									}else{
    										echo "<select name='searchselection'>";
    										while($datafichiers = mysql_fetch_assoc($result)) 
    											{ 
    											 echo '<option>'.$datafichiers['nomFiche'].'</option>'; 
    											 echo '<br>'; 
    											}
    									echo'</select>';
    										}
    								}
    					mysql_free_result($result);
    Dès que ca fonctionne je fait les echos

  7. #7
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    salut,

    regarde ce que contient ta variable $req. cela ne peut pas fonctionner.
    Enleve deja la portion de code que je t'ai dit
    sinon ta requete est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req = select * from fiches..... select * from fiches...
    et comme le dit Maximilian, avant d'exécuter la requete fait un écho de celle ci

    Bon courage

    Michel

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 295
    Points : 87
    Points
    87
    Par défaut
    J'ai donc modifié le code...

    l'echo sur $sql donne quand je saisie "abricot cerise" comme mot clé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    select * from fiches 
    where 1 AND ( numFiche='abricot' 
    or nomFiche like '%abricot%' 
    or datecreaFiche ='abricot' 
    or loginF ='abricot' 
    or descriptifFiche like '%abricot%' 
    or resolutionFiche like '%abricot%' 
    or nomProjet 'abricot cerise' 
    or nbhresolution = 'abricot' 
    or enseigne = 'abricot' 
    or privee ='abricot' 
    or emailF = 'abricot' ) 
    AND ( numFiche='cerise' 
    or nomFiche like '%cerise%' 
    or datecreaFiche ='cerise' 
    or loginF ='cerise' 
    or descriptifFiche like '%cerise%' 
    or resolutionFiche like '%cerise%' 
    or nomProjet 'abricot cerise' 
    or nbhresolution = 'cerise' 
    or enseigne = 'cerise' 
    or privee ='cerise' 
    or emailF = 'cerise' )

    et mon code après modification:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    <?php 
    				if(isset($search) && trim($search) != '') 
    					{
    					$search = str_replace('+', ' ', trim($search));
    					$search = str_replace('\'', ' ', $search);
    					$search = str_replace(',', ' ', $search);
    					$search = str_replace(':', ' ', $search);
    					$tabsearch = explode(' ' , $search );
    					//on compte le nombre de mots
    					$nbsearch = count($tabsearch);
    					// on boucle pour integrer tous les mots dans la requête
    							$sql = "select * from fiches where 1"; 
    							for ($i = 0; $i < $nbsearch; $i++)
    								{ 
    								if(!empty($tabsearch[$i]))
    									{
    									$sql .= " AND ( numFiche='".$tabsearch[$i]."'
    									or nomFiche like '%".$tabsearch[$i]."%'
    									or datecreaFiche ='".$tabsearch[$i]."'
    									or loginF ='".$tabsearch[$i]."'
    									or descriptifFiche like '%".$tabsearch[$i]."%'
    									or resolutionFiche like '%".$tabsearch[$i]."%'
    									or nomProjet '".$search."'
    									or nbhresolution = '".$tabsearch[$i]."'
    									or enseigne = '".$tabsearch[$i]."'
    									or privee ='".$tabsearch[$i]."' 
    									or emailF = '".$tabsearch[$i]."' )"; 
    									}
    								}
    							echo $sql;
    							// on execute la requête SQL.
    							$result = mysql_query($sql);
    							if ($result)
    								{
    								if (mysql_num_rows($result) == 0) 
    									{
    									// Si il n'y a pas de résultats
    									echo '<script language=javascript> alert ("Pas de résultat");</script>';
    									echo '<SCRIPT LANGUAGE="JavaScript">document.location.href="accueil.php" </SCRIPT>';
    									exit;
    									}else{
    										echo "<select name='searchselection'>";
    										while($datafichiers = mysql_fetch_assoc($result)) 
    											{ 
    											 echo '<option>'.$datafichiers['nomFiche'].'</option>'; 
    											 echo '<br>'; 
    											}
    									echo'</select>';
    										}
    								}
    					mysql_free_result($result);
    					}else{	
    						echo '<script language=javascript> alert ("Indiquez un mot clé pour effectuer une recherche");</script>';
    						echo '<SCRIPT LANGUAGE="JavaScript">document.location.href="accueil.php" </SCRIPT>';
    						exit;
    						}
    					?>
    a la place du select j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in C:\wamp\www\rbdc\traitementsearch.php on line 138

  9. #9
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Citation Envoyé par vincedjs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    or nomProjet 'abricot cerise'
    Ca serait pas là l'erreur ?
    Pensez au bouton

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 295
    Points : 87
    Points
    87
    Par défaut
    nop

    J'ai modifié

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    $sql = "select * from fiches where 1"; 
    							for ($i = 0; $i < $nbsearch; $i++)
    								{ 
    								if(!empty($tabsearch[$i]))
    									{
    									$sql .= " AND ( numFiche='".$tabsearch[$i]."'
    									or nomFiche like '%".$tabsearch[$i]."%'
    									or datecreaFiche ='".$tabsearch[$i]."'
    									or loginF ='".$tabsearch[$i]."'
    									or descriptifFiche like '%".$tabsearch[$i]."%'
    									or resolutionFiche like '%".$tabsearch[$i]."%'
    									or nomProjet '".$tabsearch[$i]."'
    									or nbhresolution = '".$tabsearch[$i]."'
    									or enseigne = '".$tabsearch[$i]."'
    									or privee ='".$tabsearch[$i]."' 
    									or emailF = '".$tabsearch[$i]."' )"; 
    									}
    								}
    							echo $sql;


    et ca donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    select * 
    from fiches 
    where 1 AND ( numFiche='abricot' 
    or nomFiche like '%abricot%' 
    or datecreaFiche ='abricot' 
    or loginF ='abricot' 
    or descriptifFiche like '%abricot%' 
    or resolutionFiche like '%abricot%' 
    or nomProjet 'abricot' 
    or nbhresolution = 'abricot' 
    or enseigne = 'abricot' 
    or privee ='abricot' 
    or emailF = 'abricot' ) 
    AND ( numFiche='cerise' 
    or nomFiche like '%cerise%' 
    or datecreaFiche ='cerise' 
    or loginF ='cerise' 
    or descriptifFiche like '%cerise%' 
    or resolutionFiche like '%cerise%' 
    or nomProjet 'cerise' 
    or nbhresolution = 'cerise' 
    or enseigne = 'cerise' 
    or privee ='cerise' 
    or emailF = 'cerise' )
     
    Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in C:\wamp\www\rbdc\traitementsearch.php on line 138

  11. #11
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Alors:
    $result = mysql_query($sql) or die ( mysql_error() ) ;
    ... comme ça t'auras un message d'erreur explicite.


    Et une petite recherche FULLTEXT, ça sera plus rapide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select *
    from fiches
    where 1 
    AND MATCH (numFiche, nomFiche, datecreaFiche, ... ) AGAINST ('abricot')AND MATCH (numFiche, nomFiche, datecreaFiche, ... ) AGAINST ('cerise') ;
    Question, pourquoi tu peux avoir "abricot" dans la date ?
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 295
    Points : 87
    Points
    87
    Par défaut
    Abricot c'est une valeur d'essai saisie dans mon champ de formulaire auparavant. Abricot, bateau, xxx, yyyy, peu importe.

    Pour la date ca permet à l'utilisateur d'avoir toute les fiches saisie à une date précise. donc si l'utilisateur ne saisie pas de date cela ne genera pas puisque ca ne correspondra pas. Et ainsi si il veut les fiches d'aujourd hui: il tape "13/03/06" selon le type de donnée à vérifier.

  13. #13
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 129
    Points : 127
    Points
    127
    Par défaut
    Re,

    "WHERE 1" ???

    Jamais je ne fais de "where 1" dans mes requetes, pourquoi faire un "where 1" si tu ne veux pas tout avoir ?

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 295
    Points : 87
    Points
    87
    Par défaut
    Citation Envoyé par hackrobat
    Re,

    "WHERE 1" ???

    Jamais je ne fais de "where 1" dans mes requetes, pourquoi faire un "where 1" si tu ne veux pas tout avoir ?
    Bein écoute, au fur et a mesure qu'on m'aide j'ai agrémenter mon code.

    C'est vrai je l'utiliser quand je fesai ma requete sur l'indice [0] et ensuite [$i] avec 1 and qui sert, mais la il sert vraiment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $sql = "select * 
    									from fiches 
    									where 1 
    									AND ( numFiche='".$tabsearch[$i]."'
    									or nomFiche like '%".$tabsearch[$i]."%'
    									or datecreaFiche ='".$tabsearch[$i]."'
    									or loginF ='".$tabsearch[$i]."'
    									or descriptifFiche like '%".$tabsearch[$i]."%'
    									or resolutionFiche like '%".$tabsearch[$i]."%'
    									or nomProjet '".$tabsearch[$i]."'
    									or nbhresolution = '".$tabsearch[$i]."'
    									or enseigne = '".$tabsearch[$i]."'
    									or privee ='".$tabsearch[$i]."' 
    									or emailF = '".$tabsearch[$i]."' )";

  15. #15
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 129
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par vincedjs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $sql = "select * from fiches 
    where 1 
    AND ( numFiche='".$tabsearch[$i]."'
    or nomFiche like '%".$tabsearch[$i]."%'
    or datecreaFiche ='".$tabsearch[$i]."'
    or loginF ='".$tabsearch[$i]."'
    or descriptifFiche like '%".$tabsearch[$i]."%'
    or resolutionFiche like '%".$tabsearch[$i]."%'
    or nomProjet '".$tabsearch[$i]."'
    or nbhresolution = '".$tabsearch[$i]."'
    or enseigne = '".$tabsearch[$i]."'
    or privee ='".$tabsearch[$i]."' 
    or emailF = '".$tabsearch[$i]."' )";
    Cela reste une parenthèse, dans ton code j'aurais mis directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $sql = "select * from fiches 
    where ( numFiche='".$tabsearch[$i]."'
    or nomFiche like '%".$tabsearch[$i]."%'
    or datecreaFiche ='".$tabsearch[$i]."'
    or loginF ='".$tabsearch[$i]."'
    or descriptifFiche like '%".$tabsearch[$i]."%'
    or resolutionFiche like '%".$tabsearch[$i]."%'
    or nomProjet '".$tabsearch[$i]."'
    or nbhresolution = '".$tabsearch[$i]."'
    or enseigne = '".$tabsearch[$i]."'
    or privee ='".$tabsearch[$i]."' 
    or emailF = '".$tabsearch[$i]."' )";
    Pour revenir à ton code :
    Citation Envoyé par vincedjs
    select *
    from fiches
    where 1 AND ( numFiche='abricot'
    or nomFiche like '%abricot%'
    or datecreaFiche ='abricot'
    or loginF ='abricot'
    or descriptifFiche like '%abricot%'
    or resolutionFiche like '%abricot%'
    or nomProjet 'abricot'
    or nbhresolution = 'abricot'
    or enseigne = 'abricot'
    or privee ='abricot'
    or emailF = 'abricot' )
    AND ( numFiche='cerise'
    or nomFiche like '%cerise%'
    or datecreaFiche ='cerise'
    or loginF ='cerise'
    or descriptifFiche like '%cerise%'
    or resolutionFiche like '%cerise%'
    or nomProjet 'cerise'
    or nbhresolution = 'cerise'
    or enseigne = 'cerise'
    or privee ='cerise'
    or emailF = 'cerise' )
    Pourquoi un AND et non un OR ?

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 295
    Points : 87
    Points
    87
    Par défaut
    J'ai donc mis ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    								if(!empty($tabsearch[$i]))
    									{
    									$sql = "select * from fiches 
    									where ( numFiche='".$tabsearch[$i]."' 
    									or nomFiche like '%".$tabsearch[$i]."%' 
    									or datecreaFiche ='".$tabsearch[$i]."' 
    									or loginF ='".$tabsearch[$i]."' 
    									or descriptifFiche like '%".$tabsearch[$i]."%' 
    									or resolutionFiche like '%".$tabsearch[$i]."%' 
    									or nomProjet '".$tabsearch[$i]."' 
    									or nbhresolution = '".$tabsearch[$i]."' 
    									or enseigne = '".$tabsearch[$i]."' 
    									or privee ='".$tabsearch[$i]."' 
    									or emailF = '".$tabsearch[$i]."' )"; 
    									}
    								}
    							echo $sql;
    et "Pourquoi un AND et non un OR ?" oui c etai 1 or qu'il fallait mettre, mais dans ton code que j'ai mis je n'en es plus besoin d'ailleur je doute du résultat.

    MOn echo donne maintenant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    select * 
    from fiches 
    where ( numFiche='cerise' 
    or nomFiche like '%cerise%' 
    or datecreaFiche ='cerise' 
    or loginF ='cerise'
    or descriptifFiche like '%cerise%' 
    or resolutionFiche like '%cerise%' 
    or nomProjet 'cerise' 
    or nbhresolution = 'cerise' 
    or enseigne = 'cerise' 
    or privee ='cerise' 
    or emailF = 'cerise' )
    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 ''cerise' or nbhresolution = 'cerise' or enseigne = 'cerise' at line 8

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 295
    Points : 87
    Points
    87
    Par défaut
    je pense que le "OR" a la base "AND" etait primordial puisque maintenant il ne tiens compte que du dernier mot saisie alors qu'on peu saisir plusieurs mots dans le champs.


    Voici mon code complet si jamais quelqu'un trouve quelque chose

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    <?php 
    				if(isset($search) && trim($search) != '') 
    					{
    					$search = str_replace('+', ' ', trim($search));
    					$search = str_replace('\'', ' ', $search);
    					$search = str_replace(',', ' ', $search);
    					$search = str_replace(':', ' ', $search);
    					$tabsearch = explode(' ' , $search );
    					//on compte le nombre de mots
    					$nbsearch = count($tabsearch);
    					// on boucle pour integrer tous les mots dans la requête
    							for ($i = 0; $i < $nbsearch; $i++)
    								{ 
    								if(!empty($tabsearch[$i]))
    									{
    									$sql = "select * from fiches 
    									where ( numFiche='".$tabsearch[$i]."' 
    									or nomFiche like '%".$tabsearch[$i]."%' 
    									or datecreaFiche ='".$tabsearch[$i]."' 
    									or loginF ='".$tabsearch[$i]."' 
    									or descriptifFiche like '%".$tabsearch[$i]."%' 
    									or resolutionFiche like '%".$tabsearch[$i]."%' 
    									or nomProjet '".$tabsearch[$i]."' 
    									or nbhresolution = '".$tabsearch[$i]."' 
    									or enseigne = '".$tabsearch[$i]."' 
    									or privee ='".$tabsearch[$i]."' 
    									or emailF = '".$tabsearch[$i]."' )"; 
    									}
    								}
    							echo $sql;
    							// on execute la requête SQL.
    							$result = mysql_query($sql)or die ( mysql_error() ) ;
    							if ($result)
    								{
    								if (mysql_num_rows($result) == 0) 
    									{
    									// Si il n'y a pas de résultats
    									echo '<script language=javascript> alert ("Pas de résultat");</script>';
    									echo '<SCRIPT LANGUAGE="JavaScript">document.location.href="accueil.php" </SCRIPT>';
    									exit;
    									}else{
    										echo "<select name='searchselection'>";
    										while($datafichiers = mysql_fetch_assoc($result)) 
    											{ 
    											 echo '<option>'.$datafichiers['nomFiche'].'</option>'; 
    											 echo '<br>'; 
    											}
    									echo'</select>';
    										}
    								}
    					mysql_free_result($result);
    					}else{	
    						echo '<script language=javascript> alert ("Indiquez un mot clé pour effectuer une recherche");</script>';
    						echo '<SCRIPT LANGUAGE="JavaScript">document.location.href="accueil.php" </SCRIPT>';
    						exit;
    						}
    					?>

  18. #18
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    salut,

    je doute de la validité de ton code quand tu as plusieurs mots!
    regarde avec i =1 par exemple ce que va contenir ton $req.
    (le faire "a la main" pour comprendre ce que fait code

    bon courage

    Michel

  19. #19
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Il suffit de lire les messages d'erreur (merci mysql_error() ! ) :
    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 ''cerise' or nbhresolution = 'cerise' or enseigne = 'cerise' at line 8
    Il manque un = ici :
    or nomProjet = 'cerise'
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 295
    Points : 87
    Points
    87
    Par défaut
    Citation Envoyé par pcaboche
    Il suffit de lire les messages d'erreur (merci mysql_error() ! ) :
    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 ''cerise' or nbhresolution = 'cerise' or enseigne = 'cerise' at line 8
    Il manque un = ici :
    or nomProjet = 'cerise'
    Exact j'ai du le supprimer a force de modifier le code.

    Donc maintenant quand je saisie "abricot banane cerise", il ne prend en compte que "cerise" le dernier avec donc dans l'echo:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    select * from fiches 
    where ( numFiche='cerise' 
    or nomFiche like '%cerise%' 
    or datecreaFiche ='cerise' 
    or loginF ='cerise' 
    or descriptifFiche like '%cerise%' 
    or resolutionFiche like '%cerise%' 
    or nomProjet ='cerise' 
    or nbhresolution = 'cerise' 
    or enseigne = 'cerise' 
    or privee ='cerise' 
    or emailF = 'cerise' )
    Par contre il m'affiche toujours toute les fiches dans ma liste déroulante.

    1) Problème d'indice, je dois remettre le "OR" celui qu'on ma conseillé d'enlever car cela prenai en compte tout les mots il me semble ??

    2) Pourqoi il m'affiche tout les enregistrements dans ma liste : Pourtant ma requete correspond bien aux critères de ma table.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. [MySQL] Requete pour moteur de recherche
    Par megavolte dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 06/03/2009, 15h52
  2. Requete SQL pour moteur de recherche
    Par sami2008 dans le forum Requêtes
    Réponses: 1
    Dernier message: 24/09/2008, 07h38
  3. Dictionnaire sémantique pour moteur de recherche?
    Par Glavio dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 20/07/2007, 11h36
  4. Probleme vba pour moteur de recherche ACCESS
    Par sylvaindenisbe dans le forum Modélisation
    Réponses: 1
    Dernier message: 10/05/2007, 14h30
  5. Algorithme d'indexation pour moteur de recherche
    Par caspertn dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 24/04/2006, 16h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo