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 ...

  1. 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.

  2. 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.

  3. 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> 
Était-ce utile?

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:

  1. Mettre des choses validation / soumission sur form onsubmit, non input click, pour assurer qu'il est toujours appelé à tous les types de soumission du formulaire.

  2. Il vaut mieux éviter les gestionnaires d'événements en ligne.

  3. Vous avez manqué un " dans l'attribut method de votre forme, ce qui est sans doute la raison pour laquelle il a été de revenir par défaut get.

:

<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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top