Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/03/2006, 09h44   #1
Membre du Club
 
Vincent
Inscription : janvier 2006
Messages : 295
Détails du profil
Informations personnelles :
Nom : Vincent

Informations forums :
Inscription : janvier 2006
Messages : 295
Points : 51
Points : 51
Par défaut [SQL] Moteur de recherche problème affichage donnée dans select

Bonjour, j'ai 1 soucis avec mon moteur de recherche SQL.
Il est donc cencé, après la saisie de mot(s) clé(s) dans 1 formulaire, effectuer une recherche SQL dans mes champs d'une TABLE,
afin de vérifier si le(s) mot(s) sont contenus dans 1 des champs ( reprèsentant des nomFiches, descriptions, ( des champs, date,texte, entier,... ).
Et donc afficher les nomFiche correspondant à la recherche dans mon select.

j'affiche donc dans un select le résultat, seulement mon select est vide:
Code :
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
$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>'.$row['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;
		}
le code source donne:
Code :
1
2
3
 
<select name='searchselection'><option></option><br><option></option>
<br><option></option><br><option></option><br><option></option><br></select>

la base ne contient que 5 nomFiche

Il esai donc d'en afficher 5, mais

1) la recherche ne selectionne pas elle affiche les 5

2) rien n apparait dans mon select
vincedjs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2006, 09h47   #2
Membre du Club
 
Vincent
Inscription : janvier 2006
Messages : 295
Détails du profil
Informations personnelles :
Nom : Vincent

Informations forums :
Inscription : janvier 2006
Messages : 295
Points : 51
Points : 51
j'ai oublier de poster la page complete avec la requete
Code :
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
68
69
70
71
<?php 
include ('secure.php');
include ('mysqlconnect.php'); 
$projet = $_POST['btprojet'];
$search = $_POST['textfieldsearch'];
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.
	$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++)
				{ 
				$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>'.$row['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;
		}
?>
vincedjs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2006, 10h00   #3
Expert Confirmé
 
Avatar de yiannis
 
Inscription : septembre 2005
Messages : 1 499
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : septembre 2005
Messages : 1 499
Points : 2 563
Points : 2 563
bonjour,

essai comme cela:
Code :
1
2
3
4
5
6
 
                  while($datafichiers = mysql_fetch_assoc($result))
                     {
                     echo '<option>'.$datafichiers['nomFiche'].'</option>';
                     echo '<br>';
                     }
car $row ne correspond a rien
__________________
"Ce besoin de remords qui précède le Mal, que dis-je ! qui le crée..." E. CIORAN
yiannis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2006, 13h23   #4
Membre du Club
 
Vincent
Inscription : janvier 2006
Messages : 295
Détails du profil
Informations personnelles :
Nom : Vincent

Informations forums :
Inscription : janvier 2006
Messages : 295
Points : 51
Points : 51
Exact, l'affichage fonctionne, par contre j'ai 1 soucis, j'ai l'impression qu'il m'affiche toute les fiches de ma bdd.
1 problème de code ? 1problème de requete ? 1 probleme de performance?
Code :
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
				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.
					$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++)
								{ 
								$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]."' )"; 
								}
vincedjs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2006, 13h42   #5
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Salut

i ou $i ?
Suggestion : utiliser str_replace() avec des arrays plutôt que 4 fois à la suite.
Attention : dans le cas où ton token est vide, tu compares avec une chaîne vide sur tous tes champs, ce qui fait qu'ils retournent tous vrai. Cela ne m'étonne pas que tu aies toute la table dans le résultat ^^

Vérifie à chaque fois que $tabsearch[$i] est !empty(), par exemple.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2006, 14h15   #6
Membre du Club
 
Vincent
Inscription : janvier 2006
Messages : 295
Détails du profil
Informations personnelles :
Nom : Vincent

Informations forums :
Inscription : janvier 2006
Messages : 295
Points : 51
Points : 51
Exact c'etait bien $i, j'ai donc appliqué le !empty dans ma boucle ^^, seulement j'ai toujours toute mes fiches

Code :
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
					$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]."' )"; 
									}
								}
vincedjs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2006, 14h30   #7
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Il faut aussi le vérifier avec $tabsearch[0]
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2006, 15h08   #8
Membre du Club
 
Vincent
Inscription : janvier 2006
Messages : 295
Détails du profil
Informations personnelles :
Nom : Vincent

Informations forums :
Inscription : janvier 2006
Messages : 295
Points : 51
Points : 51
Toujours pareil

Code :
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);
vincedjs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2006, 18h07   #9
Membre du Club
 
Vincent
Inscription : janvier 2006
Messages : 295
Détails du profil
Informations personnelles :
Nom : Vincent

Informations forums :
Inscription : janvier 2006
Messages : 295
Points : 51
Points : 51
Personne a une idée :
vincedjs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2006, 20h27   #10
Invité de passage
 
Inscription : avril 2006
Messages : 3
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 3
Points : 2
Points : 2
Salut,
je debarque via une recherche sur google alors je sais pas du tout si tu as regle ton soucis mais il me semble que sur ton dernier post, une petite erreur apparaisse , je suis pas sur mais verifie:
tu as for($i =0;$i<$nb;$i++)......ca serait pas mieux avec
for($i=0;$i<$nbsearch;$i++) ?
jeffrey_06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h53.


 
 
 
 
Partenaires

Hébergement Web