我在PHP中创建一个留言簿,每个IP将只能发布一次。
除此之外,它在发送之前需要名称和消息,以及CAPTCH验证。不知怎么的,只要在输入中写了什么,我的代码就忽略了验证码验证。
我已经尝试在会话中保存captch,并验证验证码的输入,但没有帮助。
生成验证码的代码:
function generateCaptchaString($length = 5) {
$captchaString = substr(str_shuffle(str_repeat($x='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ', ceil($length/strlen($x)) )),1,$length);
$_SESSION["captchaString"] = $captchaString;
return $captchaString;
}输入姓名、消息和验证码的代码:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"
id="guestform">
<fieldset>
<legend>Skriv i gästboken</legend>
<label>Från: </label>
<input type="text" placeholder="Skriv ditt namn"
name="name">
<br>
<label for="text">Inlägg</label>
<textarea id="text" name="message"
rows="10" cols="50"
placeholder="Skriva meddelande här"></textarea>
<br>
<label>Captcha: <span class="red" id="captchastring"><?php
echo generateCaptchaString(); ?></span></label>
<input type="text" placeholder="Skriva captcha här"
name="captcha" id="captchainput" required>
<button type="submit" id="submit">Skicka</button>
</fieldset>
</form>将检查验证的POST函数中的代码。
if( ! isset($_POST['captcha']) || empty($_POST['captcha']) ||
$_POST['captcha'] != $_SESSION['captcha']) {
$error .= "<p class=\"message-error\">" . $messages['math_invalid'] . "
</p>";
}发布于 2019-02-06 08:15:44
在generateCaptchaString()函数中,将验证码字符串存储在$_SESSION["captchaString"]中。
但在验证后的代码中,您可以将其读作:$_SESSION['captcha']
也将其更改为$_SESSION["captchaString"]。
此外,您确定提交表单时要转到的网址是$_SERVER['PHP_SELF'] (这可能是包含或需要此脚本的另一个.php脚本),而不是您当前正在访问的同一网址$_SERVER['REQUEST_URI']。
此外,如果POST检查代码与包含或包含表单的文件位于同一文件中(或包含在同一文件中),是否可能再次调用generateCaptchaString() (以再次创建表单),从而覆盖存储在其中的任何以前的captchaString?
https://stackoverflow.com/questions/54544835
复制相似问题