我正在尝试为我的课程制作学校门户系统。每个学生都有一个用户名,该用户名由姓名的首字母和姓的前4个字母组成。要自动创建此用户名,我在管理员添加学生的页面中使用该用户名。
if (isset($_POST["btnAddUser"])) {
//preparing statement to protect against sql injections
$stmt = $conn->prepare("INSERT INTO tbluser (Username, Password, Role) VALUES (?,?,?)");
$stmt->bind_param("sss", $usernamenew3, $password, $a);
$password = $_POST["s_password"];
$password = md5($password);
$name = $_POST["s_name"];
$surname = $_POST["s_surname"];
$dob = $_POST["s_dob"];
$a = "Admin";
$usernamenew = substr($name, 0, 1);
$usernamenew1 = substr($surname, 0, 4);
$usernamenew3 = $usernamenew.$usernamenew1;
但是,例如,如果输入了两个姓氏相同且名字首字母相同的学生,则会出现错误,因此我需要在第一次使用用户名时添加01,第二次使用02时间等等。例。名称=测试,姓=学生对于此示例,我希望第一个带有这些字母的用户名是TStud01,第二个是TStud02 ...
您需要从数据库中以通用模式开始获取用户名计数,然后将其递增1。然后可以用0
填充用户名并将其保存在数据库中。
需要注意的几点:
password_hash()
创建的密码哈希,然后可以使用password_hash()
进行验证。看一下这篇文章:password_verify()
并了解有关password_verify()
的更多信息。确保列为How to use password_hash。VARCHAR(255)
,必须在PHP中连接mb_substr()
,然后将该变量绑定到查询。 LIKE
%
结果:
if (isset($_POST["btnAddUser"])) {
$password = password_hash($_POST["s_password"], PASSWORD_DEFAULT);
$name = $_POST["s_name"];
$surname = $_POST["s_surname"];
$dob = $_POST["s_dob"];
$a = "Admin";
$fistLetter = mb_substr($name, 0, 1);
$shortSurname = mb_substr($surname, 0, 4);
$usernamenew = $fistLetter.$shortSurname;
$searchString = $usernamenew.'%';
$stmt = $conn->prepare('SELECT COUNT(Username) FROM tbluser WHERE Username LIKE ?');
$stmt->bind_param('s', $searchString);
$stmt->execute();
$countUsername = $stmt->get_result()->fetch_row()[0];
$usernamenew .= str_pad($countUsername+1, 2, '0', STR_PAD_LEFT);
//preparing statement to protect against sql injections
$stmt = $conn->prepare("INSERT INTO tbluser (Username, Password, Role) VALUES (?,?,?)");
$stmt->bind_param("sss", $usernamenew, $password, $a);
$stmt->execute();
}