【问题标题】:How to validate users input before action如何在操作前验证用户输入
【发布时间】:2016-01-19 03:33:13
【问题描述】:

我真的是互联网语言的新手,我试图弄清楚如何在方法调用之前验证用户输入,但我还不能让它工作。

<html>
    <head>
    </head>
    <body>

        <?php
        $grade = "";
        if ($_SERVER["REQUEST_METHOD"] == "POST") 
        {
            $returned = test_input($_POST["grade"]);
            if(!$returned) ?
        }

        function test_input($data) 
        {
            if ( !is_numeric($data) || $data>100 || $data<0 )  
            {
                $data = "";
                echo 'The input should be a number between 0 and 100 ';
                echo "<br>";
                echo 'Try again';
                return false;
            }       
            return true;
        }
        ?>

        <form action = "file_1_2.php" method = "post">
        Grade: <input type="text" name="grade">
        </form>

    </body>
</html>

【问题讨论】:

  • 你应该把这个$data&gt;0改成这个$data&lt;0(小于零)。还有这个&lt;form action = "file_1_2.php" method = &lt;"post"&gt; 到这个&lt;form action = "file_1_2.php" method = "post"&gt;(删除错误的&lt; 字符)。
  • 您要进行哪种类型的验证?
  • 您可以使用 jquery 进行验证。这很容易
  • 无论如何,您都不应该依赖客户端验证。用户可以将其关闭,则您没有验证。您最好坚持使用服务器端验证,然后在时间允许的情况下添加客户端。
  • 另外,让你的函数只返回一个bool 值,不要让它回显任何东西。这样您就可以稍后重用该函数,而不会返回您无法更改的错误值。

标签: php html forms post


【解决方案1】:

除了我和其他 cmets,您的函数还有不正确的 if 子句,特别是您的大于、小于。我建议不要从中回显任何字符串,否则您的功能使用受限。

function input_valid($data = false)
    {
        if(empty($data))
            return false;
        elseif($data && !is_numeric($data))
            return false;
        else
            return (($data <= 100) && ($data > 0));
    }

if(isset($_POST["grade"])) {
    if(input_valid($_POST["grade"])) {
        // Do stuff.
    }
    else {
        echo 'Invalid input. Must be a number between 1 and 100.';
    }
}

注意:我觉得重申我上面的评论很重要,你不应该仅仅依赖客户端验证。用户可以将其关闭,则您没有验证。客户端验证应仅被视为“用户体验”功能,而不是“安全”功能。

【讨论】:

    【解决方案2】:

    你可以试试jquery

        <form action = "file_1_2.php" method = "post">
        Grade: <input type="text" name="grade" class="grade" onkeyup="">
        </form>
        <script type='text/javascript' src="https://code.jquery.com/jquery-2.2.0.min.js"></script>
    
        <script>
            $(function(){
                 $('input.grade').bind("keyup change", function(){
    
                    validateGrade( $(this).val() );
    
                 });
            });
    
            function validateGrade(g){
                if(g>100 || g<0){
                    alert('The input should be a number between 0 and 100');
                }
            }
        </script>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-10
      • 1970-01-01
      • 2020-03-12
      • 2016-10-21
      • 1970-01-01
      • 2020-07-22
      • 1970-01-01
      • 2015-11-17
      相关资源
      最近更新 更多