Page 1 sur 2

[resolu] petit soucis moteur de recherche

Posté : 05 nov. 2011, 12:50
par juliette
salut a tous...

j'ai un petit moteur de recherche qui fonctionne presque bien:
<?php
// Connexion à la bases de donnée
mysql_connect('localhost', 'root', '');
// Selection de la table
mysql_select_db('aaaa');
// On verifie si il y a bien des données de type POST
if(isset($_POST['q'])){
    // On déclare $_POST['q'] en minusule et protégé contre les attaque SQL
    $q = strtolower(addslashes($_POST['q']));
    // On encode les résultat SQL en UTF-8
    mysql_query("SET NAMES 'utf8'");
    // On éxécute la requette SQL
    $sql = mysql_query('SELECT id, nom, affixe, sex, lof FROM chien WHERE nom LIKE "%'.$q.'%"');
    // On regarde si il y a des données dans la base de données
    if(mysql_num_rows($sql)){
        // On créé une boucle while pour lister les résultats
        while ($dnn = mysql_fetch_array($sql)) {
        ?>		

		
		<div id="info_chien_2"> 

		<tr>
			<td height="25px"> &nbsp;&nbsp; <strong><?php echo $dnn['nom']; ?> <?php echo $dnn['affixe']; ?></strong> &nbsp;&nbsp;&nbsp;&nbsp; 
			<?php echo $dnn['sex']; ?> &nbsp;&nbsp;&nbsp;&nbsp;  
			lof: <?php echo $dnn['lof']; ?> &nbsp;&nbsp;&nbsp;&nbsp; </td>
			<td><center><em><a href="pedigre.php?pedigre=<?php echo $dnn['id']; ?><?php echo $dnn['nom']; ?>"><span style="color:green; margin-right:10px;">Voir sa fiche</span></a></em></center>
		</td></tr>
		</tbody>
		</div>
		
        <?php
        }
    }else{
        echo '</table><br /><center><strong><font color="red">Aucun r&eacute;sultat</font></strong></center><br />';
    }
}else{
    header('location: index.html');
}
?>
le seul truc est que dans la bdd les nom sont écris avec une majuscule "Medor" mais ça ne fonctionne que sans la majuscule "medor"
savez vous comment corrigé le soucis ?

Re: petit soucis moteur de recherche

Posté : 05 nov. 2011, 13:14
par juliette
j'ai trouver une solution en passant le champ "nom" de la bdd en (uft8_general_ci) au lieu de (uft8_bin): y voyez vous un problème ou une autre solution ?

Re: petit soucis moteur de recherche

Posté : 05 nov. 2011, 13:37
par xTG
Tu peux faire une recherche en passant tout en minuscules :
$var = mysql_real_escape_string(strtolower($var));
$sql = "SELECT id, nom, affixe, sex, lof FROM chien WHERE LOWER(nom) LIKE '%$var%'";

Re: petit soucis moteur de recherche

Posté : 05 nov. 2011, 14:01
par juliette
ok, merci, je test mais j'en déduis donc que ma solution n'est pas bonne ?

Re: petit soucis moteur de recherche

Posté : 05 nov. 2011, 14:40
par xTG
Il serait plus souple de faire comme je te l'ai indiqué.
On peut ainsi étendre pour rajouter un traitement supprimant les accents, ainsi la recherche de "idee" pourra amener à "idée" (c'est pas le nom d'un chien mais l'exemple est là :P).

Re: petit soucis moteur de recherche

Posté : 05 nov. 2011, 14:54
par juliette
ok, merci, ce sont des choses au quel je ne pensé même pas... merci.

Re: petit soucis moteur de recherche

Posté : 11 nov. 2011, 19:17
par juliette
salut, je pense avoir correctement apliqué le code:
<?php
mysql_connect('localhost', 'root', '');
mysql_select_db('aaaa');
if(isset($_POST['q'])){
    $q = mysql_real_escape_string (strtolower (addslashes($_POST['q'])));
    mysql_query("SET NAMES 'utf8'");
    $sql = "SELECT id_chien, nom, affixe, sex, livre lof FROM chien WHERE LOWER(nom) LIKE '%$q%'"; 
    if(mysql_num_rows($sql)){
    while ($dnn = mysql_fetch_array($sql)) {
?> 
mais j'ai une erreur que comme d'hab je ne comprend pas:
Warning: mysql_num_rows() expects parameter 1 to be resource, string given
quelqu'un peut il tenter de m'expliquer ?

Re: petit soucis moteur de recherche

Posté : 11 nov. 2011, 19:32
par moogli
$req = mysql_query($sql);
Mysql_num_rows($req);

Toi tu passe la requête et non la ressource retournée par un musql_query ;)




@+

Re: petit soucis moteur de recherche

Posté : 11 nov. 2011, 19:48
par juliette
super, un grand merci, ça donne ca:
<?php
mysql_connect('localhost', 'root', '');
mysql_select_db('aaaa');
if(isset($_POST['q'])){
    $q = mysql_real_escape_string (strtolower (addslashes($_POST['q'])));
    mysql_query("SET NAMES 'utf8'");
    $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)) {
?>
désormais comme xTG me la proposer je passe aux accents donc je ne ferme pas le poste de suite mais je pense que pour ça c'est résolu...
merci a toi moogli

Re: petit soucis moteur de recherche

Posté : 11 nov. 2011, 20:52
par juliette
bon je crois que je ne comprend pas non plus avec les accents:
j'ai fait ca:
<?php

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

     return $string; 
    } ;

    mysql_connect('localhost', 'root', '');
    mysql_select_db('aaaa');
    if(isset($_POST['q']))
        {
    
        $q = mysql_real_escape_string (strtolower (addslashes($_POST['q'])));
        mysql_query("SET NAMES 'utf8'");
        $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)) {
       
?> 
si j'enregistre le mot "élève" mon compte rendu est correcte et le mot élève est écris correctement mais dans la bdd il est écris "élève" et il me faut taper "ve" pour que le moteur me le retorse mais écris comme ça: " na©lna¨ve" donc les accents sont bien enlevé mais pour le résultat je suis a coté de la plaque...

le champ bdd est en "uft8_bin", le fichier dans netBeans ide 7 est en "uft8" et ma page est en "charset=utf-8" et j'enregistre le champ comme ca:
if(isset($_POST['nom']))          $nom = strip_tags(addslashes($_POST['nom']));
else      $nom="";

ICI DU CODE

 $sql = "INSERT INTO chien(nom)" 
        VALUES('$nom'); 
        mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
je pense bien que ça viens de l'encodage mais comme toujours, seul je ne trouve pas la panne...

Re: petit soucis moteur de recherche

Posté : 12 nov. 2011, 14:57
par juliette
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 ?

Re: petit soucis moteur de recherche

Posté : 12 nov. 2011, 19:13
par Cyrano
À mettre en début du code pour les pages :
header("Content-Type: text/html; charset=utf-8");

Re: petit soucis moteur de recherche

Posté : 12 nov. 2011, 20:10
par juliette
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

Posté : 12 nov. 2011, 20:27
par Cyrano
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

Posté : 12 nov. 2011, 21:01
par juliette
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...