Mise en majuscules

cs_malaysia Messages postés 50 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 12 juillet 2005 - 6 juil. 2005 à 22:28
cs_malaysia Messages postés 50 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 12 juillet 2005 - 8 juil. 2005 à 19:01
Bonsoir,

Je souhaite que lors d'une recherche dans une base MySQL à partir d'un formulaire en ligne, la recherche se fasse sur les mots de la base qu'ils soient en majuscules, en minuscules ou un mélange. Comment faire ?
Dans un premier temps j'avais pensé forcé les majuscules puisque les mots cherchés sont en général en majuscules (noms propres) mais si on cherche sur d'autres mots que les noms propres ça ne fonctionne plus. J'avais :

$res = strtoupper ($_POST[recherche]);
$req = mysql_query("SELECT url, description from annuaire_tbl where description LIKE '%res%' Order by url Asc limit 0,1 ") or die ("erreur req ".mysql_error());

Mais ça ne marche pas de toute façon.

25 réponses

cs_malaysia Messages postés 50 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 12 juillet 2005
6 juil. 2005 à 22:35
Je corrige ce que je viens d'écrire (mais ça ne marche toujours pas):

$rem = strtoupper ($_POST['recherche']);
$req = mysql_query("SELECT url, description from annuaire_tbl where description LIKE '%$rem%' Order by url Asc limit 0,1 ") or die ("erreur req ".mysql_error());
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 juil. 2005 à 10:21
Hello,



heu...LIKE n'est pas sensible a la casse... (a moins d'utiliser BINARY).
0
witebs Messages postés 3 Date d'inscription jeudi 11 septembre 2003 Statut Membre Dernière intervention 7 juillet 2005
7 juil. 2005 à 10:50
comme disait ma grand mere: met des quotes !

"SELECT url, description from annuaire_tbl where description LIKE '%".$rem."%' Order by url Asc limit 0,1"
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 9
7 juil. 2005 à 15:39
Salut,



"

comme disait ma grand mere: met des quotes !"



Une grand mère qui fait du PHP ça doit être marrant ^^



Ensuite il serait bien de dire ce qui ne marche pas. Quel est le
message d'erreur ? Quels sont les mots que tu tentes de rechercher ?

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
0

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

Posez votre question
cs_malaysia Messages postés 50 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 12 juillet 2005
7 juil. 2005 à 18:23
Me revoilà.

J'ai tenté en mettant les quotes, c'est pire !

$req = mysql_query("SELECT url, description from annuaire_tbl where description LIKE '".%$rem%."' Order by url Asc limit 0,1 ") or die ("erreur req ".mysql_error());
Résultat :
Parse error: parse error, unexpected '%' in /var/www/free.fr/e/e/ch.yernaux/recherche.php on line 30


La ligne 30 est celle ci-dessus.
En fait je cherche "nous" dans la base, il me signale les "nous" mais pas les "Nous".
0
cs_malaysia Messages postés 50 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 12 juillet 2005
7 juil. 2005 à 18:30
Sans les quotes que tu voulais ajouter le résultat est bon (avec j'ai le message ci-dessus), le seul problème c'est qu'il ne repère que les mots tels qu'écrits dans le formulaire de recherche (maj & min).
0
cs_malaysia Messages postés 50 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 12 juillet 2005
7 juil. 2005 à 18:34
Désolé j'avais mis les guillemets au mauvais endroit. En fait avec les quotes ça marcha comme avant, autrement dit il fait la différence maj/min.

$req = mysql_query("SELECT url, description from annuaire_tbl where description LIKE '% ".$rem." %' Order by url Asc limit 0,1 ") or die ("erreur req ".mysql_error());
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 9
7 juil. 2005 à 18:36
Ton erreur doit venir d'ailleurs dans le code ;-)

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
0
cs_malaysia Messages postés 50 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 12 juillet 2005
7 juil. 2005 à 18:39
Voici le code complet :

<?
if(strlen($_POST['recherche'])<3)//on vérifie que la demande comporte au moins 3 caractères
print '

LE CHAMP DOIT CONTENIR AU MOINS 3 CARACTERES

Cliquez sur "Précédente"'; //s'il y a moins de 3 caractères, message d'erreur
else{
//----------------------------------------------------------------
//
// Page de recherche avec le mot ou les mots clés
//
// recherche.php
//
//----------------------------------------------------------------


$mysql_host = 'sql.free.fr'; // entrer votre hote ici
$mysql_user = 'monlogin; // entrer votre login
$mysql_password = 'monmotdepasse'; // entrer votre password
$mysql_base = 'nomdemabase; // entrer le nom de votre base


//----------------------------------------------------------------
//Attention, je ne vais pas reprendre les vérifications de formulaires, vous les avez vu dans les cours précédents.


//on se connecte à la base de donnée
$db = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die ("erreur de connexion");


//sélection de votre base de donnée
mysql_select_db($mysql_base,$db) or die ("erreur de connexion base");



//requête de recherche
$rem = strtoupper ($_POST['recherche']);
$req = mysql_query("SELECT url, description from annuaire_tbl where description LIKE '% ".$rem." %' Order by url Asc limit 0,1 ") or die ("erreur req ".mysql_error());


//on compte les résultats
$res= mysql_numrows($req);


//on affiche le nombre de résultats trouvés
print ' Pour le mot '.$recherche.' il y a '.$res.' résultat(s) _________http://local.free.fr_________BASE DES ACTES NOTARIES DU SECTEUR HALLUIN-TOURCOING

';


//----------------------------------------------------------------------
//on ressort les infos par ordre alphabétique, voir order dans la requête
while( $sortie = mysql_fetch_array($req))
{
$var = str_replace ($_POST['recherche'], ''.$_POST['recherche'].'', $sortie['description']);
print '
';
print $sortie[url].'
';
echo $var;
print '
-----------------------------------------------------------------

'; // c'est juste une ligne de séparation ;-)


}//fin de boucle


//on ferme la connexion
mysql_close();
}
?>
0
ptitebibi2003 Messages postés 13 Date d'inscription mardi 12 avril 2005 Statut Membre Dernière intervention 8 juillet 2005
8 juil. 2005 à 10:45
salut,
juste une question ça donne quoi lorsque tu enleves le strtoupper()?
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 9
8 juil. 2005 à 12:04
$mysql_base = 'nomdemabase; // entrer le nom de votre base



remplace ça par ça :



$mysql_base = 'nomdemabase'; // entrer le nom de votre base



Le genre d'erreurs qui te fait perdre une heure si t'as une page de 800 lignes...



a +

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
0
cs_malaysia Messages postés 50 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 12 juillet 2005
8 juil. 2005 à 14:38
Réponse à la première question : rien si je mets la variable au lieu du '.$res.' plus bas, la recherche se fait toujours avec différence maj/min.

Réponse à la deuxième question : quote disparue lorsque j'ai refrappé un nom fictif en remplacement du bon (je ne voulais pas donner mes noms et login sur le forum !). En fait se trouve bien sur mon original. Merci.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
8 juil. 2005 à 14:43
Fais un test simple sur cette table, une requete avec un LIKE et un mot ecrit en dur.
Sur un autre script je veux dire, juste une page simple pour cette requete. Parce que ca m'etonne beaucoup : LIKE est reellement insensible a la casse...
0
cs_malaysia Messages postés 50 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 12 juillet 2005
8 juil. 2005 à 15:36
J'ai remis comme avant :

$req = mysql_query("SELECT url, description from annuaire_tbl where description LIKE '%$_POST['recherche']%' Order by url Asc limit 0,1 ") or die ("erreur req ".mysql_error());

vous pouvez aller voir ici : (essayez "nous" puis "Nous" puis "vous")http://local.free.fr/essais/cherche.html
0
cs_malaysia Messages postés 50 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 12 juillet 2005
8 juil. 2005 à 15:40
En fait si je mets les quotes autour de "recherche" ça ne marche plus du tout:
'%$_POST['recherche']%'
par contra sans ça marche (toujours avec la différence min/maj :
'%$_POST[recherche]%'
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
8 juil. 2005 à 15:45
Ben evidemment, tu crees tout seul un probleme la.

$req = mysql_query("SELECT url, description from annuaire_tbl where description LIKE '%".$_POST['recherche']."%' Order by url Asc limit 0,1 ") or die ("erreur req ".mysql_error());
0
cs_malaysia Messages postés 50 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 12 juillet 2005
8 juil. 2005 à 16:02
OK vu, merci mais l'affichage ne se fait toujours qu'avec différence maj/min.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
8 juil. 2005 à 16:03
je t'ai demande d'essayer sur un script exemple, avec un nom en dur, sur cette meme table pour voir ce que ca donne. Juste une simple requete, en dur, et tu affiches les resultats evidemment.
0
cs_malaysia Messages postés 50 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 12 juillet 2005
8 juil. 2005 à 16:22
Même résultat :

http://local.free.fr/essais/req.php

Pour :

$mysql_host = 'sql.free.fr'; // entrer votre hote ici
$mysql_user = 'monlogin'; // entrer votre login
$mysql_password = 'monpassword'; // entrer votre password
$mysql_base = 'mabase'; // entrer le nom de votre base


//----------------------------------------------------------------


//on se connecte à la base de donnée
$db = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die ("erreur de connexion");


//sélection de votre base de donnée
mysql_select_db($mysql_base,$db) or die ("erreur de connexion base");


//requête de recherche
$req = mysql_query("SELECT url, description from annuaire_tbl where description LIKE '%".nous."%' Order by url Asc limit 0,2 ") or die ("erreur req ".mysql_error());


//on ressort les infos par ordre alphabétique, voir order dans la requête
while( $sortie = mysql_fetch_array($req))
{
$var = str_replace ('nous', ''.nous.'', $sortie['description']);
print '
';
print $sortie[url].'
';
echo $var;
print '
-----------------------------------------------------------------

'; // c'est juste une ligne de séparation ;-)


}//fin de boucle


//on ferme la connexion
mysql_close();
?>
0
cs_malaysia Messages postés 50 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 12 juillet 2005
8 juil. 2005 à 16:26
En fait ça marche, il ne fait plus de différence maj/min, c'est juste qu'il surligne seulement les "nous", j'ai vérifier en changeant un texte de la base, il repère les NOUS comme les "Nous" et les "nous". Mais le mystère reste entier : pq ça ne marche pas avec une variable ?
0