cs_malaysia
Messages postés50Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention12 juillet 2005
-
6 juil. 2005 à 22:28
cs_malaysia
Messages postés50Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention12 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());
cs_malaysia
Messages postés50Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention12 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());
cs_malaysia
Messages postés50Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention12 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".
cs_malaysia
Messages postés50Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention12 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).
cs_malaysia
Messages postés50Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention12 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());
cs_malaysia
Messages postés50Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention12 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 '
-----------------------------------------------------------------
cs_malaysia
Messages postés50Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention12 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.
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 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...
cs_malaysia
Messages postés50Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention12 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());
cs_malaysia
Messages postés50Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention12 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]%'
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 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());
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 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.
//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 '
-----------------------------------------------------------------
cs_malaysia
Messages postés50Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention12 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 ?