PHP可以';t将验证码字符串与用户键入的字符串进行比较
我创建了一个登录系统,还创建了一个CAPTCHA字符串,该字符串将生成随机字符,并将创建一个PHP可以';t将验证码字符串与用户键入的字符串进行比较,php,html,string,captcha,Php,Html,String,Captcha,我创建了一个登录系统,还创建了一个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)].$cArr
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">
问题是,比较
if(strval($captchaA)=$captcha)
不起作用,它总是在else
语句中运行,返回错误的验证码。
登录表单在没有验证码的情况下工作得非常好,这就是为什么我决定不提供代码的其他部分,比如$user=$\u POST['user']代码>,等等
我还决定在比较中使用strval()
,因为我看到$captchaA()
是一个混合变量,而$captcha
被认为是一个字符串。至少,这是VSCode告诉我的
有什么建议吗?如果您需要更多详细信息,请使用评论部分,我会尽快提供给您。谢谢大家! PHP不会在请求之间持久化变量-问题是表单生成后,原始验证码会丢失。当处理POST
时,会生成一个新的验证码,这就是为什么它永远不会匹配用户提交的内容
解决方案是保留原始验证码(例如在会话中),以便稍后检索以进行比较。如何存储生成的验证码值,以便与用户输入的验证码进行比较?@Alastair“存储”是什么意思?它存储在$captcha
中。您生成一个captcha并将其发送给用户,当用户发回captcha时,您会将其与什么进行比较?你是如何获得原始验证码进行比较的?@Alastair哦,伙计,是的,确实如此,different@Alastair我做到了!将生成的验证码存储在$\u会话['CAPTCHA']
变量中。非常感谢你!你真的保存了我的代码:))我正要删除所有的验证部分
$captchaA = $_POST['captcha'];