【问题标题】:check if input value not equal to integer then don't submit form检查输入值是否不等于整数然后不提交表单
【发布时间】:2017-04-06 11:20:24
【问题描述】:

我有一个简单的 php 电子邮件表单,但我收到了垃圾邮件。我添加了一个检查输入,用户必须填写输入。如果输入值等于 12 则提交表单,否则不要提交表单并弹出错误。(请做数学。)

<form action="" method="post">
<input type="text" name="name" placeholder="name" required>
<input type="text" name="email" placeholder="email" required>
<input type="text" name="phone" placeholder="phone" required>

<div class="check">
   <label>6 x 2 =</label>
   <input type="text" name="not_robot" required="required">
</div>

<input type="submit" value="submit">
</form>

我正在使用下面的php方法:

if(isset($_POST['not_robot']) !== 12 && isset($_POST['not_robot']) !== ''){
    echo '<script type="text/javascript">alert("Please do the math, if you are human.");</script>';
}else{
    //email script here
}

当我提交表单时,出现错误弹出窗口说“请做数学,如果你是人类”,但在我关闭弹出窗口后,它也会发送电子邮件。 感谢您的帮助

P.S:如果检查方法可以使用 javascript 或 jquery,那将是一个很大的帮助。

【问题讨论】:

    标签: javascript php jquery html forms


    【解决方案1】:

    你需要在客户端测试:

    纯 JS

    window.onload=function() {
      document.querySelector("form").onsubmit=function(e) {
        var val = this.elements["not_robot"].value;
        return !isNaN(val) && parseInt(Number(val)) == val &&  !isNaN(parseInt(val, 10);
      }
    }
    

    jQuery:

    $(function() {
      $("form").on("submit",function(e) {
        var val = $("[name='not_robot'"].val();
        if (isNaN(val) || !parseInt(Number(val)) == val ||  isNaN(parseInt(val, 10)) e.preventDefault();
      }
    }
    

    【讨论】:

      【解决方案2】:

      在提交表单时尝试检查。使用以下代码或链接-

      JSFiddle

      HTML 代码-

      <form action="" method="post">
        <input type="text" name="name" placeholder="name" required>
        <input type="text" name="email" placeholder="email" required>
        <input type="text" name="phone" placeholder="phone" required>
      
        <div class="check">
          <label>6 x 2 =</label>
          <input type="text" name="not_robot" required="required">
        </div>
      
        <input type="submit" value="submit">
      </form>
      

      JAVASCRIPT 代码-

      $('form').submit(function() {
            if (parseInt($('input[name="not_robot"]').val()) == 12) {
              return true;
            }
            else{
              alert('You not enterd the correct value');
              return false;
            }
          });
      

      【讨论】:

      • 这不是被问到的。 12 只是一个示例 - 在测试布尔值后返回布尔值也没有意义
      • @Shubham 谢谢,您的代码正在运行,但如果值不等于 12,我可以添加错误消息吗?
      • @SajjadAhmad 我已经更新了我的代码,您可以在else 部分打印任何警报消息。如果我的回答对您有帮助,请点赞或标记为正确。
      • @ShubhamBaranwal 很棒,但还有一件事,它只会在我输入错误的数字时提醒,但如果我不输入任何内容,它不会提醒我。
      • @SajjadAhmad 从你的input 元素中删除required="required" 然后它应该可以工作。
      【解决方案3】:

      不要试图阻止以这种方式发送垃圾邮件。我的建议是应用 csrf 保护和谷歌验证码。您可以使用 this library 进行 csrf 保护。对于谷歌验证码,请使用this

      【讨论】:

      • 这取决于目标受众。计算器足以阻止收割机,但不能阻止专门的垃圾邮件发送者
      【解决方案4】:

      如果你想通过PHP进行验证..下面是方法

      if(is_numeric($_POST['not_robot']) && !empty($_POST['not_robot'])){
          echo '<script type="text/javascript">alert("Please do the math, if you are human.");</script>';
      }else{
          //email script here
      }
      

      【讨论】:

      • 这不会停止提交
      【解决方案5】:

      方式:

      • 使用PHP exit() 函数退出当前脚本执行。我们可以在有(或没有)消息的情况下使用这个函数。

        语法: exit(message) OR exit()

      • 我们也可以使用return;

        在这里,控件将返回到调用该文件运行的脚本。

      试试这个:

      if(isset(($_POST['not_robot']) != '12') && (isset($_POST['not_robot']) !== '')){
          /* alert here */
          exit();
      }else{
          //email script here
      }
      

      【讨论】:

        【解决方案6】:

        HTML:

        <form action="" method="post" name="form1">
        <input type="text" name="name" placeholder="name" required>
        <input type="text" name="email" placeholder="email" required>
        <input type="text" name="phone" placeholder="phone" required>
        
        <div class="check">
           <label>6 x 2 =</label>
           <input type="text" name="not_robot" id="not_robot" required="required" />
        </div>
        
        <input type="button" value="submit" onClick="checkForm()">
        </form>
        

        JavaScipt:

        function checkForm()
        {
        
          if(document.getElementById('not_robot').value == "12" && document.getElementById('not_robot').value != "")
          {
            alert('ok');
            document.forms['form1'].submit();
          }else{
                alert('not ok');
              }
        
        }
        

        【讨论】:

        • 他想要 PHP 而不是 JS
        • 我已经用 JSFiddle 测试了代码,它可以工作:jsfiddle.net/2t23x0ud 如果数学答案错误,表单不会提交。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-14
        • 1970-01-01
        • 1970-01-01
        • 2014-12-13
        • 1970-01-01
        • 2016-12-08
        相关资源
        最近更新 更多