Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
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 11/07/2011, 10h13   #1
Membre du Club
 
Avatar de fazpedro
 
Homme
Inscription : août 2009
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 360
Points : 64
Points : 64
Par défaut Recherche interne Mysql

Bonjour,
je souhaite avoir un moteur de recherche interne sur ma base SQL et j'ai un petit souci au niveau des majuscules :

si je saisis "shellys", la requête ne trouve rien et si je saisi "Shellys", la requête me renvoi le bon évènement...

Merci de votre aide.

moteur_de_recherche.php (formulaire) :
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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />	
<title>MON SITE</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
 
<body>
 
<?php include('bandeau.php'); ?> <!-- insère le bandeau principal en haut -->
 
<div id="mainContent">
 
<br />	
<p>
<form action="recherche_interne.php" method="POST">Entrer le nom de l'artiste ici : 
<input type="text" tabindex ="1" name="recherche" 
onfocus="this.className='textarea_focus';" onblur="this.className='';valide(this, 'err_mdp');" class="ev" />
 
<br />
<p><b>ne pas indiquer les pronoms comme "Le" "Les" "The" ..merci.</b></p>
</p>
<br />
 
<input type="submit" tabindex ="2" value="Rechercher" />
 
</form>
 
</div>
 
<?php include('bas_de_page.php'); ?> <!-- insère le bas de page  -->
 
</body>
 
</html>
recherche_interne.php (résultats) :
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />	
<title>MON SITE</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
 
<body>
 
<?php include('bandeau.php'); ?> <!-- insère le bandeau principal en haut -->
 
<div id="mainContent">
 
 
<h2>R&eacute;sultats</h2>
 
<?php
// connexion à la base
require("configuration.php");
$sql = connect_sql();
//On determine l'expression a rechercher
if(isset($_POST['recherche'])) $saisie = $_POST['recherche'];
else
{
	echo '<b>'.'Vous n\'avez rien saisi !'.'</b>';
	echo '<p>'.$saisie.'</p>';
	echo '<a href="javascript:window.history.go(-1)">'.'Retour'.'</a>'; // retour en page précédente
}
 
	echo '<p>'.'<b>'.$saisie.'</b>'.'</p>';
	$rec = htmlentities($_POST['recherche']);
	//ayant tout des mots dans leurs informations
    $mots = explode(' ',$rec);//sépare l'expression en mots cles
    foreach($mots as $mot)
    {
	$req2 = 'SELECT * FROM evenement WHERE nom LIKE "%'.$mot.'%" ';
    }
	$requete = mysql_query($req2) or die ('Erreur : '.mysql_error() );
	$total = mysql_num_rows($requete);
	//On vérifie que la table contient quelque chose
	if
	(mysql_num_rows($requete) == 0)
	{
	echo '<p>'.'<b>'.'Aucun &eacute;v&egrave;nement ! '.'</b>'.'</p>'.'<br>'.'</br>';
	echo '<a href="javascript:window.history.go(-1)">'.'Retour'.'</a>'; // retour en page précédente
	}
	//Si il y a des entrées	  
	else
	{
	//On fait une boucle pour sortir toutes les entrées
	while($affiche = mysql_fetch_array($requete))
	{
	//On remet la date au format français
	setlocale (LC_TIME, 'fr_FR.UTF8');
	$date_affiche = $affiche["date_ev"];
	$date_vue = strftime("%A %d %B",strtotime("$date_affiche"));
	//On affiche les entrées
	echo '<br />';
	echo '<b>'.$affiche["type_evenement"]."   ".'</b>';
	echo '<br />';
	echo "     ".$affiche["type_etab"]."   ";
	echo '<b>'."     ".$date_vue."   ".'</b>';
	echo "     ".$affiche["secteur"]."   ";
	echo "Début à : ".$affiche["heure"]."   ";
	echo "  Tarif : ".$affiche["tarif"]."   ";
	echo " ".$affiche["montant"]."   ";
	echo " où ? ".$affiche["lieu"]."   ";echo '<br />';
	echo '<br />';
	echo '<div class="autre">';
	echo '<span style="color:#8E236B;">';
	echo '<strong>';
	echo $affiche["nom"];
	echo '</strong>';
	echo '</span>';
	echo '<br />';
	echo '<div class="cache">';
	echo '<strong>';
	echo $affiche["description"];
	echo " mis en ligne par  ".$affiche["pseudo_ev"]."   ";
	echo '</strong>';
	echo '</div>';
	echo '</div>';
	echo '<br />';
	}	// fin du while
 
	echo '<br />';
	echo '<a href="javascript:window.history.go(-1)">'.'Retour'.'</a>'; // retour en page précédente
 
	}	//on ferme le else
 
// Fermeture de la connexion à la base de données
mysql_close();		
 
?>
 
<?php include('bas_de_page.php'); ?> <!-- insère le bas de page  -->
</body>
</html>
fazpedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 10h21   #2
Membre habitué
 
Inscription : décembre 2007
Messages : 181
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 181
Points : 140
Points : 140
Salut,

jette un coup d'oeil sur ce post, je pense que ta solution s'y trouve dors et déjà!

http://www.developpez.net/forums/d29...se-caracteres/
roduce est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 15h20   #3
Membre du Club
 
Avatar de fazpedro
 
Homme
Inscription : août 2009
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 360
Points : 64
Points : 64
Désolé roduce mais j'ai un message d'erreur :
Parse error: syntax error, unexpected T_STRING in /mnt/154/sdc/8/e/fazpedro/recherche_interne.php on line 39

j'avais modifié la ligne
Code :
$req2 = 'SELECT * FROM evenement WHERE nom LIKE "%'.$mot.'%" ';
par cela :
Code :
$req2 = 'SELECT * FROM evenement WHERE nom LIKE "%'.$mot.'%" ' COLLATE utf8_unicode_ci;
c'est peut-être pas là qu'il faut mettre COLLATE ?
Merci de l'aide !
fazpedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 15h22   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
quelle est l'interclassement de ta table ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 15h26   #5
Membre habitué
 
Inscription : décembre 2007
Messages : 181
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 181
Points : 140
Points : 140
[QUOTE=fazpedro;6116217]
Code :
$req2 = 'SELECT * FROM evenement WHERE nom LIKE "%'.$mot.'%" ' COLLATE utf8_unicode_ci;
[quote]

en un rapide coup d'oeil, décale l'apostrophe

Code :
$req2 = 'SELECT * FROM evenement WHERE nom LIKE "%'.$mot.'%"  COLLATE utf8_unicode_ci';
roduce est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 18h54   #6
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Il faut juste choisir le bon type des champs. Je pense le type BLOB fera ton bonheur.
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 20h21   #7
Membre du Club
 
Avatar de fazpedro
 
Homme
Inscription : août 2009
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 360
Points : 64
Points : 64
j'ai modifié et çela fonctionne ..presque :

quand je n'indique rien, il me met TOUS les enregistrements....
comment faire s'il ne saisit rien ? où est mon erreur ?
merci beaucoup.

recherche_interne.php :
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />	
<title>MON SITE</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
 
<body>
 
<?php include('bandeau.php'); ?> <!-- insère le bandeau principal en haut -->
 
<div id="mainContent">
 
 
<?php
// connexion à la base
require("configuration.php");
$sql = connect_sql();
//On determine l'expression a rechercher
if(isset($_POST['recherche'])) $saisie = $_POST['recherche'];
else
{
	$saisie = " ";
	echo '<b>'.'Vous n\'avez rien saisi !'.'</b>';
	echo '<p>'.$saisie.'</p>';
	echo '<a href="javascript:window.history.go(-1)">'.'Retour'.'</a>'; // retour en page précédente
}
	echo '<p>'.'Voici les r&eacute;sultats pour :'.'<h2>'.'<strong>'.$saisie.'</strong>'.'</h2>'.'</p>';
	$rec = htmlentities($_POST['recherche']);
	//ayant tout des mots dans leurs informations
    $mots = explode(' ',$rec);//sépare l'expression en mots cles
    foreach($mots as $mot)
    {
	$req2 = 'SELECT * FROM evenement WHERE nom COLLATE latin1_general_cs LIKE CONVERT(_utf8 "%'.$mot.'%" USING utf8) COLLATE utf8_general_ci ';
	}
	$requete = mysql_query($req2) or die ('Erreur : '.mysql_error() );
	$total = mysql_num_rows($requete);
	//On vérifie que la table contient quelque chose
	if
	(mysql_num_rows($requete) == 0)
	{
	echo '<p>'.'<b>'.'Aucun &eacute;v&egrave;nement ! '.'</b>'.'</p>'.'<br>'.'</br>';
	echo '<a href="javascript:window.history.go(-1)">'.'Retour'.'</a>'; // retour en page précédente
	}
	//Si il y a des entrées	  
	else
	{
	//On fait une boucle pour sortir toutes les entrées
	while($affiche = mysql_fetch_array($requete))
	{
	//On remet la date au format français
	setlocale (LC_TIME, 'fr_FR.UTF8');
	$date_affiche = $affiche["date_ev"];
	$date_vue = strftime("%A %d %B",strtotime("$date_affiche"));
	//On affiche les entrées
	echo '<br />';
	echo '<b>'.$affiche["type_evenement"]."   ".'</b>';
	echo '<br />';
	echo "     ".$affiche["type_etab"]."   ";
	echo '<b>'."     ".$date_vue."   ".'</b>';
	echo "     ".$affiche["secteur"]."   ";
	echo "Début à : ".$affiche["heure"]."   ";
	echo "  Tarif : ".$affiche["tarif"]."   ";
	echo " ".$affiche["montant"]."   ";
	echo " où ? ".$affiche["lieu"]."   ";echo '<br />';
	echo '<br />';
	echo '<div class="autre">';
	echo '<span style="color:#8E236B;">';
	echo '<strong>';
	echo $affiche["nom"];
	echo '</strong>';
	echo '</span>';
	echo '<br />';
	echo '<div class="cache">';
	echo '<strong>';
	echo $affiche["description"];
	echo " mis en ligne par  ".$affiche["pseudo_ev"]."   ";
	echo '</strong>';
	echo '</div>';
	echo '</div>';
	echo '<br />';
	}	// fin du while
 
	echo '<br />';
	echo '<a href="javascript:window.history.go(-1)">'.'Retour'.'</a>'; // retour en page précédente
 
	}	//on ferme le else
 
// Fermeture de la connexion à la base de données
mysql_close();		
 
?>
 
<?php include('bas_de_page.php'); ?> <!-- insère le bas de page  -->
</body>
</html>
moteur_de_recherche.php :
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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />	
<title>MON SITE</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
 
<body>
 
<?php include('bandeau.php'); ?> <!-- insère le bandeau principal en haut -->
 
<div id="mainContent">
 
<br />	
<p>
<form action="recherche_interne.php" method="POST">Entrer le nom de l'artiste ici : 
<input type="text" tabindex ="1" name="recherche" value="" 
onfocus="this.className='textarea_focus';" onblur="this.className='';valide(this, 'err_mdp');" class="ev" />
 
<br />
<p><b>ne pas indiquer les pronoms comme "Le" "Les" "The" ..merci.</b></p>
</p>
<br />
 
<input type="submit" tabindex ="2" value="Rechercher" />
 
</form>
 
</div>
 
<?php include('bas_de_page.php'); ?> <!-- insère le bas de page  -->
 
</body>
 
</html>
fazpedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 17h07   #8
Membre du Club
 
Avatar de fazpedro
 
Homme
Inscription : août 2009
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 360
Points : 64
Points : 64
j'ai trouvé... !
merci !
j'ai remis ma base en utf8, c'est plus facile... et je met la saisie sans accent avec strtr...


voici mes codes modifiés :

moteur_de_recherche.php :
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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />	
<title>MON SITE</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
 
<body>
 
<?php include('bandeau.php'); ?> <!-- insère le bandeau principal en haut -->
 
<div id="mainContent">
 
<br />	
<p>
<form action="recherche_interne.php" method="POST">Entrer le nom de l'artiste ici : 
<input type="text" tabindex ="1" name="recherche" value="" 
onfocus="this.className='textarea_focus';" onblur="this.className='';valide(this, 'err_mdp');" class="ev" />
 
<br />
<p><b>ne pas indiquer les pronoms comme "Le" "Les" "The" ..merci.</b></p>
</p>
<br />
 
<input type="submit" tabindex ="2" value="Rechercher" />
 
</form>
 
</div>
 
<?php include('bas_de_page.php'); ?> <!-- insère le bas de page  -->
 
</body>
 
</html>
Action avec "submit" => recherche_interne.php :
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />	
<title>MON SITE</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
 
<body>
 
<?php include('bandeau.php'); ?> <!-- insère le bandeau principal en haut -->
 
<div id="mainContent">
 
 
<?php
// connexion à la base
require("configuration.php");
$sql = connect_sql();
mysql_query("SET NAMES 'utf8'");
//On determine l'expression a rechercher
// if(isset($_POST['recherche'])) 
if( $_POST['recherche'] )
{
	$saisie2 = $_POST['recherche'];
	$remplacements = array('à' => 'a','é' => 'e','è' => 'e','ù' => 'u','ê' => 'e','ô' => 'o' );
	$saisie = strtr($saisie2, $remplacements);
	//ayant tout des mots dans leurs informations
    $mots = explode(' ',$saisie);//sépare l'expression en mots cles
    foreach($mots as $mot)
    {
	$req2 = 'SELECT * FROM evenement WHERE nom LIKE "%'.$mot.'%" ';
	}
	$requete = mysql_query($req2) or die ('Erreur : '.mysql_error() );
	$total = mysql_num_rows($requete);
	//On vérifie que la table contient quelque chose
	if
	(mysql_num_rows($requete) == 0)
	{
	echo '<p>'.'Aucun &eacute;v&egrave;nement pour :'.'<h2>'.'<strong>'.$saisie2.'</strong>'.'</h2>'.'</p>';
	echo '<a href="javascript:window.history.go(-1)">'.'Retour'.'</a>'; // retour en page précédente
	}
	//Si il y a des entrées	  
	else
	{
 
	echo '<p>'.'Voici les r&eacute;sultats pour :'.'<h2>'.'<strong>'.$saisie2.'</strong>'.'</h2>'.'</p>';
	$rec = htmlentities($saisie);
	//On fait une boucle pour sortir toutes les entrées
	while($affiche = mysql_fetch_array($requete))
	{
	//On remet la date au format français
	setlocale (LC_TIME, 'fr_FR.UTF8');
	$date_affiche = $affiche["date_ev"];
	$date_vue = strftime("%A %d %B",strtotime("$date_affiche"));
	//On affiche les entrées
	echo '<br />';
	echo '<b>'.$affiche["type_evenement"]."   ".'</b>';
	echo '<br />';
	echo "     ".$affiche["type_etab"]."   ";
	echo '<b>'."     ".$date_vue."   ".'</b>';
	echo "     ".$affiche["secteur"]."   ";
	echo "Début à : ".$affiche["heure"]."   ";
	echo "  Tarif : ".$affiche["tarif"]."   ";
	echo " ".$affiche["montant"]."   ";
	echo " où ? ".$affiche["lieu"]."   ";echo '<br />';
	echo '<br />';
	echo '<div class="autre">';
	echo '<span style="color:#8E236B;">';
	echo '<strong>';
	echo $affiche["nom"];
	echo '</strong>';
	echo '</span>';
	echo '<br />';
	echo '<div class="cache">';
	echo '<strong>';
	echo $affiche["description"];
	echo " mis en ligne par  ".$affiche["pseudo_ev"]."   ";
	echo '</strong>';
	echo '</div>';
	echo '</div>';
	echo '<br />';
	}	// fin du while
 
 }	// fin du ELSE
 
 }	// fin du isset
 
 
else	
{
	$saisie = "";
	echo '<b>'.'Vous n\'avez rien saisi !'.'</b>';
	echo '<p>'.$saisie.'</p>';
	echo '<a href="javascript:window.history.go(-1)">'.'Retour'.'</a>'; // retour en page précédente
} // fin du deuxième ELSE
 
 
// Fermeture de la connexion à la base de données
mysql_close();		
 
?>
 
<?php include('bas_de_page.php'); ?> <!-- insère le bas de page  -->
</body>
</html>
fazpedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h43.


 
 
 
 
Partenaires

Hébergement Web