检查用户名是否已经存在sql数据库 - 会喜欢实际的代码来帮助:)

时间:2017-09-05 19:01:33

标签: php sql

在你说大约2个小时的研究之后已经回答了这个问题之前我只发现了答案:不是最新的,太复杂或根本没有工作。 重复推荐非常多的帮助

这是我的登录php脚本:

<?php
include 'pdo_connect.php';

if(!empty($_POST)) {
    //$fname = $_POST['fname'];
    //$lname = $_POST['lname'];
    $uname = $_POST['uname'];
    $upassword = password_hash($_POST['upassword'], PASSWORD_DEFAULT);


    $query = 'INSERT INTO `users` ( `uname`, `password`) VALUES (?,?)'; //if duplicate exists returns a duplicate error.

    $params = array($uname, $upassword);
    $results = dataQuery($query, $params);

    // for testing only
    echo 1 == $results ? 'Thanks for registering, ' . $uname : 'There has been a problem processing your request, please try again later.';
}

?>

所以我想要做的就是当用户试图为他们创建一个帐户时,只需告诉&#34;用户名已经存在,再试一次&#34;

我虽然有两种可能的方法可以做到这一点:

侦听sql错误并显示该消息,而不是sql错误。

或在尝试添加数据库之前首先搜索数据库以获取重复数据,然后在存在重复项或是否继续执行代码时通知用户。

谢谢:)

更新

我自己解决了这个问题:)

新代码:

&#13;
&#13;
<?php
include 'pdo_connect.php';

if(!empty($_POST)) {
    //$fname = $_POST['fname'];
    //$lname = $_POST['lname'];
    $uname = $_POST['uname'];
    $upassword = password_hash($_POST['upassword'], PASSWORD_DEFAULT);
	
	
    $query = 'INSERT INTO `users` ( `uname`, `password`) VALUES (?,?)'; //if duplicate exists returns a duplicate error.
	
    $params = array($uname, $upassword);
    $results = "";//dataQuery($query, $params); // this was returning the error so i shut it up, easy fix :)

    // for testing only
    echo 1 == $results ? 'Thanks for registering, ' . $uname : "Either my server is on fire or that username has already been taken. (I hope its the second one)";
}

?>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

为用户名字段创建并编制索引,并使用用户名查询表以检查用户名是否存在并返回消息。这在审计和记录方面将是更好的方式。此外,它将更快,更容易调试/维护

答案 1 :(得分:0)

mysqli_query($con,'INSERT INTO `users` ( `uname`, `password`) VALUES (?,?)') or die(header("HTTP/1.1 409 Conflict"));

您需要在uname中将unique key设置为table。如果它存在,它将返回409 conflict header。可用于显示错误,因为用户名已准备就绪。 $conconnection string

希望这会帮助你