首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP代码不会在发帖前验证Captcha

问PHP代码不会在发帖前验证Captcha
EN

Stack Overflow用户
提问于 2019-02-06 07:57:18
回答 1查看 24关注 0票数 0

我在PHP中创建一个留言簿,每个IP将只能发布一次。

除此之外,它在发送之前需要名称和消息,以及CAPTCH验证。不知怎么的,只要在输入中写了什么,我的代码就忽略了验证码验证。

我已经尝试在会话中保存captch,并验证验证码的输入,但没有帮助。

生成验证码的代码:

代码语言:javascript
复制
function generateCaptchaString($length = 5) {
$captchaString = substr(str_shuffle(str_repeat($x='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ', ceil($length/strlen($x)) )),1,$length);
   $_SESSION["captchaString"] = $captchaString;
     return $captchaString;
}

输入姓名、消息和验证码的代码:

代码语言:javascript
复制
<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函数中的代码。

代码语言:javascript
复制
if( ! isset($_POST['captcha']) || empty($_POST['captcha']) || 
$_POST['captcha'] != $_SESSION['captcha']) {
    $error .= "<p class=\"message-error\">" . $messages['math_invalid'] . " 
</p>";
 }
EN

回答 1

Stack Overflow用户

发布于 2019-02-06 08:15:44

在generateCaptchaString()函数中,将验证码字符串存储在$_SESSION["captchaString"]中。

但在验证后的代码中,您可以将其读作:$_SESSION['captcha']

也将其更改为$_SESSION["captchaString"]。

此外,您确定提交表单时要转到的网址是$_SERVER['PHP_SELF'] (这可能是包含或需要此脚本的另一个.php脚本),而不是您当前正在访问的同一网址$_SERVER['REQUEST_URI']。

此外,如果POST检查代码与包含或包含表单的文件位于同一文件中(或包含在同一文件中),是否可能再次调用generateCaptchaString() (以再次创建表单),从而覆盖存储在其中的任何以前的captchaString?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54544835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档