Requète sur des données comportant des accents

Résolu
cs_djimson
Messages postés
53
Date d'inscription
samedi 14 octobre 2006
Statut
Membre
Dernière intervention
23 mai 2017
- 8 févr. 2011 à 12:20
cod57
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
- 8 févr. 2011 à 15:43
Bonjour,
j'ai un petit soucis avec une requête. Elle marche à condition que le mot recherché ne porte pas d'accent. Si le mot comprte un accent, alors je n'ai aucun resultat.
Pour être precis, voici un exemple : Je fais une recherche sur les mots: Comptabilité/Finance
- Aucun resultat.
Comptabilite/Finance
- Résultat positif.

Je met le bout de cod qui me fatique :

$sql = "SELECT * FROM table
WHERE `secteur` LIKE " " .$_POST['option']. "%'" OR
`secteur` LIKE "  " . strtolower($_POST['option']) . "%'" OR
`secteur` LIKE " " . strtoupper($_POST['option']) . "%'" OR
`secteur` LIKE " " . strtr($_POST['option'], "áéíóúàèìòùâêîôûäëïöü", "aeiouaeiouaeiouaeiou") . "%'" OR
`secteur` LIKE " " . strtoupper(strtr($_POST['option'], "áéíóúàèìòùâêîôûäëïöü", "aeiouaeiouaeiouaeiou")) . "%'" OR
`secteur`  LIKE "" . strtolower(strtr($_POST['option'], "áéíóúàèìòùâêîôûäëïöü", "aeiouaeiouaeiouaeiou")) . "%'" OR
`secteur` LIKE "  '%" .$_POST['option']. "%'" OR
`secteur` LIKE "  '%" . strtolower($_POST['option']) . "" OR
`secteur` LIKE " '%" . strtoupper($_POST['option']) . "" OR
`secteur` LIKE " '%" . strtr($_POST['option'], "áéíóúàèìòùâêîôûäëïöü", "aeiouaeiouaeiouaeiou") . "" OR
`secteur` LIKE " '%" . strtoupper(strtr($_POST['option'], "áéíóúàèìòùâêîôûäëïöü", "aeiouaeiouaeiouaeiou")) . "" OR
`secteur`  LIKE "'%" . strtolower(strtr($_POST['option'], "áéíóúàèìòùâêîôûäëïöü", "aeiouaeiouaeiouaeiou")) . ""
"; // Requête pour vérifier la casse et les accents

Si quelqu'un à une idée sur le problème.
Cordialement
Merci

7 réponses

cod57
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
20
8 févr. 2011 à 15:43
apres du peux faire ce que tu veux

un switch()
ou des %?% ...

... ce qui important dans ma proposition c'est

mysql_set_charset("utf8", $lnk);

tu dis à mysql de travailler en utf 8 ...

si ça marche accepte la réponse s.t.p.

a++
3
cod57
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
20
8 févr. 2011 à 13:38
bonjour

Interclassement dans ta table si c'est exemple utf8
verifie que ton script qui poste est en utf8 le charset ...
et strtr($_POST['option'], "áéíóúàèìòùâêîôûäëïöü", "aeiouaeiouaeiouaeiou")
sera pas neccessaire

a++
0
cs_djimson
Messages postés
53
Date d'inscription
samedi 14 octobre 2006
Statut
Membre
Dernière intervention
23 mai 2017

8 févr. 2011 à 13:52
Oui ma table est utf8_general_ci et le script charset=iso-8859-1"

faut-il que je le change?
Merci
0
cod57
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
20
8 févr. 2011 à 14:01
oui

charset="utf-8"
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

a++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_djimson
Messages postés
53
Date d'inscription
samedi 14 octobre 2006
Statut
Membre
Dernière intervention
23 mai 2017

8 févr. 2011 à 14:09
Problème. J'ai plein de petits losanges avec des ????
Incompatibilité je pense


Merci
0
cod57
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
20
8 févr. 2011 à 15:21
je crois avoir une solution
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>

<form method="POST" action="<?php $_SERVER['PHP_SELF'];?>">
Entrez du texte accentué : 



</form><?php
$lnk=mysql_connect('localhost','root','');
mysql_select_db('b');
mysql_set_charset("utf8", $lnk);


$table='annonce';

//$_POST['option']='éè';
//echo $option = $_POST['option'];

echo $option = mysql_real_escape_string($_POST['option']);
echo '
';
echo $sql = "SELECT * FROM `".$table."` WHERE `choix` LIKE '".$option."' LIMIT 0 , 30 ";
//echo $sql = "SELECT * FROM `".$table."` WHERE `choix` LIKE '%".$option."%' LIMIT 0 , 30 ";
echo '
';
$query=mysql_query($sql);

if(mysql_num_rows($query)>0){

while($row=mysql_fetch_array($query)){
echo $row['id'].'
';
$option="";
}

} else {
echo "pas de resultats";
$option="";
}
?>



-- phpMyAdmin SQL Dump
-- version 3.2.0.1
-- http://www.phpmyadmin.net
0
cs_djimson
Messages postés
53
Date d'inscription
samedi 14 octobre 2006
Statut
Membre
Dernière intervention
23 mai 2017

8 févr. 2011 à 15:32
Ok, je l'essai de suite.
Mais j'ai oublié de signaler que ma recherche porte sur soit une chaine de caractère soir sur un seul mot. Mon formulaire est une liste déroulante.
echo $sql = "SELECT * FROM `".$table."` WHERE `choix` LIKE '%".$option."%'"; 


Je peux ajouter des OR pour trouver autres mots de la chaine?
Merci
0