代码之家  ›  专栏  ›  技术社区  ›  Nicsoft

使用javascript、表单和PHP发布和提交问题

  •  2
  • Nicsoft  · 技术社区  · 16 年前

    我正在尝试创建一个验证电子邮件javascript,并让它与表单和PHP一起工作。当然,有些问题…

    1. 正如您在我的表单中看到的,我确实将“post”定义为方法。但我只能像获取方法一样检索数据。在我开始添加电子邮件验证脚本并采用代码之前,它已经工作了。

    2. 如果电子邮件不正确,我会返回false。不应该执行对test.php(在action中定义)的请求吗?现在,即使返回false,也可以访问该页。

    3. 根据以上问题的答案,如果电子邮件被验证为“正常”,是否需要从javascript提交表单?

    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 回复  |  直到 16 年前
        1
  •  3
  •   Community Mohan Dere    9 年前
    <input type="submit" value="Subscribe" onclick="isValidEmail()">
    

    执行此操作 isValidEmail() 然后扔掉结果。这个 onclick 自身回报 undefined 而且这并不能阻止提交。

    你可以说 onclick="return isValidEmail()" . 然而:

    1. 输入验证/提交资料 form onsubmit 不是 input click ,以确保始终对所有类型的表单提交调用它。

    2. 最好避免内联事件处理程序。

    3. 你错过了 " 在你的表格里 method 属性,这大概就是它默认返回的原因 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>
    

    我用一个普通的regexp替换了regexp,因为您当前使用的表达式是伪造的,将拒绝 许多的 有效的电子邮件地址。把客户拒之门外,因为他们的电子邮件地址不符合你对电子邮件地址的概念。

    _使用regex正确验证_稹电子邮件地址 is absurdly difficult .最好只包含对明显格式错误的字符串的简单检查。如果您真的需要检查电子邮件地址,您必须实际尝试向其发送邮件,或者至少尝试查找MXER地址的域名部分。

    见 this question 供讨论。

        2
  •  2
  •   Gipsy King    16 年前

    您应该将函数附加到表单的onSubmit事件:

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

    您可以在其中停止返回false的事件。 另外,您在method=post中输入了一个拼写错误,这就是为什么它不能作为post数据提交的原因。

    推荐文章