Php 错误的电子邮件验证
这是我在stackoverflow上的第一篇帖子,我想提醒你,我的英语说得不是很好,但我可以尝试澄清我的问题: 我有一个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
$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”时在数据库中插入了相同的电子邮件地址,则会出现问题。我会解释的。我为电子邮件添加了更多详细信息,非常感谢您花时间解决我的问题:我为电子邮件添加了更多详细信息,非常感谢您花时间解决我的问题: