我目前正在为项目创建一个登录脚本,但是尝试引入验证码已经证明了它的问题;其中我并不完全确定。
登录页面:
形式:
表格代码:
<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
如果有人对这个问题的原因有任何想法,那么将非常感谢帮助。
答案 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))