Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 与$\u POST[]相比,PHP随机数生成器不工作_Javascript_Php_Html - Fatal编程技术网

Javascript 与$\u POST[]相比,PHP随机数生成器不工作

Javascript 与$\u POST[]相比,PHP随机数生成器不工作,javascript,php,html,Javascript,Php,Html,这只是得到随机数。然后将int转换为字符串。该字符串在HTML中使用 $num1=mt_rand(1,9); $num2=百万兰特(1,9); $sum=$num1+$num2; $str1=(字符串)$num1; $str2=(字符串)$num2; 本节仅获取所有POST信息和变量声明 if(设置($\u POST[“提交”])){ $name=$_POST['name']; $email=$_POST['email']; 这些只是变量的定义 $message=$\u POST['mess

这只是得到随机数。然后将int转换为字符串。该字符串在HTML中使用

$num1=mt_rand(1,9);
$num2=百万兰特(1,9);
$sum=$num1+$num2;
$str1=(字符串)$num1;
$str2=(字符串)$num2;
本节仅获取所有
POST
信息和变量声明

if(设置($\u POST[“提交”])){
$name=$_POST['name'];
$email=$_POST['email'];
这些只是变量的定义

$message=$\u POST['message'];
$human=intval($_POST['human']);
$from='茎和芽接触形式';
$to$saifanchey@gmail.com';
$subject=$_POST['subject'];
$reason=$_POST['reason'];
这是代码中断的地方。它总是在正确时输出
您的反垃圾邮件是不正确的
。这就是错误发生的地方。
$num1
$num2
变量是我前面声明的两个随机值,当这些值相加并且用户输入正确时(理论上)应该可以工作



每次用户发送带有正确的
human
值的表单时,服务器都会收到
POST
请求,并为
$num1
$num2
生成新值。这就是您的条件不起作用的原因

您需要记住操作数,并将其与显示给用户的值进行比较

最简单的示例(不安全的攻击):

因此,这是您的php文件:

// init new random numbers
$num1New = mt_rand(1, 9);
$num2New = mt_rand(1, 9);
将隐藏值添加到html表单:

<input type="hidden" name="num1" value="<?php echo $num1New ?>">
<input type="hidden" name="num2" value="<?php echo $num2New ?>">
在这种情况下,您将比较显示给用户的值


另一种解决方案是将这对值存储在数据库、用户会话或其他存储中。

要完成基于数学的验证码,您需要使用会话变量存储答案,并将提交的答案和该会话变量进行比较

以下内容应该有助于解决您的问题-它基于您的原始代码片段,但没有包含所有元素或变量的完整形式,但应该给出如何继续的清晰想法

<?php
    session_start();

    $errHuman=false;

    $num1 = mt_rand(1,9);
    $num2 = mt_rand(1,9);
    $sum = $num1 + $num2;




    if( $_SERVER['REQUEST_METHOD']=='POST' && !empty( $_POST['human'] ) && !empty( $_SESSION['math-captcha'] ) ){

        $answer=filter_input( INPUT_POST, 'human', FILTER_SANITIZE_NUMBER_INT );
        $errHuman = ( intval( $answer )==$_SESSION['math-captcha']->sum ) ? 'Congratulations' : 'Sorry - that is incorrect';

    }

    $_SESSION['math-captcha']=(object)array(
        'num1'  =>  $num1,
        'num2'  =>  $num2,
        'sum'   =>  (int)$sum
    );      

?>
<!DOCTYPE html>
<html>
    <head>
        <title>Math based captcha</title>
    </head>
    <body>
        <form method='post'>
            <!-- other form elements-->
            <div class="form-group">
                <label for="human" class="col-sm-2 control-label"><?php printf( '%d + %d=?', $num1, $num2 );?></label>
                <div class="col-sm-10">
                    <input type="text" class="form-control" name="human" placeholder="Your Answer">
                    <?php

                        if( $errHuman ){
                            printf('<p class="text-danger">%s</p>', $errHuman );
                        }

                    ?>
                </div>
            </div>

            <input type='submit' />
        </form>
    </body>
</html>

基于数学的验证码

您的问题。这是一个混乱的格式错误。至于您的错误-当您按“提交”时,您的数字与上一页加载时的数字不同。如上所述,使用会话记住必须添加的值,这是因为web应用程序是无状态的。这是一个很好的概念,让您了解一下。
<?php
    session_start();

    $errHuman=false;

    $num1 = mt_rand(1,9);
    $num2 = mt_rand(1,9);
    $sum = $num1 + $num2;




    if( $_SERVER['REQUEST_METHOD']=='POST' && !empty( $_POST['human'] ) && !empty( $_SESSION['math-captcha'] ) ){

        $answer=filter_input( INPUT_POST, 'human', FILTER_SANITIZE_NUMBER_INT );
        $errHuman = ( intval( $answer )==$_SESSION['math-captcha']->sum ) ? 'Congratulations' : 'Sorry - that is incorrect';

    }

    $_SESSION['math-captcha']=(object)array(
        'num1'  =>  $num1,
        'num2'  =>  $num2,
        'sum'   =>  (int)$sum
    );      

?>
<!DOCTYPE html>
<html>
    <head>
        <title>Math based captcha</title>
    </head>
    <body>
        <form method='post'>
            <!-- other form elements-->
            <div class="form-group">
                <label for="human" class="col-sm-2 control-label"><?php printf( '%d + %d=?', $num1, $num2 );?></label>
                <div class="col-sm-10">
                    <input type="text" class="form-control" name="human" placeholder="Your Answer">
                    <?php

                        if( $errHuman ){
                            printf('<p class="text-danger">%s</p>', $errHuman );
                        }

                    ?>
                </div>
            </div>

            <input type='submit' />
        </form>
    </body>
</html>