PHP 无法将验证码字符串与用户输入的字符串进行比较
PHP Can't compare a CAPTCHA string with the user typed in string
我创建了一个登录系统,还有一个 CAPTCHA 字符串,它将生成随机字符并创建一个 A1B2C3
形式的字符串,包括大写和小写字母。那是代码:
$cArr1 = array_merge(range("a", "z"), range("A", "Z"));
$cArr2 = range("1", "9");
$captcha = $cArr1[rand(0, 51)].$cArr2[rand(0,8)].$cArr1[rand(0, 51)].$cArr2[rand(0,8)].$cArr1[rand(0, 51)];
这是暗示验证码的表单片段:
<?php echo "<legend>Please type in the following CAPTCHA: <b>".$captcha."</b></legend>"; ?><div style="margin-top: 5px;"></div>
<input type="text" name="captcha" placeholder="A1B2C3" class="textbox" required><div style="margin-top: 10px;"></div>
<input type="submit" name="btn" value="Register" class="btn">
例如,对于生成的值:A3z5Q7
,输出将是:
Please type in the following CAPTCHA: A3z5Q7
//textbox//
//button//
这就是我获取验证码输入的方式:
$captchaA = $_POST['captcha'];
问题是,比较
if (strval($captchaA) == $captcha)
不起作用,它总是继续 else
语句,返回 Wrong captcha.
登录表单在没有验证码的情况下也能完美运行,这就是为什么我决定不提供代码的其他部分,如 $user = $_POST['user'];
等
我也决定在比较中使用strval()
,因为我看到$captchaA()
是一个混合变量,而$captcha
被认为是一个字符串。至少,VSCode 是这么告诉我的。
有什么建议吗?如果您需要更多详细信息,请使用评论部分,我会尽快提供给您。谢谢!
PHP 不会跨请求保留变量 - 问题是在生成表单后,原始验证码丢失了。处理 POST
时会生成一个新的验证码,这就是为什么它永远不会匹配用户提交的内容。
解决方案是保留原始验证码(例如在会话中),以便稍后检索它进行比较。
我创建了一个登录系统,还有一个 CAPTCHA 字符串,它将生成随机字符并创建一个 A1B2C3
形式的字符串,包括大写和小写字母。那是代码:
$cArr1 = array_merge(range("a", "z"), range("A", "Z"));
$cArr2 = range("1", "9");
$captcha = $cArr1[rand(0, 51)].$cArr2[rand(0,8)].$cArr1[rand(0, 51)].$cArr2[rand(0,8)].$cArr1[rand(0, 51)];
这是暗示验证码的表单片段:
<?php echo "<legend>Please type in the following CAPTCHA: <b>".$captcha."</b></legend>"; ?><div style="margin-top: 5px;"></div>
<input type="text" name="captcha" placeholder="A1B2C3" class="textbox" required><div style="margin-top: 10px;"></div>
<input type="submit" name="btn" value="Register" class="btn">
例如,对于生成的值:A3z5Q7
,输出将是:
Please type in the following CAPTCHA: A3z5Q7
//textbox//
//button//
这就是我获取验证码输入的方式:
$captchaA = $_POST['captcha'];
问题是,比较
if (strval($captchaA) == $captcha)
不起作用,它总是继续 else
语句,返回 Wrong captcha.
登录表单在没有验证码的情况下也能完美运行,这就是为什么我决定不提供代码的其他部分,如 $user = $_POST['user'];
等
我也决定在比较中使用strval()
,因为我看到$captchaA()
是一个混合变量,而$captcha
被认为是一个字符串。至少,VSCode 是这么告诉我的。
有什么建议吗?如果您需要更多详细信息,请使用评论部分,我会尽快提供给您。谢谢!
PHP 不会跨请求保留变量 - 问题是在生成表单后,原始验证码丢失了。处理 POST
时会生成一个新的验证码,这就是为什么它永远不会匹配用户提交的内容。
解决方案是保留原始验证码(例如在会话中),以便稍后检索它进行比较。