Post et soumettre des problèmes en utilisant javascript, php et formes
-
19-09-2019 - |
Question
Je suis en train de créer un email validate-javascript et le faire fonctionner avec des formes et PHP. De coures, certains problèmes ...
-
Comme vous pouvez le voir dans ma forme, je ne définissaient « post » comme la méthode. Mais je ne peux retreive les données comme si elle était une méthode get. Il travaillait avant que je commence à ajouter le script de vérification de courrier électronique et adopter le code pour lui.
-
Si l'e-mail est incorrect, je ne retourne faux. Est pas le point que la demande à l'test.php (défini dans l'action) ne doit pas être exécuté? Comme il est maintenant, la page est accessible même si je retourne faux.
-
En fonction des réponses aux questions ci-dessus, dois-je soumettre le formulaire à partir du Javascript si l'e-mail est vérifiée ok?
javascript:
function isValidEmail() {
regExp = /^[a-zA-Z]+([_\.-]?[a-zA-Z0-9]+)*@[a-zA-Z0-9]+([\.-]?[a-zA-Z0-9]+)*(\.[a-zA-Z]{2,4})+$/;
if(document.subscribe.email1.value.search(regExp) == -1){
alert(document.subscribe.email1.value + " Incorrect email address");
return false;
}
//document.subscribeForm.submit();
return true;
}
php:
<?php
echo $_POST['email1'];
$mysqli = mysqli_connect("localhost", "root", "", "test", "3306");
$result = mysqli_query($mysqli, "SELECT email, id, subscriber, subscribed_date FROM `user` u;");
while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){
foreach($row as $key => $value){
echo "$key = $value<BR/>";
}
}
mysqli_free_result($result);
mysqli_close($mysqli);
?>
html:
<div id="subscribe">
<form action="test.php" name="subscribe" method=post">
<p id="formlabel">E-mail</p> <input type="text" name="email1">
<br>
<p id="formlabel">Repeat e-mail</p> <input type="text" name="email2"> <br/>
<input type="submit" value="Subscribe" onclick="isValidEmail()">
</form>
La solution
<input type="submit" value="Subscribe" onclick="isValidEmail()">
exécute isValidEmail()
et jette ensuite loin le résultat. Le onclick
se retourne undefined
et la soumission ne soit pas empêchée.
Vous pouvez dire onclick="return isValidEmail()"
. Cependant:
-
Mettre des choses validation / soumission sur
form onsubmit
, noninput click
, pour assurer qu'il est toujours appelé à tous les types de soumission du formulaire. -
Il vaut mieux éviter les gestionnaires d'événements en ligne.
-
Vous avez manqué un
"
dans l'attributmethod
de votre forme, ce qui est sans doute la raison pour laquelle il a été de revenir par défautget
.
:
<form id="subscribe" method="post" action="test.php">
...
</form>
<script type="text/javascript>
document.getElementById('subscribe').onsubmit= function() {
if (!this.elements.email1.value.match(/^[^@]+@[^@]+$/) {
alert('Please enter an e-mail address');
return false;
}
if (this.elements.email1.value!=this.elements.email2.value) {
alert('E-mail addresses do not match');
return false;
}
return true;
}
</script>
Je l'ai remplacé l'expression rationnelle avec triviale, car l'expression que vous utilisez actuellement est faux et niera beaucoup adresses e-mail valide. Turning clients loin parce que leur adresse e-mail ne correspond pas à votre conception de ce qu'est une adresse e-mail est sucks.
'Valider' adresses e-mail correctement regex est absurdement difficile. Mieux vaut inclure seulement un chèque trivial pour les chaînes de toute évidence-malformés comme ci-dessus. Si vous devez vraiment vérifier l'adresse e-mail, vous devrez réellement essayer d'envoyer un mail à, ou au moins essayer de rechercher le nom de domaine dans l'adresse d'un MXer.
Voir cette question de discussion .
Autres conseils
vous devez attacher la fonction à l'événement onSubmit du formulaire:
<form action="test.php" name="subscribe" method="post" onsubmit="isValidEmail()">
où vous pouvez arrêter l'événement soit faux. En outre, vous avez fait une faute de frappe dans la méthode = post », c'est pourquoi il ne soit pas soumis en tant que données POST.