如果已经存在,如何在用户名中添加数字

问题描述 投票:0回答:2

我正在尝试为我的课程制作学校门户系统。每个学生都有一个用户名,该用户名由姓名的首字母和姓的前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 ...

php sql mysqli prepared-statement
2个回答
0
投票

您需要从数据库中以通用模式开始获取用户名计数,然后将其递增1。然后可以用0填充用户名并将其保存在数据库中。

需要注意的几点:

  • 从不以明文形式或使用MD5 / SHA1存储密码!仅存储使用PHP的password_hash()创建的密码哈希,然后可以使用password_hash()进行验证。看一下这篇文章:password_verify()并了解有关password_verify()的更多信息。确保列为How to use password_hash
  • 请改用bcrypt & password hashing in PHP,因为名称可以包含非拉丁字母。
  • 要在MySQLi中使用VARCHAR(255),必须在PHP中连接mb_substr(),然后将该变量绑定到查询。
  • 要了解如何获取与MySQLi匹配的行数,请参阅LIKE
%

结果:

How to get count of rows in MySQL table using PHP?


-2
投票
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();
}
© www.soinside.com 2019 - 2024. All rights reserved.