确保用户名和电子邮件地址是唯一的

时间:2017-03-10 19:24:47

标签: php sql

我正在尝试验证我的数据库中是否存在用户名和电子邮件地址,并尝试执行if,elseif,else语句无效。

我想首先检查用户名是否正常 - 显然如果没有,会出现一个echo语句。如果用户名不存在,请运行elseif语句以查看电子邮件地址是否唯一 - 如果不是,则再次显示另一个echo语句。对于最终语句,如果所有其他条件都返回false,我想运行以下代码,以便将用户的输入提交给数据库。

我最初尝试使用语句声明两个变量,以检查username = $ username和email_address = $ email_address,然后检查mysqli_query返回的行数是否大于1。我输入了一个带有相同但是用于电子邮件地址的elseif语句,但后来我在{}括号中使用了以下代码的else语句。

我删除了原始代码,因为抛出了太多错误,并且当我以更优雅的方式执行我所存在的操作时,它可能过于复杂和混乱。

任何帮助都将不胜感激。

if(isset($_POST['submit']))
    {
$sql = "INSERT INTO users (first_name, last_name, username, email_address, password,    gender, city, country, verification_code, verified, sign_up_date) VALUES (
'$first_name',
'$last_name',
'$username',
'$email_address',
'$password',
'$gender',
'$city',
'$country',
'$verification_code',
'1',
'$sign_up_date')";
    $result = mysqli_query($conn,$sql);
    header("Location:confirmation.php");
}   

3 个答案:

答案 0 :(得分:0)

您想要的是对数据进行完整性检查。您应该检查数据库中的 。最简单的方法是使用唯一约束/索引:

create unique index unq_users_username on users(username);
create unique index unq_users_email on users(email);

如果您尝试插入或更新行以使其违反这些约束,那么您的数据修改步骤将失败并显示错误。

答案 1 :(得分:0)

您需要为它们创建索引。 使用以下命令创建索引:

CREATE UNIQUE INDEX index_name ON table_name (column_name)

查看此链接以获取更多信息:https://www.w3schools.com/sql/sql_create_index.asp

答案 2 :(得分:0)

您可以先编写一个函数来检查数据库,例如:

$errors = []; // you can add errors to this array.
if (isset($_POST['submit']))
{
    // first do your validation here against empty values and invalid email

    $sql = "SELECT * from users where email='$email' and username='$username'";
    $result = mysqli_query($conn, $sql);

    if (mysqli_num_rows($result) > 0) {
       $errors[] = "Username and email has been taken.";
    }

    if (!empty($errors))
    {
       // loop through your errors and echo them
    } else {
      // insert your values into the database 
    }
}