stripos() qui ne fonctionne pas correctement

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par sff, 28 Mars 2019.

  1. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    533
    J'aime reçus:
    0
    Bonjour,

    j'ai un soucis avec un petit script php (autocomplète, auto saisi dans un input)

    Le script fonctionne parfaitement avec des mots (nom de villes), mais du moment que je fais une recherche sur un code postal, cela ne fonctionne plus.

    Exemple lorsque je tape la ville "Béziers". Cela fonctionne

    [​IMG]

    Maintenant lorsque le tape seulement le code postal "34500". Cela ne fonctionne pas pourtant il est bien présent dans la chaîne de caractère !

    [​IMG]

    Voici mon code php :

    PHP:
    $query $_GET['query'];
     
    $sql "SELECT name, zipcode, server FROM cities WHERE server != 0";
     
    foreach  (
    $bdd->query($sql) as $result) {
        
        
    $values[] = $result['name'].'-'.$result['zipcode']; // Chaine de caractère : Nom de la ville - Code postal
    }
     
    if (
    $query) {
        
        foreach (
    $values as $key => $value) {
            
            if (
    stripos($value$query) === false) {
                unset(
    $values[$key]);
            }
        }
    }
     
    echo 
    json_encode(array_values($values));
    Et le code Javascript :

    Code:
    function hinter(event) {
     
        var input = event.target;
        var huge_list = document.getElementById('huge_list');
        var min_characters = 3;
     
        if (input.value.length < min_characters ) {
            return;
        } else {
     
            window.hinterXHR.abort();
     
            window.hinterXHR.onreadystatechange = function() {
                
                if (this.readyState == 4 && this.status == 200) {
     
                    var response = JSON.parse( this.responseText );
     
                    huge_list.innerHTML = "";
     
                    response.forEach(function(item) {
     
                        var option = document.createElement('option');
    
                        console.log(item); // Affiche bien Béziers-34500 alors que option value de s'affiche pas !
                       
                       option.value = item; 
                        
                        huge_list.appendChild(option);
                    });
                }
            };
     
            window.hinterXHR.open("GET", "/?page=results_input&query=" + input.value, true);
            window.hinterXHR.send()
        }
    }
    Code HTML :

    HTML:
    <form>
            <input type="text" name="name" id="name_input" list="huge_list">
            <datalist id="huge_list">
            </datalist>
        </form>
    Si je tape seulement 34500 dans l'input de recherche, un console.log(item) dans le JS affiche pourtant bien "Béziers-34500" mais le datalist reste vide. Je ne comprends pas d'ou vient le problème.

    Je vous remercie d'avance
     
  2. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 168
    J'aime reçus:
    345
    HS: pourquoi tu fais pas un SQL LIKE ou un array_filter() au lieu de faire unset() des éléments non trouvés ?
     
  3. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    533
    J'aime reçus:
    0
    Oui c'est un possibilité, mais ca ne résout pas le problème. Lors d'une recherche de code postal le datalist ne fonctionne plus pour une raison que j'ignore.
     
  4. rick38
    rick38 WRInaute passionné
    Inscrit:
    23 Février 2013
    Messages:
    2 034
    J'aime reçus:
    350
    Commence par virer ces deux boucles foreach, et donc le stripos aussi, et modifier la requête avec un CONCAT et un LIKE.
    Ta question sur le stripos disparaît par la même occasion, en plus d'être beaucoup plus performant pour le serveur, et d'avoir un code beaucoup plus concis.
    Si le problème persiste, on étudiera la question :D
     
  5. ABCWEB
    ABCWEB WRInaute passionné
    Inscrit:
    22 Octobre 2015
    Messages:
    1 322
    J'aime reçus:
    173
    stripos marche qu'avec les chaine de caractère pas avec les chiffres, il doit manquer les cotes de $result['zipcode'] pour le déclarer comme string
     
  6. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    533
    J'aime reçus:
    0
    Je viens de modifier le code php avec un LIKE et CONCAT mais le datalist ne fonctionne toujours pas.

    PHP:
    $sql "SELECT name, zipcode, server FROM cities WHERE MATCH (name, zipcode) AGAINST (CONCAT('+', :keyword) IN BOOLEAN MODE) ORDER BY name ASC LIMIT 6";

    $requete $bdd -> prepare($sql);
    $requete->bindValue(':keyword'$_GET['query'], PDO::PARAM_STR);
    $requete->execute();

    $list $requete->fetchAll();
    $requete->closeCursor();

    if (
    $requete->rowCount() >= 1) {

        foreach (
    $list as $result) {
          
            
    $zipcode substr($result['zipcode'], 05);
          
            
    $values[] =  $result['name'].' - '.$zipcode;

        }
      
    }else{
      
        
    $values[] =  null;
      
    }

    echo 
    json_encode(array_values($values));
    Par exemple si query = "34000" l'echo me renvoi bien "["Montpellier - 34000"]"

    Le JS semble également fonctionner correctement mais cette partie la :

    Code:
     response.forEach(function(item) {
                           
                        var option = document.createElement('option');
                        option.value = item;
                       
                        huge_list.appendChild(option);
                    });
    ne crée par le balise <option></option>

    Pourtant un console.log(option); affiche bien la balise complète.
     
    #6 sff, 28 Mars 2019
    Dernière édition: 28 Mars 2019
  7. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    533
    J'aime reçus:
    0
    Personne ne peux m'aider ?
     
  8. ABCWEB
    ABCWEB WRInaute passionné
    Inscrit:
    22 Octobre 2015
    Messages:
    1 322
    J'aime reçus:
    173
    Je comprend pas ce que tu essais de faire..
     
  9. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    533
    J'aime reçus:
    0
    Tout simplement un autocomplète qui fonctionne avec une recherche de nom d'une ville Ou de code postal. Or la ca ne fonctionne qu'avec la recherche d'un nom de ville.

    Je recherche "Béziers" et cela fonctionne :

    [​IMG]

    Je recherche son code postal "34500" cela ne fonctionne pas :

    [​IMG]


    Pourtant la chaine de caractère est bien "Béziers - 34500" !

    Ou est donc le problème, je ne comprends pas.
     
Chargement...
Similar Threads - stripos() fonctionne correctement Forum Date
Adresse mail ne fonctionne plus après modif de DNS Noms de domaine et référencement 26 Mai 2022
Méthode qui fonctionne le mieux en référencement SEO Débuter en référencement 19 Avril 2022
Onclick Select ne fonctionne pas dans Chrome Développement d'un site Web ou d'une appli mobile 21 Mars 2022
Des adresses qui ne fonctionnent plus... Développement d'un site Web ou d'une appli mobile 6 Novembre 2021
fonctionnement précis outil suppression url search console Débuter en référencement 18 Octobre 2021
PHP / CURL : interrogation page tiers ne fonctionne plus Développement d'un site Web ou d'une appli mobile 2 Octobre 2021
ma redirection ne fonctionne pas URL Rewriting et .htaccess 18 Août 2021
url rewriting ne fonctionne pas chez moi URL Rewriting et .htaccess 4 Août 2021
mon code ne fonctionne pas pour masquer les .php URL Rewriting et .htaccess 31 Juillet 2021
htaccess qui fonctionne partout sauf sur 1 seul PC URL Rewriting et .htaccess 28 Juillet 2021
Outil "Désavouer des liens" ne fonctionne plus Netlinking, backlinks, liens et redirections 18 Mai 2021
Annonces thématiques non fonctionnelles AdSense 6 Avril 2021
Récapitulatif Les CMP (Consent Management Platform) : intérêt, fonctionnement... Administration d'un site Web 30 Mars 2021
Activation suivi e-commerce et fonctionnement côté GA Google Analytics 15 Mars 2021
Redirection non fonctionnelle URL Rewriting et .htaccess 18 Septembre 2020
Fonctionnement CPC/CPM AdSense 16 Avril 2020
Logique de fonctionnement d'une application mobile Développement d'un site Web ou d'une appli mobile 17 Mars 2020
Un tel fonctionnement de google est-il possible ? Référencement Google 4 Mars 2020
Comment vérifier qu'un CDN est bien actif sur un site et fonctionne bien ? Administration d'un site Web 5 Février 2020
Après refonte, 3000 pages indexées qui ne fonctionnent plus Problèmes de référencement spécifiques à vos sites 22 Octobre 2019