编辑用户个人资料:如何避免用户输入重复值?

时间:2019-01-22 09:48:00

标签: php mysqli

我是PHP的新手。我希望显示警告消息的用户避免输入重复的值,例如用户名,电子邮件和电话号码。

例如,用户想要更改其用户名。当用户在编辑用户名后提交表单时,将显示一条警告消息,指出用户名已被使用或已经存在。

<?php 
error_reporting(E_ALL ^ E_NOTICE);
session_start();
include("../config.php");
include("../errors.php");
include("../success.php");
$errors = array(); 
$successes = array();
if ($_SESSION["uName"]){
    if ($_SESSION["uType"] != "admin") {
        header("location:../user/dashboard_user.php");  
    } else if ($_SESSION["uType"] == "admin"){      
        if(isset($_POST["update"])) {

            $fname = $_POST["fname"];
            $telno = $_POST["telno"];
            $uname = $_POST["username"];
            $email = $_POST["email"];
            $password = $_POST["password"];

            $password = md5($password);
            $sql = "UPDATE users SET fullname = '$fname', telno = '$telno', username = '$uname', email = '$email', password = '$password' WHERE id = '".$_SESSION['uId']."'";
            if (mysqli_query($con, $sql)) {
                array_push($successes, "Update Success!");
            } else {
                echo "Error: " . $sql . "<br>" . mysqli_error($con);
            }       

        } 
?>

在代码中使用SELECT语句以获得预期结果的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

您应该真正处理数据库中的问题:

create unique index idx_username on users(username);

然后在您的代码中执行您要执行的操作,然后简单地进行操作:

define('MYSQL_UNIQUE_CONSTRAINT_VIOLATION', 1062);

if (mysqli_query($con, $sql)) {
    array_push($successes, "Update Success!");
} elsif (mysql_errno() == MYSQL_UNIQUE_CONSTRAINT_VIOLATION )  {
    echo "Error: username $username is already taken";
} else {
    echo "Error: " . $sql . "<br>" . mysqli_error($con);
}       

这段代码当然是很粗糙的,但是它给了你这个主意。如果您的代码在类中,请使用const而不是define

此外,您的代码非常容易受到SQL注入的攻击。使用参数化查询而不是在sql字符串中使用变量。