8791 sujets

Développement web côté serveur, CMS

Salut a tous,
j'ai un petit moteur de recherches et je voudrais que lorsqu'un visiteur tape eleve il puisse avoir dans les propositions "eleve, élève...) mais impossible, je suis très débutante...
j'en suis arrivée la mais plus moyen de progresser, je ne suis peut etre pas du tout sur la bonne route mais je ne sais plus m'en sortir seul:

<?php
header('Content-type: text/html; charset=UTF-8');
                // Je crée un fonction enleve accents
                function accents($str, $charset='utf-8')
                {
                    $str = htmlentities($str, ENT_NOQUOTES, $charset);
                    $str = preg_replace('#&([A-za-z])(?:acute|cedil|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str);
                    $str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); // pour les ligatures e.g. '&oelig;'
                    $str = preg_replace('#&[^;]+;#', '', $str); // supprime les autres caractères

                    return $str;
                }

        //connexion
        mysql_connect('localhost', 'root', '');
        mysql_select_db('aaaa');
        
        // si le formulaire est posté
        if(isset($_POST['q']))
            {
            // je protège les caractères spéciaux
            // je renvoie une chaîne en minuscules
            // j'ajoute des antislashs dans une chaîne
            
            $q = mysql_real_escape_string (strtolower ($_POST['q']));
            
            // je crée la requête SQL 
            $sql = "SELECT id_chien, nom, affixe, sex, livre, lof FROM chien WHERE LOWER (nom) LIKE '%$q%'"; 

            // J'envoie une requête au serveur
            $req = mysql_query($sql);
            
            // Je trouve le nombre de lignes d'un résultat MySQL
            if(mysql_num_rows($req))
                {   
                // je fait une boucle qui cherche chaque enregistrement 
                while ($dnn = mysql_fetch_array($req)) 
                {

?>



si quelqu'un peut me guider, merci d'avance...
Bonjour,

Je viens justement de passer ma matinée sur un problème d'accent liée à ma BDD. Celle-ci est en utf8_general_ci et cela pose un problème dans l'ordre alphabétique.

Bref il a fallu que je trouve comment faire pour enlever les accents du contenu de ma base.
Après quelques recherche j'ai trouvé la fonction sql TRANSLATE() (pour info) mais elle ne fonctionne pas chez moi. Je me suis donc rabattu sur REPLACE().

Cette fonction permet de remplacer un caractère par un autre. Dans notre cas il faut remplacer tous les caractères. Donc il suffit de multiplier les REPLACE().
Dans l'immédiat ça n'a rien d'optimiser et ça me choque un peu dans l'esthétique de mon code mais ça à le mérite de marcher !!!

Requête SQL :
"SELECT id_chien,affixe, sex, livre, lof,
 REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(`nom`, 'è', 'e'), 'é´', 'e'), 'ô', 'o'), 'î', 'i'), 'î', 'i'), 'à', 'a'), 'â', 'a') AS nom_nettoye FROM chien
WHERE nom_nettoye LIKE '".%$q%."'"


Voilà, bien sûr si vous avez besoin de rajouter des lettres accentuées, il faut rajouter des REPLACE.
Pour info : la fiche de la fonction REPLACE()

Voilà j'espère que c'est utile. Si quelqu'un connait une façon condensé ça m'intéresse ! Smiley ravi