Bonjour,
J'utilise des requêtes PHP (sans doute complètement dépassés) pour extraire des infos d'une bdd depuis 15 ans, et cela fonctionnait très bien jusqu'à récemment. La requête fonctionne toujours mais malgré mes efforts pour essayer de corriger, tous les caractères accentués se transforment en � dans les résultats (et même sur les pages en PHP elles-mêmes).
L'URL de la page : https://www.perso-laplagne.fr/PhotosAnciennes.php
Le code PHP de la requête :
// les variables à changer pour la base de données :
// host : url de la base de données
$host="****";
// user : nom d'utilisateur
$user="****";
// passe : mot de passe utilisateur
$passe="****";
$connec=mysql_connect("$host","$user","$passe");
if (!$connec)
{
echo "Connexion à la base de données impossible !";
}
else
{
$select_base=mysql_selectdb("***",$connec);
if (!$select_base)
{
echo "Connexion à la base de données impossible !";
}
else
{
$requete_sql='SELECT Nom, Legende, LegendeENG, LegendeSecondaire, MotsCles, Objet, AnneeMin, AnneeMax from PhotographiesAnciennes WHERE (anneemin BETWEEN \''.$anneemin.'\' AND \''.$anneemax.'\' OR anneemax BETWEEN \''.$anneemin.'\' AND \''.$anneemax.'\') AND (Objet LIKE \''.$telesieges.'\' OR Objet LIKE \''.$stations.'\' OR Objet LIKE \''.$paysages.'\' OR Objet LIKE \''.$travaux.'\' OR Objet LIKE \''.$evenements.'\' OR Objet LIKE \''.$teleskis.'\' OR Objet LIKE \''.$telecabines.'\') AND (Legende LIKE \''.$motscles.'\') ORDER BY AnneeMin ';
$resultat=mysql_query($requete_sql);
$nb_image=mysql_num_rows($resultat);
// les résultats sont stockés dans un tableau :
// Nom:$texte[0] ; Legende:$texte[1] ; LegendeENG:$texte[2] ; LegendeSecondaire:$texte[8] ; MotsClés:$texte[3] ; Objet:$texte[4] ; AnneeMin:$texte[5] ; AnneeMax:$texte[6] ;
// boucle while pour afficher tous les résultats par tableaux
// on tronque le ".jpg" du nom de la photo et on le remplace par ".htm"
echo "
$nb_image image(s) trouvée(s)
";if (mysql_num_rows($resultat) == 0){
echo "
Désolé, aucune image n'a été trouvée. Soit il n'y a pas de photos correspondantes dans la collection, soit vous devez reformuler votre recherche en vérifiant que vous avez bien choisi un type de photos ou en vérifiant l'orthographe de votre mot-clé. Si le problème persiste, merci de me contacter. "; }
while($texte=mysql_fetch_array($resultat))
{
echo("
$texte[1]
");
}
}
}
?>
J'ai bien essayé de définir UTF8 comme encodage par défaut sur mes pages et dans ma bdd MySQL, mais rien n'y fait, je suis paumé !
De plus, j'ai une fonction qui retire les accents des mots clé entrés par l'utilisateur, mais elle fausse tout. J'aimerais bien la retirer mais je ne sais pas écrire le code correctement (on m'a rédigé cette requête clé en main)
$paysages = htmlentities($_POST['paysages'], ENT_QUOTES);
$travaux = htmlentities($_POST['travaux'], ENT_QUOTES);
$stations = htmlentities($_POST['stations'], ENT_QUOTES);
$teleskis = htmlentities($_POST['teleskis'], ENT_QUOTES);
$telesieges = htmlentities($_POST['telesieges'], ENT_QUOTES);
$telecabines = htmlentities($_POST['telecabines'], ENT_QUOTES);
$evenements = htmlentities($_POST['evenements'], ENT_QUOTES);
$anneemin = htmlentities($_POST['anneemin'], ENT_QUOTES);
$anneemax = htmlentities($_POST['anneemax'], ENT_QUOTES);
$motscles = $_POST['motscles'];
// retire les accents des mots clés et ajouter les % pour la requete sql
$motscles = '%'.retireaccents($motscles).'%';
// fonction pour retirer les accents du mot clé rentré par l'utilisateur
function retireaccents($string)
{
$string= strtr($string, "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ", "aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn");
return $string;
} ;
?>
Merci d'avance si quelqu'un peut m'apporter son aide !
Bonjour @RomainG42
Voir --> **https://wordetweb.com/word-et-web/OVH-php-5.6-mauvais-affichage-caracteres-accentues-resolu-FR.htm OVH - PHP 5.6 - Mauvais affichage des caractères accentués**
Merci beaucoup ! C'était donc aussi bête que ça...
Le principal problème est réglé !
Reste que mes requêtes ne supportent pas le passage à une version supérieure de PHP et je suis bien incapable de les mettre à jour.
J'ai aussi un problème qui perdure pour la gestion des accents dans le moteur de recherche.
Normal @RomainG42 tu as du créer ton script PHP avec des requêtes SQL de type mysql qui ne ne sont plus acceptées dans les versions de Windows.
Deux solutions :
- Passer à mysqli --> **https://wordetweb.com/word-et-web/OVH-Tester-une-base-de-donnees-avec-un-script-mysqli-FR.htm OVH - Test de Base de Données via un script mysqli**
- Passer au mode PDO --> **https://wordetweb.com/word-et-web/OVH-Tester-une-base-de-donnees-via-un-script-PDO-FR.htm OVH - Test de Base de Données via un script en langage PDO**
Gaston a certainement voulu dire " les versions de PHP".
En effet.
Bien vu @fritz2cat