Php 错误的电子邮件验证

Php 错误的电子邮件验证,php,pdo,Php,Pdo,这是我在stackoverflow上的第一篇帖子,我想提醒你,我的英语说得不是很好,但我可以尝试澄清我的问题: 我有一个PHP注册表,我有两条声明: 第一句话:例如,如果没有另一封伪邮件/电子邮件,则搜索我的表用户 $request = $db->prepare("SELECT * FROM users WHERE USE_USERNAME = :username AND USE_EMAIL = :email AND USE_PASSWORD = :password"); $request

这是我在stackoverflow上的第一篇帖子,我想提醒你,我的英语说得不是很好,但我可以尝试澄清我的问题:

我有一个PHP注册表,我有两条声明:

第一句话:例如,如果没有另一封伪邮件/电子邮件,则搜索我的表用户

$request = $db->prepare("SELECT * FROM users WHERE USE_USERNAME = :username AND USE_EMAIL = :email AND USE_PASSWORD = :password");
$request->bindParam(':username', $username, PDO::PARAM_STR);
$request->bindParam(':email', $email, PDO::PARAM_STR);
$request->bindParam(':password', $password, PDO::PARAM_STR);
$request->execute();
var_dump($request);
while ($row = $request->fetchAll(PDO::FETCH_ASSOC)){
    if ($username == $row['USE_USERNAME']){ ...
第二条语句:如果用户输入了良好的数据,我可以将输入插入数据库

$request = $db->prepare("INSERT INTO users (USE_USERNAME, USE_EMAIL, USE_PASSWORD) VALUES (:username, :email, :password)");
            $request->bindParam(':username', $username, PDO::PARAM_STR);
            $request->bindParam(':email', $email, PDO::PARAM_STR);
            $request->bindParam(':password', $pass_hache, PDO::PARAM_STR);
            $request->execute();
我的问题是:

当我在输入中插入“或1=1”时,我可以在数据库中插入相同的电子邮件地址

$request = $db->prepare("INSERT INTO users (USE_USERNAME, USE_EMAIL, USE_PASSWORD) VALUES (:username, :email, :password)");
            $request->bindParam(':username', $username, PDO::PARAM_STR);
            $request->bindParam(':email', $email, PDO::PARAM_STR);
            $request->bindParam(':password', $pass_hache, PDO::PARAM_STR);
            $request->execute();
我在这个网站上搜索了一个解决方案,并将这些行添加到我的数据库连接中:

    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
但是我的数据插入,甚至我在我的PHP代码中插入错误消息,在我的while循环中使用Javascript弹出窗口

我是初学者,我正在寻找类似的问题,但如果您有答案,谢谢您的帮助:

祝你有愉快的一天:

编辑:我将在管理PHP中的错误时向您解释:

while ($row = $request->fetchAll(PDO::FETCH_ASSOC)){
    if ($username == $row['USE_USERNAME']){
        ?>
        <script type="text/javascript">
            alert("Erreur#5 : Pseudonyme Faux !");  //Cas dans lequel les identifiants sont incorrects.
            document.location.href="subscribe.php";
        </script>
        <?php
        $error++;
这很平常,但是我有一个变量$error,它从0开始,我增加它以停止PHP脚本


唯一用户名和电子邮件存在错误。在我使用prepare语句之前,我的错误是有效的,但现在我想阻止我的表单进行SQL注入。

这是一个有很多怪癖的问题:

第一,你应该用以下方法验证你的输入 过滤变量'bob@example.com,筛选(验证)电子邮件

第二,你应该在数据库中设置一个关于你的电子邮件的唯一性约束,比如 ALTER TABLE user添加唯一索引电子邮件

第三,如果用户名和密码相同,您的查询只会返回电子邮件。您应该只查询电子邮件。差不多 $request=$db->prepareSELECT*从使用电子邮件的用户处选择=:EMAIL; 因为这将确保如果1存在,它将被返回


第四,我强烈建议您不要在数据库中保留密码,只保留散列值。您可以使用加密强LIB作为php LIB,并且内置了该功能

我不太清楚您的意思,我可以在数据库中插入相同的电子邮件地址。。创建电子邮件字段时是否将其标记为唯一?如果在输入中插入“或1=1”时在数据库中插入了相同的电子邮件地址,则会出现问题。我会解释的。我为电子邮件添加了更多详细信息,非常感谢您花时间解决我的问题:我为电子邮件添加了更多详细信息,非常感谢您花时间解决我的问题: