Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.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/3/html/69.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
PHP可以';t将验证码字符串与用户键入的字符串进行比较_Php_Html_String_Captcha - Fatal编程技术网

PHP可以';t将验证码字符串与用户键入的字符串进行比较

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

我创建了一个登录系统,还创建了一个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">
问题是,比较
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'];