[resolu] petit soucis moteur de recherche

Mammouth du PHP | 790 Messages

05 nov. 2011, 12:50

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 ?
Modifié en dernier par juliette le 14 nov. 2011, 13:53, modifié 1 fois.
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

05 nov. 2011, 13:14

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 ?
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.

ViPHP
xTG
ViPHP | 7331 Messages

05 nov. 2011, 13:37

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%'";

Mammouth du PHP | 790 Messages

05 nov. 2011, 14:01

ok, merci, je test mais j'en déduis donc que ma solution n'est pas bonne ?
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.

ViPHP
xTG
ViPHP | 7331 Messages

05 nov. 2011, 14:40

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).

Mammouth du PHP | 790 Messages

05 nov. 2011, 14:54

ok, merci, ce sont des choses au quel je ne pensé même pas... merci.
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

11 nov. 2011, 19:17

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 ?
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.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

11 nov. 2011, 19:32

$req = mysql_query($sql);
Mysql_num_rows($req);

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




@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 790 Messages

11 nov. 2011, 19:48

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

11 nov. 2011, 20:52

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...
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, 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 ?
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

12 nov. 2011, 19:13

À mettre en début du code pour les pages :
header("Content-Type: text/html; charset=utf-8");
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 790 Messages

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

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

Mammouth du PHP | 790 Messages

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...
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.