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:
echo '<input type="hidden" name="code_postal_inexistant" id="code_postal_inexistant" value="" />';
:
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&v=2&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 :
echo '<input type="hidden" name="code_postal_inexistant" id="code_postal_inexistant" value="" />';
:
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&v=2&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 !
Partager