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:
    525
    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:
    8 723
    J'aime reçus:
    232
    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:
    525
    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:
    1 061
    J'aime reçus:
    108
    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 impliqué
    Inscrit:
    22 Octobre 2015
    Messages:
    634
    J'aime reçus:
    47
    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:
    525
    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:
    525
    J'aime reçus:
    0
    Personne ne peux m'aider ?
     
  8. ABCWEB
    ABCWEB WRInaute impliqué
    Inscrit:
    22 Octobre 2015
    Messages:
    634
    J'aime reçus:
    47
    Je comprend pas ce que tu essais de faire..
     
  9. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    525
    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
Search Console Outil changement d'adresse ne fonctionne pas Référencement Google 2 Août 2019
Fonctionnement de la méthode cocon sémantique Référencement Google 31 Mai 2019
Je débute avec les objectifs et ça dysfonctionne Google Analytics 13 Mai 2019
Temps réel Analytics ne fonctionne pas ce matin Google Analytics 1 Mars 2019
Réecriture simple qui ne fonctionne pas URL Rewriting et .htaccess 20 Février 2019
redirection .htaccess index.php ne fonctionne pas URL Rewriting et .htaccess 13 Décembre 2018
Redirection transparente ne fonctionne pas :-( URL Rewriting et .htaccess 2 Novembre 2018
Les options d'URL pour le tracking ne fonctionne pas AdWords 13 Août 2018
Htaccess ErrorDocument ne fonctionne pas tout le temps Développement d'un site Web ou d'une appli mobile 30 Avril 2018
Tracer le fonctionnement d'Apache (2.2.15) Administration d'un site Web 23 Avril 2018
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice