Редактирование профиля пользователя: как избежать ввода повторяющихся значений пользователем? - PullRequest
0 голосов
/ 22 января 2019

Я новичок в 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 голосов
/ 22 января 2019

Вы действительно должны решить проблему в базе данных:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...