在你说大约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错误。
或在尝试添加数据库之前首先搜索数据库以获取重复数据,然后在存在重复项或是否继续执行代码时通知用户。
谢谢:)
更新
我自己解决了这个问题:)
新代码:
<?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;
答案 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
。可用于显示错误,因为用户名已准备就绪。 $con
为connection string
。
希望这会帮助你