注意:未定义的变量:第11行的C:\ wamp \ projects \ ServiceAdmin \ login \ loginauth.php中的验证码

时间:2015-01-13 18:07:42

标签: php captcha

我目前正在为项目创建一个登录脚本,但是尝试引入验证码已经证明了它的问题;其中我并不完全确定。

登录页面:

形式:

enter image description here

表格代码:

    <div class="col-lg-8">
    <script src="https://www.google.com/recaptcha/api.js"></script>
      <form class="form-signin" method="post" action="loginauth.php">
        <h2 class="form-signin-heading">Sign in to ServiceAdmin</h2><br>
        <label class="sr-only">Email address</label>
        <input name="email" type="email" class="form-control" placeholder="Email address" required autofocus>
        <label class="sr-only">Password</label>
        <input name="password" type="password" class="form-control" placeholder="Password" required><br>
    </div>
    <div class="col-lg-4">
        <div class="g-recaptcha" style="margin-top: 115px; margin-left: 20px;" data-sitekey="REDACTED"></div>

        <?php if($_SESSION['login.captcha']){
            echo '<font color="red"><p style="margin-left:27px;">Please tick this checkbox to verify your security.</p></font>';
            unset($_SESSION['login.captcha']);
          } else {
            echo '<p style="margin-left:27px;">Please tick this checkbox to verify your security.</p>';
          } ?>

        </div><br><br>
        <input class="btn btn-lg btn-primary btn-block" type="submit" value="Sign in">
      </form>

登录后端代码(loginauth.php):

<?php
error_reporting(E_ALL);
$email = $password = $captcha = NULL;
if(isset($_POST['email'])){
  $email = $_POST['email'];
}
if(isset($_POST['password'])){
  $password = $_POST['password'];
}
if(isset($_POST['g-recaptcha-response'])){
  $captcha = $_POST['g-recaptcha-response'];
}
if(!$captcha){
  echo "captcha error";
  exit;
}

$response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=REDACTED&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']);
if($response.success==false){
  "captcha error bot";
} else {
  "success";
}
?>

无论如何,尽管填写了验证码,但它不会被识别为输入,并会出现错误:

( ! ) Notice: Undefined variable: captcha in C:\wamp\projects\ServiceAdmin\login\loginauth.php on line 11

如果有人对这个问题的原因有任何想法,那么将非常感谢帮助。

2 个答案:

答案 0 :(得分:1)

如果引用尚未创建的变量,PHP会抛出通知,尽管代码仍然“有效”。

在这种情况下,$captcha永远不会被实例化,因为您的代码永远不会到达创建它的行

if(isset($_POST['g-recaptcha-response'])){ $captcha = $_POST['g-recaptcha-response']; }

常见的解决方法是在第11行使用/引用它之前使用false或null值声明$captcha

答案 1 :(得分:0)

尝试查看此链接:http://php.net/manual/en/function.isset.php

确定变量是否已设置且不为NULL。

如果使用unset()取消设置变量,则不再设置该变量。如果测试已设置为NULL的变量,则isset()将返回FALSE。另请注意,NULL字节(“\ 0”)不等同于PHP NULL常量。

如果提供了多个参数,则只有在设置了所有参数后,isset()才会返回TRUE。评估从左到右进行,并在遇到未设置的变量时立即停止。

我会写if(isset($ captcha))