Requete php sql avec accent : pas de correspondance dans la base - PHP - Programmation
Marsh Posté le 24-08-2012 à 15:50:13
à tout les coups, t'as mis champs case sensitive ou en binaire au lieu de case insensitive et text. Faut juste changer la collation et/ou le type du champ. (ex : MEDIUMBLOB devient MEDIUMTEXT si t'es sous mysql).
Marsh Posté le 27-08-2012 à 07:55:01
Merci pour ta réponse mais mon problème ne vient pas de ma base vu que si je tape la requête dans phpmyadmin, le bon résultat est retourné.
Marsh Posté le 27-08-2012 à 09:55:24
Regardes quel est le charset de la connexion à ta BD quand php s'y connecte (dans le fichier de conf de Mysql ou en regardant les variables de conf via phpmyadmin).
PS : le OR dans ta requête, c'est pas une bonne solution, c'est ultra lent.
Tu peux utiliser MATCH....AGAINST (si t'as activé le full-text search)
Tu peux utiliser aussi WHERE CONCAT('titre', 'descriptif') LIKE '%$reserv%'
Marsh Posté le 27-08-2012 à 12:48:01
J'ai bien mis un SET NAMES UTF-8 lors de ma connexion.
Merci pour le conseil pour le OR.
Après quelques (beaucoup) de test, je n'ai pas trouvé de solution donc dans mon formulaire je vais passer l'ID plutôt que le titre ou le descriptif.
Merci d'avoir essayé de m'aider
Marsh Posté le 27-08-2012 à 15:20:18
Est-ce que ton fichier php est bien enregistré en UTF-8 aussi, et est-ce que le serveur traite bien les données qu'il reçoit par POST en UTF-8 ?
Marsh Posté le 24-08-2012 à 13:47:37
Bonjour,
J'ai un problème avec une de mes requetes.
La voici :
$bdd=new PDO('mysql:host=localhost;dbname=ma_base','root','root');
$bdd->query("SET NAMES UTF8" );
$reserv = $_POST['reservation_notes'];
$ma_requete2="SELECT * FROM `spip_articles` WHERE titre='$reserv' OR descriptif='$reserv' ";
$envoi2 = $bdd->query($ma_requete2);
while($resultat2 = $envoi2->fetch())
{
echo $resultat2['texte'];
}
En fait le problème est que si $_POST['reservation_notes'] contient un accent, aucun résultat n'est trouvé. En faisant un echo de ma requete et en passant directement par phpmyadmin, la ligne existe et est affichée correctement. Et si $_POST['reservation_notes'] ne contient ni accent ni caractères spéciales echo $resultat2['texte']; affiche bien ce qui est dans la base.
Ma base est en utf-8, ma page est en utf-8.
J'ai beaucoup cherché sur le net, j'ai essayé pas mal de choses, sans résultat, le echo reste vide.
Merci.