[RESOLU] Bizarerie entre l'ordinateur et l'iPhone ?

Eléphanteau du PHP | 25 Messages

22 nov. 2022, 12:35

Bonjour,

J'affiche un formulaire de recherche qui envoie une requête à la DB pour retourner un résultat.

Cela marche parfaitement (presque) et comme dans ma requête SQL j'ai utilisé 'LIKE' je peux n'écrire que le début de ma recherche.
Sur mon ordi si je tape : "i've" -> j'ai bien l'ensemble des phrases commençant par "I've"
En revanche sur mon téléphone cela n'affiche rien :(

MAIS

Si je tape "I don't" sur mon téléphone -> là j'ai bien l'ensemble des résultats commençant par "i'don't" !!

Je ne comprends pas d'où cela peut provenir ??

Avez-vous une piste de réflexion pour moi svp ?

Merci
Steph

Eléphanteau du PHP | 25 Messages

22 nov. 2022, 17:16

J'ai trouvé la solution mais elle est inquiétante...

Le pb vient de l'option 'ponctuation intelligente' !
Lorsque je désactive cette option je n'ai plus le pb ^^

Qu'ai je mal fait dans mon développement pour mériter cela ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

22 nov. 2022, 21:06

Ton problème vient des apostrophes typographiques appelées aussi apostrophes courbes (je les ai grossis ici pour montrer la différence), qu'il ne faut pas confondre avec les apostrophes droites du clavier de base '
https://www.brunobernard.com/des-textes ... raphiques/

Tu peux avoir aussi le problème avec les guillemets typographiques : « vs. "
https://www.brunobernard.com/utilisez-l ... raphiques/

Une solution est de les remplacer avant de faire ta requête SQL...
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 25 Messages

22 nov. 2022, 21:09

Merci pour cette précision :)
Du coup c'est les typographiques qu'il faut utiliser ? J'ai bien compris ?

Bon je m'en vais écrire une requête pour mettre à jour la DB et modifier ma requête de base.

Encore merci
Stéph

Avatar du membre
Mammouth du PHP | 1564 Messages

22 nov. 2022, 21:45

Attention aux injections SQL, risque de piratage de la base donnée.

Tu peux utilise mysqli_real_escape_string() sur tes valeurs à insérer.

Eléphanteau du PHP | 25 Messages

22 nov. 2022, 21:51

Ouep merci :)
En général je fais une requête préparée avec PDO.

En revanche je ne sais pas si je dois remplacé mes apostrophes dactylo par les typographiques ou inversement :(
Il me semble que de base le clavier des ordi fait une apostrophe dactylo (droite) mais que les téléphones avec la ponctuation intelligente font une apostrophe courbe...

Bref je suis perdu...

C'est plus compliqué que ce je pensais :(
Si je change les apostrophes > sur mon Mac la recherche ne retourne rien (car clavier = apostrophe dactylo) mais sur le téléphone ça fonctionne.
Et inversement.... Bouhou.... Dites qu'il y a une solution plus simple svp ... :p
Ma DB est encodée en UTF-8 general ci

Avatar du membre
Mammouth du PHP | 1564 Messages

22 nov. 2022, 22:06

Il te faudra convertir toutes les sortes de guillemets simple par un général puis aussi quand on cherche ; remplacer tous les guillemets simple par le général et ça trouvera toujours le résultat, fait le dès le départ ;)

Après je suis pas expert dans la recherche, ya peut être des recherches à faire avec "des mots qui sonnent à peu près pareil", je ne trouve plus le terme exact, désolé.

Eléphanteau du PHP | 25 Messages

22 nov. 2022, 23:22

Ah ah ! Oui c’est limpide :)
J’ai plus qu’à traduire cela en requête SQL :) il me semble qu’avec LIkE je devrais m’en sortir :)
Dans ma fonction j’utilise pdo query sur la recherche… il faut peut être que je passe à pdo prépare mais comme je n’ai pas d’injection à ce niveau là, je me suis dit que c’était pas nécessaire…

Je regarde ça demain

Merci pour le coup de main

Eléphanteau du PHP | 25 Messages

23 nov. 2022, 16:21

GOOD !

J'ai modifié mon code comme cela :
<?php
//On remplit le tableau grâce à la fonction rechercheTab
if (isset($_POST['titre'])) {
    $_POST['titre'] = str_replace("’", "'", $_POST['titre']);
    echo '<tr>';
    $datas = rechercheTab();
    foreach ($datas as $data) {
        foreach ($data as $colonne => $contenu) {
            echo '<td>' . $contenu . '</br></td>'; //je remplis le tableau avec les données de ma DB
Et maintenant je n'ai plus le problème sur mon téléphone :)
Pour info (ça peut toujours servir) l'apostrophe clavier MAC se fait avec la touche 4 et pour avoir l'apostrophe courbe il faut faire SHIFT + OPTION + 4

Maintenant ça marche :)