[resolu] petit soucis moteur de recherche

Mammouth du PHP | 790 Messages

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:
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Mammouth du PHP | 790 Messages

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...
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Mammouth du PHP | 19672 Messages

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 ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 790 Messages

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 ?
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Mammouth du PHP | 19672 Messages

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 790 Messages

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 ?
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Mammouth du PHP | 790 Messages

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>
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Mammouth du PHP | 790 Messages

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...
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Mammouth du PHP | 790 Messages

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 ?
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Mammouth du PHP | 790 Messages

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...
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.