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

JavaScript Discussion :

Auto submit + variable js vers php via formulaire


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 7
    Par défaut Auto submit + variable js vers php via formulaire
    Salut,

    Je réalise un site commercial pour un projet d'études, tout fonctionne, ou presque (panier, panneau d'admin, bdd, gestion compte du client, regex, etc).

    Mais je voulais rajouter une petite astuce/gadget, la vérification de la validité (en plus du bon format grâce au regex) réelle (j'insiste, hein ?) d'un code postal Canadien/Québcois, lors de l'inscription, grâce à l'API de googlemaps.

    Voici donc une page de traitement (blanche, no design, etc) de mon formulaire d'inscription (donc ce dernier fait + de 500 lignes, vive la gestion de tous les nombreux champs et messages correspondants, j'imagine qu'il y a surement plus propre et plus court, mais tout est fait maison, comme 90% du reste :p...) qui ne fait que recopier ces derniers pour les lui renvoyer.

    Pourquoi un truc aussi inutile ? juste pour un champs en particulier, le code postal. En effet, je tente de confirmer la validité du code postal avec l'api de googlemaps (je me répète), jusqu'à la tout va bien, ça marche, le seul hic c'est que le formulaire de cette page ne renvoi pas ma variable vers mon formulaire d'inscription lorsque j'utilise un auto submit (je pense pas avoir besoin de montrer la grosse page car tout marche avec un submit manuel, mais c'est pas le top, hein).

    Voici donc les deux morceaux de code :

    version submit manuel : qui me renvoi tous les champs, y compris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<input type="hidden" name="code_postal_inexistant" id="code_postal_inexistant" value="" />';
    :
    Code : 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
    <?php
            session_start();
            include('fonctions.php');
            
            if (isset($_POST['bouton_inscription']))
            {
                    $code_postal = 'G6V'.strtoupper($_POST['code_postal']);
                    echo '<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAL6RK3B_OBIwvFTNg-n7VfRSjzOa9rGrxC0ak5IT6S_F6-jqUyBTx4_FvpnMCQzzqPLX_hIaTcH9OqQ" type="text/javascript"></script>';
                    echo '<script type="text/javascript">';
                    echo 'function load()';
                    echo '{';
                    echo 'geocoder = new GClientGeocoder();';
                    echo 'geocoder.getLatLng(';
                    echo '"'.$code_postal.'",';
                    echo 'function(position)';
                    echo '{';
                    echo 'if (!position)';
                    echo '{';
                    echo 'var code_postal_inexistant = "true";';
                    //echo 'document.getElementById("code_postal_inexistant").value=code_postal_inexistant;';
                    echo 'document.form.code_postal_inexistant.value=code_postal_inexistant;';
                    echo '}';
                    echo '}';
                    echo ');';
                    echo '}';
                    
                    echo '</script>';                       
                    echo '</head>';
                    echo '<body onload="load()" onunload="GUnload()">';
                    //;document.form.submit()
                    echo '<form action="inscription.php" name="form" id="form" method="post">';
                    echo '<input type="hidden" name="username" value="'.$_POST['username'].'" />';
                    echo '<input type="hidden" name="password1" value="'.$_POST['password1'].'" />';
                    echo '<input type="hidden" name="password2" value="'.$_POST['password2'].'" />';
                    echo '<input type="hidden" name="prenom" value="'.$_POST['prenom'].'" />';
                    echo '<input type="hidden" name="nom" value="'.$_POST['nom'].'" />';
                    echo '<input type="hidden" name="adresse" value="'.$_POST['adresse'].'" />';
                    echo '<input type="hidden" name="appartement" value="'.$_POST['appartement'].'" />';
                    echo '<input type="hidden" name="ville" value="'.$_POST['ville'].'" />';
                    echo '<input type="hidden" name="code_postal" value="'.$_POST['code_postal'].'" />';
                    echo '<input type="hidden" name="telephone1" value="'.$_POST['telephone1'].'" />';
                    echo '<input type="hidden" name="telephone2" value="'.$_POST['telephone2'].'" />';
                    echo '<input type="hidden" name="email1" value="'.$_POST['email1'].'" />';
                    echo '<input type="hidden" name="email2" value="'.$_POST['email2'].'" />';
                    echo '<input type="hidden" name="code_postal_inexistant" id="code_postal_inexistant" value="" />';
                    echo '<input type="submit" name="bouton_inscription" value="S\'inscrire" />';
                    echo '</form>';
            }
            else
            {
                    $_SESSION['erreur'] = true;
                    $_SESSION['page'] = $_SERVER['PHP_SELF'];
                    rediriger_vers('erreur.php');
            }
            echo '</body>';
            echo '</html>';
    ?>

    version auto submit qui me renvoi tous les champs, sauf :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<input type="hidden" name="code_postal_inexistant" id="code_postal_inexistant" value="" />';
    :
    Code : 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
    <?php
            session_start();
            include('fonctions.php');
            
            if (isset($_POST['bouton_inscription']))
            {
                    $code_postal = 'G6V'.strtoupper($_POST['code_postal']);
                    echo '<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAL6RK3B_OBIwvFTNg-n7VfRSjzOa9rGrxC0ak5IT6S_F6-jqUyBTx4_FvpnMCQzzqPLX_hIaTcH9OqQ" type="text/javascript"></script>';
                    echo '<script type="text/javascript">';
                    echo 'function load()';
                    echo '{';
                    echo 'geocoder = new GClientGeocoder();';
                    echo 'geocoder.getLatLng(';
                    echo '"'.$code_postal.'",';
                    echo 'function(position)';
                    echo '{';
                    echo 'if (!position)';
                    echo '{';
                    echo 'var code_postal_inexistant = "true";';
                    //echo 'document.getElementById("code_postal_inexistant").value=code_postal_inexistant;';
                    echo 'document.form.code_postal_inexistant.value=code_postal_inexistant;';
                    echo '}';
                    echo '}';
                    echo ');';
                    echo '}';
                    
                    echo '</script>';                       
                    echo '</head>';
                    echo '<body onload="load();document.form.submit()" onunload="GUnload()">';
                    //;document.form.submit()
                    echo '<form action="inscription.php" name="form" id="form" method="post">';
                    echo '<input type="hidden" name="username" value="'.$_POST['username'].'" />';
                    echo '<input type="hidden" name="password1" value="'.$_POST['password1'].'" />';
                    echo '<input type="hidden" name="password2" value="'.$_POST['password2'].'" />';
                    echo '<input type="hidden" name="prenom" value="'.$_POST['prenom'].'" />';
                    echo '<input type="hidden" name="nom" value="'.$_POST['nom'].'" />';
                    echo '<input type="hidden" name="adresse" value="'.$_POST['adresse'].'" />';
                    echo '<input type="hidden" name="appartement" value="'.$_POST['appartement'].'" />';
                    echo '<input type="hidden" name="ville" value="'.$_POST['ville'].'" />';
                    echo '<input type="hidden" name="code_postal" value="'.$_POST['code_postal'].'" />';
                    echo '<input type="hidden" name="telephone1" value="'.$_POST['telephone1'].'" />';
                    echo '<input type="hidden" name="telephone2" value="'.$_POST['telephone2'].'" />';
                    echo '<input type="hidden" name="email1" value="'.$_POST['email1'].'" />';
                    echo '<input type="hidden" name="email2" value="'.$_POST['email2'].'" />';
                    echo '<input type="hidden" name="code_postal_inexistant" id="code_postal_inexistant" value="" />';
                    echo '<input type="hidden" name="bouton_inscription" value="S\'inscrire" />';
                    echo '</form>';
            }
            else
            {
                    $_SESSION['erreur'] = true;
                    $_SESSION['page'] = $_SERVER['PHP_SELF'];
                    rediriger_vers('erreur.php');
            }
            echo '</body>';
            echo '</html>';
    ?>
    Les seules différences entre les deux codes, c'est que je met submit ou hidden dans le dernier champs du form et je met document.form.submit(), ou pas.

    Donc, en manuel, dans la page de retour, je vérifie si le $_POST['code_postal_inexistant'] est à true, et si oui, j'affiche un message d'erreur du type : "Le code postal est au bon format (de la forme : "G6V 0A0") mais n'existe pas."

    Donc, un mauvais CP et j'obtiens ce message, un bon et j'obtiens rien, sauf que pour un même code postal, en auto submit, le $_POST['code_postal_inexistant'] passe à la trappe.

    Quelqu'un aurait une solution ? je pense pas que ça plaira au gens de cliquer sur un submit page blanche, sauf si je magouille et que je remet le design autour mine de rien, moyen quoi, ça ne justifie pas une validation.

    (Je précise aussi que ça marchait sans passer par cette page de traitement externe, sauf que la première fois que l'on valide le formulaire, la variable passe aussi à la trappe, ce n'est que la seconde fois qu'on le valide qu'elle est à true, si elle le mérite .

    J'espère m'être fait comprendre, il est bientôt 2h du mat ici (étudiant de Corse, au Canada/QC ), à demain j'espère !

    Merci d'avance !

  2. #2
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    Bonjour , merci de bien vouloir mettre le code généré et non le PHP

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 7
    Par défaut
    On est d'accord que dans mon cas, c'est pas censé changer grand chose vu la gueule du code est implicite (j'aurai aussi du mal à montrer la partie généré de la page de traitement avec l'auto submit).

    Ce qui change c'est vraiment le retour dans l'autre page (j'avais tout mis en GET au lieu de POST et, oui, la variable js > php passe à la trappe en auto submit), un true, ou rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAL6RK3B_OBIwvFTNg-n7VfRSjzOa9rGrxC0ak5IT6S_F6-jqUyBTx4_FvpnMCQzzqPLX_hIaTcH9OqQ" type="text/javascript"></script><script type="text/javascript">function load(){geocoder = new GClientGeocoder();geocoder.getLatLng("G6V",function(position){if (!position){var code_postal_inexistant = "true";document.form.code_postal_inexistant.value=code_postal_inexistant;}});}</script></head><body onload="load()" onunload="GUnload()"><form action="inscription.php" name="form" id="form" method="post"><input type="hidden" name="username" value="" /><input type="hidden" name="password1" value="" /><input type="hidden" name="password2" value="" /><input type="hidden" name="prenom" value="" /><input type="hidden" name="nom" value="" /><input type="hidden" name="adresse" value="" /><input type="hidden" name="appartement" value="" /><input type="hidden" name="ville" value="" /><input type="hidden" name="code_postal" value="" /><input type="hidden" name="telephone1" value="" /><input type="hidden" name="telephone2" value="" /><input type="hidden" name="email1" value="" /><input type="hidden" name="email2" value="" /><input type="hidden" name="code_postal_inexistant" id="code_postal_inexistant" value="" /><input type="submit" name="bouton_inscription" value="S'inscrire" /></form></body></html>
    J'ai précisé qu'en submit manuel tout fonctionne, mais c'est pas le but, ça devrais le faire aussi en auso submit.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 7
    Par défaut
    Quelqu'un ? :/

  5. #5
    Membre Expert
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Par défaut
    GClientGeocoder
    est elle synchrone ou asynchrone?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 7
    Par défaut
    En fait c'est pas ça qui marche pas, si je voudrais récupérer "toto" plutôt que "true" ça serait le même problème.

    Le code pour googlemaps fonctionne, c'est la récupération de la variable en JS qui ne marche qu'avec un bouton submit alors qu'elle est ignorée (mais pas les autres) quand le formulaire est envoyé automatiquement.

  7. #7
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Bonjour,
    tu testes sous IE ?
    Si oui, modifie le nom de ta variable "code_postal_inexistant".

    Parce qu'en l'état, la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.form.code_postal_inexistant.value=code_postal_inexistant;
    doit lui donner des boutons

    ... et il serait préférable :

    A+

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 7
    Par défaut
    Merci de m'aider !

    Firefox (j'ai également testé sur IE)

    Ça à l'air plus propre comme ça en effet, mais ça ne fonctionne pas.

    Je comprend pas la différence entre recevoir la variable en manuel avec bouton et en automatique, les autres sont récupérées, sauf celle là, mais c'est un cas particulier, vu que c'est une variable JS à la base (mais le problème reste le même, si je la récupère avec un bouton visible, pourquoi un auto submit ne la prends pas, sachant que ma syntaxe paraît correcte, jusqu'à preuve du contraire).

    Si quelqu'un voudrait bien tester le code pour visualiser l'absurdité en live :p

    Ciao.

  9. #9
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par ketsueki Voir le message
    Si quelqu'un voudrait bien tester le code pour visualiser l'absurdité en live
    D'où l'intérêt de la demande initiale :
    Citation Envoyé par le_chomeur Voir le message
    Bonjour , merci de bien vouloir mettre le code généré et non le PHP
    Sinon, on peut pas

    A+

  10. #10
    Membre Expert
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($_POST['bouton_inscription']))

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 7
    Par défaut
    Matthieu2000, dis ce qui va pas plutôt que de te foutre de moi (c'est la mode des gens plus expérimentés ?) :p

    Je sais pas comment vérifier à part avec ce moyen, que j'ai bien cliqué sur un bouton en particulier sur la page précédente, où est donc le mal ?

    J'ai fais tout le site (gestion panier compris) sans presque regarder comment on faisait ailleurs, il est donc fort possible que certaines choses ne soient pas propres.

    Faut dire aussi qu'on nous a pas donné beaucoup de temps et d'explications pour le réaliser, donc j'ai pas trop eu le temps de me pencher sur ce genre de choses.

    E.Bzz, je l'ai fait. Aussi, en méthode get, on peut très bien voir que le retour de la variable est vide.

Discussions similaires

  1. [PHP-JS] Variable javascript vers php
    Par guigui31 dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 13/06/2007, 15h39
  2. [PHP-JS] récupérer variable javascript vers php
    Par felix14 dans le forum Langage
    Réponses: 5
    Dernier message: 14/02/2007, 15h39
  3. [PHP-JS] Transmettre une variable javascript vers php
    Par phpaide dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 20/05/2006, 08h30
  4. [PHP-JS] variable javascript vers PHP
    Par nicoaix dans le forum Langage
    Réponses: 3
    Dernier message: 17/03/2006, 21h28

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