Javascript, formları ve php kullanarak Posta ve teslim sorunları

2 Cevap php

Ben ve formları ve PHP ile çalışan olsun javascript doğrulayıcı bir-e-posta oluşturmak için çalışıyorum. Coures, bazı sorunlar ...

  1. Benim şeklinde görebileceğiniz gibi, ben yöntemi olarak "yazı" tanlımıyordu. Bir get yöntemi oldu sanki ama sadece verileri Getirme edebilirsiniz. Ben e-posta doğrulama komut dosyası eklemek ve buna kod benimsemeye başladı önce çalışıyordu.

  2. E-posta yanlış ise, return false yok. (Eylem tanımlanmıştır) test.php için istek idam gerektiğini noktası değil midir? Şimdi olduğu gibi return false bile, sayfa erişilir.

  3. E-posta ok doğrulandığı takdirde yukarıdaki soruların cevapları bağlı olarak, ben Javascript formu göndermek gerekiyor?

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> 

2 Cevap

<input type="submit" value="Subscribe" onclick="isValidEmail()">

Bu yürütür isValidEmail() ve sonra sonucu atıyor. onclick kendisi verir undefined ve sunulması engellenmez.

Diyebilirsiniz onclick="return isValidEmail()". Ancak;

  1. Her zaman form gönderme her türlü denir sağlamak için form onsubmit, değil input click üzerinde doğrulama / gönderme şeyler koyun.

  2. Inline olay işleyicileri önlemek için daha iyi.

  3. Sen muhtemelen neden geri get olarak varsaymak idi formunuzun method özniteliği, bir " kaçırdı.

bu yüzden:

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

Şu anda kullanmakta olduğunuz ifadesi sahte olduğunu ve many geçerli bir e-posta adresleri inkar edecek, çünkü önemsiz bir biri ile regexpi değiştirilir. E-posta adresi, bir e-posta adresi berbat ne senin anlayışına uymuyor çünkü uzak müşteriler dönüm.

Regex ile düzgün e-posta adreslerini 'Members' is absurdly difficult. Daha iyi yukarıdaki gibi açıkça-malforme dizeleri için sadece önemsiz bir kontrol eklemek. Eğer gerçekten e-mail adresinizi kontrol etmek gerekirse, aslında bunun için bir posta göndermek için denemek zorunda, ya da en azından bir MXer için adresi alan adı kısmını arama için çalışacağız.

this question tartışma için bkz.

Eğer formun onsubmit olay işlevini eklemek gerekir:

<form action="test.php" name="subscribe" method="post" onsubmit="isValidEmail()">

where you can stop the event returning false. Also, you made a typo in method=post", that's why it doesn't get submitted as POST data.