8823 sujets

Développement web côté serveur, CMS

Bonjour,

Sur mon site créé il y a presque 25 ans j'utilise un moteur de recherche adossé à une base SQL pour trouver des photos. La page de recherche : https://www.perso-laplagne.fr/PhotosAnciennes.php.

Depuis quelques mois (ou années sans que j'y prenne garde ?) les résultats sont de plus en plus incohérents et sensibles à la casse alors qu'ils ne devraient pas...

Voici le code PHP
<?php

   $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'];

   $motscles = '%'.$motscles.'%'; 


?>

(...) 
<?
$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.'\' OR LegendeSecondaire LIKE \''.$motscles.'\' OR LegendeENG LIKE \''.$motscles.'\'OR MotsCles LIKE \''.$motscles.'\')  ORDER BY AnneeMin';						

$resultat=mysql_query($requete_sql);

$nb_image=mysql_num_rows($resultat);
?>
(...)


Je sais que cette requête est complètement obsolète mais ce qui me perturbe c'est que pour un même mot écrit différemment j'ai des résultats incomplets et variables.

Exemple : "Bellecôte"

- Bellecôte renvoie 72 photos
- Bellecote renvoie 80 photos
- bellecote renvoie 71 photos
- bellecôte renvoie... 0 photos

Pourtant l'interclassement choisi (utf8mb4_0900_ai_ci) est censé rendre les requêtes insensibles à la casse (enfin je crois !).

Le problème vient-il de la requête ? de la base ?

Merci de votre aide !!
Smiley biggrin
Modifié par ARGo (12 Apr 2026 - 11:13)
Merci.
Je précise que pour le moment je suis encore sous PHP 5.6 car précisément je n'ai pas encore trouvé comment rendre compatible mon moteur de recherche avec PHP 7 ou 8. Mais le problème que je pose est ailleurs non ?