[resolu] petit soucis moteur de recherche

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [resolu] petit soucis moteur de recherche

Re: petit soucis moteur de recherche

par juliette » 14 nov. 2011, 13:53

pour finir, j'ai fait comme ca:
$sql = "SELECT id_chien, nom, affixe, sex, livre, lof FROM chien WHERE LOWER (nom) LIKE '%$q%' OR LOWER (mc) LIKE '%$q%'"; 
j'enregistre 2 fois le nom, avec et sans accents...
si je trouve une solution par la suite je pense qu'il me faudra modifier ma requête et supprimer le champ mc de la table ce qui n'engage pas trop de travail...

Re: petit soucis moteur de recherche

par juliette » 14 nov. 2011, 12:50

et si j'enregistre dans la table les mots de 2 façons, 1 avec accents et 1 sans accents, normalement je peux faire mes recherches sur les 2 champs, non ?
et le probleme devrait etre resolu, non ?

Re: petit soucis moteur de recherche

par juliette » 14 nov. 2011, 12:04

je ne m'en sort pas , je voudrais donc savoir ce que ca peut engendre pour la suite si je fait les enregistrement sans les accents car ca je sais le faire...

Re: petit soucis moteur de recherche

par juliette » 13 nov. 2011, 16:56

non, je ne vois pas !
j'en suis la mais j'ai très certainement un truc que je ne sais pas, la, j'en suis la mais sans aucune certitude...
<table width="100%">

<?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 (addslashes($_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)) 
            {

?>    
  <tr>
			<td height="25px"> &nbsp;&nbsp;     
				<a href="fiche_malinois.php?pedigre=<?php echo $dnn['id_chien']; ?>&<?php echo $dnn['nom']; ?>">
					<strong><?php echo nl2br(stripslashes(accents($dnn['nom']))); ?> <?php echo nl2br(stripslashes($dnn['affixe'])); ?></strong>
				</a>
                        </td>    
			<td><center><?php echo $dnn['livre']; ?> <?php echo $dnn['lof']; ?></center></td>
		</tr>	
<?php
        }
        }else{
            echo '</table><br /><center><strong><font color="red">Aucun r&eacute;sultat</font></strong></center><br />';
             }
             }else
    {
    header('location: index.html');
    }
?>
</table>

Re: petit soucis moteur de recherche

par juliette » 13 nov. 2011, 14:32

je suis pas sur de comprendre ce que tu veux dire: est ce que tu veux que je commente mon code ?

Re: petit soucis moteur de recherche

par Cyrano » 13 nov. 2011, 14:24

L'idée derrière la question que j'ai suggérée, c'est de se demander à quel moment j'ai besoin de quoi au fil du déroulement du code.

Donc, quelle est la chronologie des évènements ? C'est la première chose à déterminer pour pouvoir définir quelles règles de gestions doivent être appliquées à tel ou tel endroit dans la chronologie.

Re: petit soucis moteur de recherche

par juliette » 13 nov. 2011, 13:47

alors, j'ai travaillé tard hier soir et j'ai modifié de 2 facon mais le resultat est le même dans les 2 cas
1er cas:
<table width="100%">

<?php
header('Content-type: text/html; charset=UTF-8');



        mysql_connect('localhost', 'root', '');
        mysql_select_db('aaaa');
        
        if(isset($_POST['q']))
            {
            
            $q = mysql_real_escape_string (strtolower (addslashes($_POST['q'])));
            
            $sql = "SELECT id_chien, nom, affixe, sex, livre, lof FROM chien WHERE LOWER (nom) LIKE '%$q%'"; 
                function accents($sql, $charset='utf-8')
                {
                    $sql = htmlentities($sql, ENT_NOQUOTES, $charset);

                    $sql = preg_replace('#&([A-za-z])(?:acute|cedil|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $sql);
                    $sql = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $sql); // pour les ligatures e.g. '&oelig;'
                    $sql = preg_replace('#&[^;]+;#', '', $sql); // supprime les autres caractères

                    return $sql;
                }
            $req = mysql_query($sql);
            if(mysql_num_rows($req)){
            while ($dnn = mysql_fetch_array($req)) 
            {

       
?>    
  
    
    
    
		<tr>
			<td height="25px"> &nbsp;&nbsp;     
				<a href="fiche_malinois.php?pedigre=<?php echo $dnn['id_chien']; ?>&<?php echo $dnn['nom']; ?>">
					<strong><?php echo nl2br(stripslashes(accents($dnn['nom']))); ?> <?php echo nl2br(stripslashes($dnn['affixe'])); ?></strong>
				</a>
                        </td>    
			<td><center><?php echo $dnn['livre']; ?> <?php echo $dnn['lof']; ?></center></td>
		</tr>	



		
        <?php
        }
        }else{
            echo '</table><br /><center><strong><font color="red">Aucun r&eacute;sultat</font></strong></center><br />';
             }
             }else
    {
    header('location: index.html');
    }
?>
</table>
2eme cas:
<table width="100%">

<?php
header('Content-type: text/html; charset=UTF-8');

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;
}

        mysql_connect('localhost', 'root', '');
        mysql_select_db('aaaa');
        
        if(isset($_POST['q']))
            {
            
            $q = mysql_real_escape_string (strtolower (addslashes($_POST['q'])));
            
            $sql = "SELECT id_chien, nom, affixe, sex, livre, lof FROM chien WHERE LOWER (nom) LIKE '%$q%'"; 
        
            $req = mysql_query($sql);
            if(mysql_num_rows($req)){
            while ($dnn = mysql_fetch_array($req)) 
            {
       
?>    
  
    
    
    
		<tr>
			<td height="25px"> &nbsp;&nbsp;     
				<a href="fiche_malinois.php?pedigre=<?php echo $dnn['id_chien']; ?>&<?php echo $dnn['nom']; ?>">
					<strong><?php echo nl2br(stripslashes(accents($dnn['nom']))); ?> <?php echo nl2br(stripslashes($dnn['affixe'])); ?></strong>
				</a>
                        </td>    
			<td><center><?php echo $dnn['livre']; ?> <?php echo $dnn['lof']; ?></center></td>
		</tr>	



		
        <?php
        }
        }else{
            echo '</table><br /><center><strong><font color="red">Aucun r&eacute;sultat</font></strong></center><br />';
             }
             }else
    {
    header('location: index.html');
    }
?>
</table>
je commence a penser que la modif doit se faire ici:
$sql = "SELECT id_chien, nom, affixe, sex, livre, lof FROM chien WHERE LOWER (nom) LIKE '%$q%'"; 
ai je raison ?

Re: petit soucis moteur de recherche

par Cyrano » 13 nov. 2011, 02:39

Réfléchis soigneusement à la chronologie du déroulement du code qui es exécuté et tentes de te représenter ce qui se passe, puis mets en parallèle ce qui est affiché sans oublier le moment de l'affichage dans la chronologie ;)

Re: petit soucis moteur de recherche

par juliette » 12 nov. 2011, 22:48

a quel moment est ce que je doit enlever les accents ?
<?php
header('Content-type: text/html; charset=UTF-8');

Function accents($chaine) 
    { 
     $string = strtr($chaine, 
     "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",
     "aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn");

     return $string; 
    } ;

        mysql_connect('localhost', 'root', '');
        mysql_select_db('aaaa');
        
        if(isset($_POST['q']))
            {
            //j'enleve les accents a q
            $_POST['q'] = accents($_POST['q']);
            
            $q = mysql_real_escape_string (strtolower (addslashes($_POST['q'])));
            
            $sql = "SELECT id_chien, nom, affixe, sex, livre, lof FROM chien WHERE LOWER (nom) LIKE '%$q%'"; 
            
            $req = mysql_query($sql);
            if(mysql_num_rows($req)){
            while ($dnn = mysql_fetch_array($req)) 
            {
       
?> 
j'ai réussi mais juste sur l'echo et du coup il me faut taper "élève" pour obtenir "eleve", je pense donc que ça ce passe plus haut mais rien a faire...

Re: petit soucis moteur de recherche

par juliette » 12 nov. 2011, 21:48

bon, c'est bon j'ai enlevé la fonction accents et aussi cette ligne: mysql_query("SET NAMES 'utf8'");
maintenant ça marche mais avec les accents, je remet la fonction et si c'est ok je ferme le poste
a tres bientôt :lol:

Re: petit soucis moteur de recherche

par juliette » 12 nov. 2011, 21:01

peux tu stp me montrer 2 exemples:
1 ou il y a que du php et 1 ou c'est une page html, juste 2 ou 3 ligne car je ne vois aucune erreur...

Re: petit soucis moteur de recherche

par Cyrano » 12 nov. 2011, 20:27

Alors vérifie les en-tête HTML que tu as mis histoire de vérifier qu'il n'y aurait pas une indication contraire.

Re: petit soucis moteur de recherche

par juliette » 12 nov. 2011, 20:10

salut Cyrano,
ce n'est pas ça car ce code est déjà sur le script d'affichage et sur le script d'enregistrement

Re: petit soucis moteur de recherche

par Cyrano » 12 nov. 2011, 19:13

À mettre en début du code pour les pages :
header("Content-Type: text/html; charset=utf-8");

Re: petit soucis moteur de recherche

par juliette » 12 nov. 2011, 14:57

bon, suite a de nombreuses recherches il semble que la page affiche des caractères de ce type : "é", "î", "Ã", ...
=> Les données ont été enregistrées au format UTF-8, et le navigateur les affiche en pensant avoir affaire à de l'ISO
comment faire pour que le navigateur le prenne comme utf8 ?