IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Saisie automatique dans un formulaire PHP/MySQL


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Par défaut Saisie automatique dans un formulaire PHP/MySQL
    Bonjour,

    Je me permets de vous demander de l’aide. Je suis actuellement en train de créer un formulaire de modification d’une table en utilisant PHP/MySQL/HTML/CSS qui fonctionne mais ce que je voudrais c’est une saisie automatique :

    C’est-à-dire que, par exemple, quand j’informe dans le formulaire le nom, je voudrais que les autres champs soient remplient automatiquement avec les information de ma BDD (prénom, téléphone, adresse_mail…)

    Je n’ai pas trouvé ce que je voulais en cherchant sur les forums/tuto ou autres et je suis vraiment débutante donc si vous avez une solution cela m’arrangerais fortement

    Bonne journée !

  2. #2
    Modérateur
    Avatar de Vil'Coyote
    Homme Profil pro
    Développeur adélia & Web
    Inscrit en
    Février 2008
    Messages
    4 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur adélia & Web
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 4 583
    Par défaut
    c'est de l'ajax. au onchange de ton champs tu envoi les info et récupère la réponse c'est le même principe que pour la complétion auto d'un champ.

    d'un autre côté une recherche à l'aide du bouton dédié à cet effet t'aurais amener vers des exemples :
    http://www.developpez.net/forums/d92...tomatiquement/
    http://x-zolezzi.developpez.com/tuto...utocompletion/

    ....
    la vie n'est pas cirrhose des foies ...

    Avant de poster un message Rechercher n'est pas qu'une option.
    FAQ Web - Tuto Web

  3. #3
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Salut Marina,

    Il va être difficile de répondre parfaitement à ta question mais je pense pouvoir t'aiguiller dans la bonne direction. Donc, voici la théorie :

    Je pense que la meilleure façon de faire pour ce genre de choses, est d'utiliser ce qu'on appelle l'AJAX. Tu l'utilises peut-être déjà actuellement, si pendant que tu commences à taper le nom, tu fais une demande à ton serveur d'afficher des personnes dont le contient ce que tu as tapé. Si tu as déjà ça, tu as presque fait le plus difficile.

    En effet, avec une telle requête, on s'attend à ce que les données retournées le sont au format JSON, avec une ligne par personne.
    Exemple (on a tapé la lettre P) :
    Code json : Sélectionner tout - Visualiser dans une fenêtre à part
    {"Paul","Philippe", "Pierre"}
    Et donc, dans la récupération AJAX, une boucle qui affiche la liste des noms.

    Ce que nous allons faire à la place, c'est d'envoyer plein plein d'infos que nous stockerons dans un array que nous pourrons récupérer dans notre JavaScript, grâce à la fonction PHP json_encode().

    Code json : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {
    ["prénom":"Paul", "nom":"Machin","address":"Rue de la plage 41"],
    ["prénom":"Philippe", "nom":"Machin2","address":"Rue de la piscine 41"],
    ["prénom":"Pierre", "nom":"Machin3","address":"Rue du cimetière 41"],
    }

    Je suis en train de réaliser un petit bout de code complet, en utilisant jQuery-UI Autocomplete. Je reviendrai éditer mon message (ou ajouter par la suite si qqun vient répondre)

  4. #4
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Voici une démo du code : http://tests.pierre-roels.com/autocomplete_ajax.php

    Pour me faciliter la tâche, je n'ai pas créé de base de données avec un vrai autocomplete, donc en gros, tu peux écrire n'importe quoi : ça déclenchera l'autocomplete et te retournera toujours les mêmes résultats.

    Voilà donc le premier aspect JS :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    $("#last_name").autocomplete({
        minLength: 1,
        source: function(request, response) {
            $.ajax({ // call AJAX
                url: '<?php echo $_SERVER['PHP_SELF']; ?>',
                type: "GET",
                dataType: 'json',
                data: 'q=' + request.term, // défini le terme à rechercher
                async: true,
                cache: true,
                success: function(ac_data) {
                    response(ac_data); // On va ajouter le résultat au tableau des résultats d'Autocomplete
                },
                error: function(msg) {
                    alert('Une erreur est survenue.');
                }
            });
        },
        select: function(event, ui) { // Assigniation de la valeur des champs au select
            $('#last_name').val(ui.item.last_name);
            $('#first_name').val(ui.item.first_name);
            $('#email_addr').val(ui.item.email);
        }
    });

    Et voici à quoi peut ressemble les données retournées par le PHP :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <?php
    $datas = array(
        array(
            'id' => 1,
            'last_name' => 'Truc',
            'first_name' => 'Pierre',
            'email' => 'pierre.truc@gmail.com',
            'label' => 'Pierre Truc',
            'value' => 'Truc',
        ),
        array(
            'id' => 2,
            'last_name' => 'Machin',
            'first_name' => 'Paul',
            'email' => 'paul.machin@gmail.com',
            'label' => 'Paul Machin',
            'value' => 'Machin',
        ),
        array(
            'id' => 3,
            'last_name' => 'Bidule',
            'first_name' => 'Philipphe',
            'email' => 'philippe.bidule@gmail.com',
            'label' => 'Philipphe Bidule',
            'value' => 'Bidule',
        ),
    );
    if (!empty($_GET['q'])) {
        ob_get_clean();
        die(json_encode($datas));
    }
    ?>

    En espérant que ça t'aura aidé !

  5. #5
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Au passage, pour avoir des résultats plus significatifs et aussi pour soulager le serveur de bdd il est souvent judicieux de mettre minimum 2 comme valeur dans le minLength

  6. #6
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Citation Envoyé par ABCIWEB Voir le message
    Au passage, pour avoir des résultats plus significatifs et aussi pour soulager le serveur de bdd il est souvent judicieux de mettre minimum 2 comme valeur dans le minLength
    Effectivement, bonne remarque. J'ai oublié de le préciser, mea culpa :$

    Il me semble même (mais sans certitude) que la valeur par défaut du minLength est de 3, et -perso- je vais rarement en-dessous de cette valeur.

  7. #7
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Rebonjour,
    Je me permet de répondre ici à la question reçu par email, afin qu'elle puisse potentiellement être profitable à tout le monde !

    Voici le message que j'ai reçu :
    Bonjour, je viens vous revoir par rapport à mon sujet d'hier (http://www.developpez.net/forums/d14...l/#post7877424). Je vous remercie beaucoup pour vos codes, c'est vrai que AJAX et JS sont des langages que je ne connais pas du tout et je ne comprend du coup pas tout... Je ne sais pas ou mettre tel code... Ce que j'ai compris est qu'il faut que je mette du code JS dans mon formulaire et que je créé un fichier PHP qui fera appel a AJAX et JSON c'est bien cela?!
    Tout me parait bien complexe ^^ En vous remerciant de m'aiguiller. Bonne journée.
    Marina
    Alors, comment ça se passe ? C'est une bonne question !

    Pour faire simple, on va repartir des bases : le CSS entre les balises <head /> et le JS, tout en bas, juste avant la fermeture </body>. Le JS tout en bas permet de ne pas bloquer le chargement du site (au cas où une erreur JS serait rencontrée, ou un fichier qui est indisponible), il permet aussi plus facilement d'écrire son JS car l'utilisation du $(window).ready() n'est plus vraiment nécessaire, vu qu'on est déjà en bas du document et qu'il est donc déjà ready.

    A partir de là, on sait donc où placer le code JS que j'ai donné plus haut. Reste à savoir où mettre le PHP !
    Habituellement, on peut le mettre un peu n'importe où, mais pour une question de propreté je le met souvent en haut du document, ou carrément dans un autre fichier (avec une inclusion tout en haut du document).
    Dans le cas de l'AJAX c'est un peu particulier. En effet, suivant ce qu'on souhaite recevoir comme valeur de retour (voir l'attribut dataType de jQuery.ajax() => (xml, json, script, ou html)), il vaut mieux éviter d'avoir tout autre contenu précédent cette valeur. C'est d'ailleurs pour ça que dans mon code, je fais un ob_get_clean() juste avant d'echo mon JSON.
    Pour résumer : je met l'utilisation d'AJAX tout en haut, en m'assurant que rien d'autre ne soit echo. Par exemple, si j'avais un retour à la ligne avant l'affichage de mon JSON, ce dernier n'étant -du coup- pas un JSON valide, il serait impossible de l'utiliser.

    Voici le code complet de la page, à titre d'information :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    <?php
    $datas = array(
        array(
            'id' => 1,
            'last_name' => 'Truc',
            'first_name' => 'Pierre',
            'email' => 'pierre.truc@gmail.com',
            'label' => 'Pierre Truc',
            'value' => 'Truc',
        ),
        array(
            'id' => 2,
            'last_name' => 'Machin',
            'first_name' => 'Paul',
            'email' => 'paul.machin@gmail.com',
            'label' => 'Paul Machin',
            'value' => 'Machin',
        ),
        array(
            'id' => 3,
            'last_name' => 'Bidule',
            'first_name' => 'Philipphe',
            'email' => 'philippe.bidule@gmail.com',
            'label' => 'Philipphe Bidule',
            'value' => 'Bidule',
        ),
    );
    if (!empty($_GET['q'])) {
        ob_get_clean();
        die(json_encode($datas));
    }
    ?>
    <!DOCTYPE html>
    <html>
        <head>
            <title>Autocomplete AJAX</title>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <meta http-equiv="Cache-control" content="private">
            <link href="assets/css/bootstrap.min.css" rel="stylesheet">
            <link href="assets/jquery-ui-1.11.0.custom/jquery-ui.min.css" rel="stylesheet">
            <style>
                body { padding-top: 60px; }
                .navbar-form .radio label, .navbar-form  .checkbox label { color: #FFF; }
                #preview { display: block; margin-left: auto; margin-right: auto; }
                img { max-width: 100%; }
            </style>
        </head>
        <body>
            <div class="container">
                <h1>Autocomplete AJAX avec remplissage de champs</h1>
                <p class="alert alert-info">Seul le champ <strong>NOM</strong> déclenche l'autocomplete.
                    <br />Je ne respecte pas ce que vous écrivez car pas envie de faire une base de données, donc <b>vous pouvez écrire n'importe quoi</b> ! :></p>
                <form method="post" action="" class="form-horizontal">
                    <div class="form-group">
                        <label class="control-label col-sm-4" for="last_name">Nom</label>
                        <div class="col-sm-8">
                            <input type="text" name="last_name" id="last_name" value="" class="form-control" />
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="control-label col-sm-4" for="first_name">Prénom</label>
                        <div class="col-sm-8">
                            <input type="text" name="first_name" id="first_name" value="" class="form-control" />
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="control-label col-sm-4" for="email_addr">Adresse email</label>
                        <div class="col-sm-8">
                            <input type="text" name="email_addr" id="email_addr" value="" class="form-control" />
                        </div>
                    </div>
                </form>
            </div>
     
            <script src="assets/js/jquery-1.10.2.min.js"></script>
            <script src="assets/js/jquery-migrate-1.2.1.min.js"></script>
            <script src="assets/jquery-ui-1.11.0.custom/jquery-ui.min.js"></script>
            <script>
                $("#last_name").autocomplete({
                    minLength: 1,
                    source: function(request, response) {
                        $.ajax({// call AJAX
                            url: '<?php echo $_SERVER['PHP_SELF']; ?>',
                            type: "GET",
                            dataType: 'json',
                            data: 'q=' + request.term, // défini le terme à rechercher
                            async: true,
                            cache: true,
                            success: function(ac_data) {
                                response(ac_data); // On va ajouter le résultat au tableau des résultats d'Autocomplete
                            },
                            error: function(msg) {
                                alert('Une erreur est survenue.');
                            }
                        });
                    },
                    select: function(event, ui) { // Assigniation de la valeur des champs au select
                        $('#last_name').val(ui.item.last_name);
                        $('#first_name').val(ui.item.first_name);
                        $('#email_addr').val(ui.item.email);
                    }
                });
            </script>
        </body>
    </html>

    Attention, une fois de plus, il s'agit d'un array "statique" de résultats. Dans la pratique, il faudrait le remplacer par une recherche dans un array, fichier, base de données, etc... afin de correspondre au terme recherché dans l'autocomplete ($_GET['q']).

    Rappel : pour voir le script à l'oeuvre, c'est ici : http://tests.pierre-roels.com/autocomplete_ajax.php

Discussions similaires

  1. Problème de syntaxe dans un formulaire php-mysql
    Par alex45500 dans le forum Langage
    Réponses: 3
    Dernier message: 05/11/2012, 15h56
  2. Saisie automatique dans un formulaire d'un WebBrowser
    Par -dyla- dans le forum Composants VCL
    Réponses: 2
    Dernier message: 05/04/2012, 16h48
  3. saisie automatique dans le formulaire
    Par DOUNIA595 dans le forum IHM
    Réponses: 2
    Dernier message: 20/08/2007, 08h42
  4. Saisie semi-automatique dans un formulaire
    Par Harmony dans le forum IHM
    Réponses: 7
    Dernier message: 19/03/2007, 20h35
  5. Réponses: 14
    Dernier message: 27/11/2006, 13h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo