Partage
  • Partager sur Facebook
  • Partager sur Twitter

Formulaire validation adresse

    18 juillet 2019 à 15:55:38

    Bonjour,

    J'ai un formulaire page 1 qui demande une adresse à l'utilisateur.

    En page 2, je récupère l'adresse saisie par l'utilisateur et je vérifie si celle-ci est présente ou non dans ma BDD mysql.

    Par contre cela ne fonctionne que si l'utilisateur renseigne exactement l'adresse présente en BDD.

    Je voudrais un système qui soit moins exclusif -> Ex : si l'utilisateur saisi 'rue de bercy'' ou '80 rue de Bercy' ou '77 rue de Bercy, Paris'  soit validé grâce à ma bdd avec 'rue de bercy'

    J'ai pensé à modifier ma requête SQL avec LIKE '%?%' mais sans succès.

    Avez-vous des idées SVP ?

    Mon code : 

    <?php
    try
    {
    $adresse = htmlspecialchars($_POST['adresse']);
    
    $bdd = new PDO('mysql:host=mydatabase;dbname=xxx;charset=utf8', 'xxxx', '12345', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ));
    
    $requete = $bdd->prepare("SELECT * FROM mydatabase WHERE rue = :adresse ");
    
    $requete->bindValue(':adresse', $adresse, PDO::PARAM_STR);
    
    $requete->execute();
    
    if ($donnees = $requete->fetch())
    {
       echo $donnees['rue'];
    }
    else
    {
    echo "L'adresse n'existe pas " . '<br />'. "Veuillez la ressaisir SVP".'<br />';
    }
    } catch (Exception $e)
    {
    die('Erreur : ' . $e->getMessage());
    }
    ?>
                        



    • Partager sur Facebook
    • Partager sur Twitter
      18 juillet 2019 à 16:18:12

      Bonjour,

      Il faudrait voir ce que tu as essayé de faire, ceci devrait marcher :

      $requete = $bdd->prepare("SELECT * FROM mydatabase WHERE rue LIKE :adresse ");
       
      $requete->bindValue(':adresse', '%'.$adresse.'%', PDO::PARAM_STR);



      -
      Edité par philodick 18 juillet 2019 à 16:18:33

      • Partager sur Facebook
      • Partager sur Twitter
        18 juillet 2019 à 16:20:56

        Bonjour.

        Montres nous ta tentative avec la clause LIKE.

        • Partager sur Facebook
        • Partager sur Twitter

        Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

          19 juillet 2019 à 11:32:18

          Lartak a écrit:

          Bonjour.

          Montres nous ta tentative avec la clause LIKE.


          J'ai essayé plein de choses, sans succès : 

          SELECT * FROM mydatabase WHERE rue LIKE '%:adresse%'
          SELECT * FROM mydatabase WHERE rue LIKE %:adresse%
          SELECT * FROM mydatabase WHERE rue LIKE '%':adresse%
          SELECT * FROM mydatabase WHERE rue LIKE :adresse'%'
          SELECT * FROM mydatabase WHERE rue '%?%'

          philodick a écrit:

          Bonjour,

          Il faudrait voir ce que tu as essayé de faire, ceci devrait marcher :

          $requete = $bdd->prepare("SELECT * FROM mydatabase WHERE rue LIKE :adresse ");
           
          $requete->bindValue(':adresse', '%'.$adresse.'%', PDO::PARAM_STR);

          J'ai essayé mais ça ne fonctionne pas : si je saisi 'abercy' ou 'bercyy' au lieu de 'bercy', ça affiche que ça n'existe pas 

          <?php
          try
          {
          $adresse = htmlspecialchars($_POST['adresse']);
           
          $bdd = new PDO('mysql:host=mydatabase;dbname=xxx;charset=utf8', 'xxxx', '12345', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ));
           
          $requete = $bdd->prepare("SELECT * FROM mydatabase WHERE rue LIKE :adresse ");
           
          $requete->bindValue(':adresse', '%'.$adresse.'%',  PDO::PARAM_STR);
           
          $requete->execute();
           
          if ($donnees = $requete->fetch())
          {
             echo $donnees['rue'];
          }
          else
          {
          echo "L'adresse n'existe pas " . '<br />'. "Veuillez la ressaisir SVP".'<br />';
          }
          } catch (Exception $e)
          {
          die('Erreur : ' . $e->getMessage());
          }
          ?>





          -
          Edité par fabbbb 19 juillet 2019 à 11:33:18

          • Partager sur Facebook
          • Partager sur Twitter
            19 juillet 2019 à 11:53:20

            Le code que je te donnais s'appuyait ce que tu as essayé de coder au départ : ça fonctionnera si ton mot est "compris" dans la donnée en table.

            Ce que tu veux est beaucoup plus compliqué, tu veux recréer un moteur de recherche. Si tu es reparti pour recréer Google, bon courage !

            Il faut commencer par définir un algorithme pour déterminer le niveau d'approximation souhaité...

            • Partager sur Facebook
            • Partager sur Twitter
              19 juillet 2019 à 12:14:50

              Bonjour,

              Vous-oubliez les majuscules aussi, si on rentre bercy, BERCY ou Bercy il faut aussi que ça match, pour cela faut que la recherche ne soit pas sensible a la casse:

              https://stackoverflow.com/questions/5629111/how-can-i-make-sql-case-sensitive-string-comparison-on-mysql

              philodick a écrit:

              Le code que je te donnais s'appuyait ce que tu as essayé de coder au départ : ça fonctionnera si ton mot est "compris" dans la donnée en table.

              Ce que tu veux est beaucoup plus compliqué, tu veux recréer un moteur de recherche. Si tu es reparti pour recréer Google, bon courage !

              Il faut commencer par définir un algorithme pour déterminer le niveau d'approximation souhaité...


              Pas forcement, faut juste utiliser les bons outils sinon: https://www.elastic.co/fr/products/elasticsearch

              -
              Edité par coolswing 19 juillet 2019 à 12:15:57

              • Partager sur Facebook
              • Partager sur Twitter
                19 juillet 2019 à 15:22:01

                Elasticsearch est gratuit.

                -
                Edité par coolswing 19 juillet 2019 à 15:23:36

                • Partager sur Facebook
                • Partager sur Twitter
                  19 juillet 2019 à 15:45:00

                  philodick a écrit:

                  Le code que je te donnais s'appuyait ce que tu as essayé de coder au départ : ça fonctionnera si ton mot est "compris" dans la donnée en table.

                  Ce que tu veux est beaucoup plus compliqué, tu veux recréer un moteur de recherche. Si tu es reparti pour recréer Google, bon courage !

                  Il faut commencer par définir un algorithme pour déterminer le niveau d'approximation souhaité...


                  Merci philodick. Par contre ça devrait donc marcher si je saisi 'bercyy' au lieu de 'bercy' non ?

                  coolswing a écrit:

                  Bonjour,

                  Vous-oubliez les majuscules aussi, si on rentre bercy, BERCY ou Bercy il faut aussi que ça match, pour cela faut que la recherche ne soit pas sensible a la casse:

                  https://stackoverflow.com/questions/5629111/how-can-i-make-sql-case-sensitive-string-comparison-on-mysql

                  philodick a écrit:

                  Le code que je te donnais s'appuyait ce que tu as essayé de coder au départ : ça fonctionnera si ton mot est "compris" dans la donnée en table.

                  Ce que tu veux est beaucoup plus compliqué, tu veux recréer un moteur de recherche. Si tu es reparti pour recréer Google, bon courage !

                  Il faut commencer par définir un algorithme pour déterminer le niveau d'approximation souhaité...


                  Pas forcement, faut juste utiliser les bons outils sinon: https://www.elastic.co/fr/products/elasticsearch

                  elasticsearch semble bien payant (17$/mo). Je vais y faire un tour plus approfondi.

                  J'ai trouvé aussi https://www.algolia.com/ quelqu'un connait ? Je pense que l'autocompletion proposée peut être une solution.

                  -
                  Edité par fabbbb 19 juillet 2019 à 15:50:26

                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 juillet 2019 à 15:52:04

                    fabbbb a écrit:



                    Merci philodick. Par contre ça devrait donc marcher si je saisi 'bercyy' au lieu de 'bercy' non ?

                    Ben non, Bercyy n'est pas "compris" dans Bercy (l'inverse oui).
                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 juillet 2019 à 15:53:47

                      Bonjour.

                      fabbbb a écrit:

                      elasticsearch semble bien payant (17$/mo). Je vais y faire un tour plus approfondi.

                      Il n'est pas nécessairement payant, il ne l'est que sur le site, pour en apprendre plus sur ElasticSearch: Maîtrisez les bases de données NoSQL - OpenClassrooms » Etudiez le fonctionnement d’Elasticsearch.

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

                        19 juillet 2019 à 17:31:39

                        fabbbb a écrit:

                        coolswing a écrit:

                        Bonjour,

                        Vous-oubliez les majuscules aussi, si on rentre bercy, BERCY ou Bercy il faut aussi que ça match, pour cela faut que la recherche ne soit pas sensible a la casse:

                        https://stackoverflow.com/questions/5629111/how-can-i-make-sql-case-sensitive-string-comparison-on-mysql

                        philodick a écrit:

                        Le code que je te donnais s'appuyait ce que tu as essayé de coder au départ : ça fonctionnera si ton mot est "compris" dans la donnée en table.

                        Ce que tu veux est beaucoup plus compliqué, tu veux recréer un moteur de recherche. Si tu es reparti pour recréer Google, bon courage !

                        Il faut commencer par définir un algorithme pour déterminer le niveau d'approximation souhaité...


                        Pas forcement, faut juste utiliser les bons outils sinon: https://www.elastic.co/fr/products/elasticsearch

                        elasticsearch semble bien payant (17$/mo). Je vais y faire un tour plus approfondi.

                        J'ai trouvé aussi https://www.algolia.com/ quelqu'un connait ? Je pense que l'autocompletion proposée peut être une solution.

                        -
                        Edité par fabbbb il y a environ 1 heure


                        non Elasticsearch est gratuit, par contre les packs de logiciel avec cloud assistance ect... son payant.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          20 juillet 2019 à 16:31:12

                          Merci à tous pour vos réponses :D

                          Vous me conseillez plutôt ElasticSearch mais c'est plutôt orienté recherche noSQL, je n'utiliserai pas ma bdd mysql et je devrait reformatter mes données.

                          Ou une vérification en Ajax (ici) ou en jQuery (ici  ou + simple ici) ???

                          En gros un système d'autocompletion.

                          • Partager sur Facebook
                          • Partager sur Twitter
                            20 juillet 2019 à 17:35:21

                            Normalement ya des moyen de synchroniser elasticsearch avec ta bdd comme ça tu enregistres sur MySQL et tu recherches tes données depuis elasticsearch
                            • Partager sur Facebook
                            • Partager sur Twitter
                              22 juillet 2019 à 10:52:00

                              J'ai réussi grâce à JqueryUI (à partir du tuto openclassroom ici ).

                              Par contre, si je veux faire appel au fichier source.php :

                              $('#recherche').autocomplete({
                                  source : 'liste.php'
                              });

                              étant donné que je suis sur Wordpress je ne sais pas comment faire? 

                              Directement dans ma page-personnalisee.php ou via un shortcode ?

                              • Partager sur Facebook
                              • Partager sur Twitter

                              Formulaire validation adresse

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown