Zip*_*ous 6 php mysql duplicates
我一直在制作一个登录/注册系统,我正在接近完成我的注册部分代码.我遇到的唯一问题是如何使用它,以便用户无法注册重复的用户名.我希望它能够工作,以便我的数据库不会接受这些信息,它会告诉用户有关错误的信息.任何帮助表示赞赏.
我的PHP
<?php
include ('database_connection.php');
if (isset($_POST['formsubmitted'])) {
$error = array();//Declare An Array to store any error message
if (empty($_POST['name'])) {//if no name has been supplied
$error[] = 'Please Enter a name ';//add to array "error"
} else {
$name = $_POST['name'];//else assign it a variable
}
if (empty($_POST['e-mail'])) {
$error[] = 'Please Enter your Email ';
} else {
if (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_POST['e-mail'])) {
//regular expression for email validation
$Email = $_POST['e-mail'];
} else {
$error[] = 'Your EMail Address is invalid ';
}
}
if (empty($_POST['Password'])) {
$error[] = 'Please Enter Your Password ';
} else {
$Password = $_POST['Password'];
}
if (empty($error)) //send to Database if there's no error '
Run Code Online (Sandbox Code Playgroud)
Dha*_*man 18
防止数据库中出现重复用户名的最佳方法是将数据库列设为 PRIMARY KEY 或将其标记为 UNIQUE。
-- Make it a primary key
ALTER TABLE users ADD PRIMARY KEY(username);
-- or set it to be unique
ALTER TABLE users ADD UNIQUE (username);
Run Code Online (Sandbox Code Playgroud)
这将防止表中具有相同用户名的重复记录。当您尝试插入相同的内容时,将生成错误。
然后您可以在 PHP 中捕获异常并检查原因。重复约束 SQL 错误代码是 1062。
以下是使用 PDO 时如何捕获此错误的示例:
$error = [];
$username = 'Dharman';
$pdo = new \PDO("mysql:host=localhost;dbname=test;charset=utf8mb4", 'user', 'password', [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION, // make sure the error reporting is enabled!
\PDO::ATTR_EMULATE_PREPARES => false
]);
try {
$stmt = $pdo->prepare('INSERT INTO users(username) VALUE(?)');
$stmt->execute([$username]);
} catch (\PDOException $e) {
if ($e->errorInfo[1] === 1062) {
$error[] = "This username is already taken!";
}
}
Run Code Online (Sandbox Code Playgroud)
以下是使用 mysqli 时如何捕获此错误的示例:
$error = [];
$username = 'Dharman';
// make sure the error reporting is enabled!
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'user', 'password', 'test');
$mysqli->set_charset('utf8mb4');
try {
$stmt = $mysqli->prepare('INSERT INTO users(username) VALUE(?)');
$stmt->bind_param('s', $username);
$stmt->execute();
} catch (\mysqli_sql_exception $e) {
if ($e->getCode() === 1062) {
$error[] = "This username is already taken!";
}
}
Run Code Online (Sandbox Code Playgroud)
例如,当用户发布用户名并单击"提交"时,您可以这样执行此操作,您可以编写此代码或将其添加到代码中并进行修改:
<?php
$connect = mysql_connect('whatever','whatever','whatever');
$database = mysql_select_db('your dbname');
$username = $_POST['username'];
if(isset($username)){
$mysql_get_users = mysql_query("SELECT * FROM table_name where username='$username'");
$get_rows = mysql_affected_rows($connect);
if($get_rows >=1){
echo "user exists";
die();
}
else{
echo "user do not exists";
}
}
?>
Run Code Online (Sandbox Code Playgroud)