2017-03-21 58 views
1

我试图和其他人一样在我之前检查我的网站上的帐户注册过程中是否存在电子邮件,使用PHP与MySQLi数据库进行交互。我尝试过使用尽可能多的指南,但是仍然没有运气。使用PHP检查MySQLi数据库中是否存在电子邮件

下面是我原来写在登记时插入用户的邮件到我的数据库代码:

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
     $database = new mysqli("localhost", "user", "dbpw", "dbname"); 
if($database->connect_error){ 
      die("Error connecting:" . $database->connect_error); 
     } 

$email = $database->real_escape_string(htmlspecialchars($_POST["email"])); 
$query = "SELECT email FROM Users WHERE email =$email"; 
$result = $database->query($query); 
$numOfRows = $database->num_rows($result); 
if($numOfRows > 0){ 
    echo "Email already exists in our database."; 
}else{ 
$query = "INSERT INTO Users (email) VALUES ('" . $email . "'); 
if(!$database->query($query)){echo("<p>Unable to add user for query: " . $query . " <br /> Error: " . $database->errno . " " . $database->error);}} 

此前插入电子邮件检查(中频($ numOfRows)语句),我的数据库是正确更新。

但是,添加我尝试过的电子邮件检查后,页面完全崩溃。我的数据库不会使用唯一密码更新,并且如果电子邮件是重复的,它不会显示回显消息“电子邮件已存在于我们的数据库中”。该页面将加载,但只有基本的页眉,页脚和背景CSS我链接到每一页。

+1

您在选择查询时出现错误:'$ query =“选择电子邮件来自用户WHERE电子邮件= $电子邮件”;'应该是'$查询=“选择电子邮件来自用户WHERE电子邮件='$ email'”;电子邮件的值应该用单引号括起来。它是一个字符串。您在插入 –

+0

时以正确的方式执行此操作**警告:**您已开放* mysql注入*!使用'准备好的语句'来保护你自己。 – Nytrix

+0

@Nytrix Roger,谢谢你的建议。将考虑更改此文件以使用准备好的语句,现在我已修复了我的主要问题。 – sono2

回答

1

而不是使用

$numOfRows = $database->num_rows($result); 

使用

if($result ->num_rows) 
{ 
} 
+0

谢谢。我做了你,@codvlpr和@Lelio Faieta的建议,并让事情奏效。 'if($ result-> num_rows> 0){ ... }' – sono2

1

的您需要添加在email变量单引号。像这个'$电子邮件'。检查下面的代码。

$query = "SELECT email FROM Users WHERE email = '$email'";

而且你需要编辑你的条件语句来检查其是否大于或等于0,或者你可以只使用变量作为条件块布尔值。

+0

我对这最后一部分感到困惑。如果它等于0,那么这应该表示电子邮件不存在于我的数据库中,对吗?在这种情况下,我想通过'else'语句来完成。 – sono2

+0

我并不是故意迷惑你。忽略那0个部分。那是我的错! – codvlpr

相关问题