gpt4 book ai didi

php - 人们注册时如何防止重复的用户名?

转载 作者:可可西里 更新时间:2023-11-01 06:41:56 24 4
gpt4 key购买 nike

我一直在制作登录/注册系统,我即将完成代码的注册部分。我遇到的唯一问题是如何使用户无法使用重复的用户名注册。我希望它能正常工作,这样我的数据库就不会接受信息,并且会告知用户错误。

我的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 '
}
}

最佳答案

防止数据库中重复用户名的最好方法是为该列添加一个 UNIQUE 索引

-- Make it unique
ALTER TABLE users ADD UNIQUE (username);

这将防止表中具有相同用户名的重复记录。当您尝试插入相同的时,将生成错误。

然后您可以在 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!";
} else {
throw $e; // let the exception to be processed further
}
}

以下是使用 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!";
} else {
throw $e; // let the exception to be processed further
}
}

关于php - 人们注册时如何防止重复的用户名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17736421/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com