php подготовленные заявления: уникальное имя пользователя и ошибка электронной почты - PullRequest
0 голосов
/ 23 февраля 2019

Как я могу создавать уникальные имена пользователей и уникальные электронные письма с подготовленными заявлениями?Я знаю, что у меня неправильный код, потому что на данный момент правильное сообщение об ошибке будет отображаться, если я введу уже введенное имя пользователя, но сообщение об ошибке также будет отображаться для электронного письма, даже если оно уникально (и наоборот).

Есть идеи, как это исправить?

 else {
        $sql = "SELECT * FROM users WHERE user_name=? OR user_email=?";
        $stmt = mysqli_stmt_init($con);
        if (!mysqli_stmt_prepare($stmt, $sql)) {
            header("Location: ../index.php?sqlerror");
            exit();
        }

        else {
        mysqli_stmt_bind_param($stmt, "ss", $name, $email);
        mysqli_stmt_execute($stmt);
        mysqli_stmt_store_result($stmt);
        $resultCheck = mysqli_stmt_num_rows($stmt);
        if ($resultCheck > 0) {
        array_push($error_array, "taken.<br>");
        }

Ответы [ 3 ]

0 голосов
/ 23 февраля 2019

Попробуй вот так.Если вы хотите иметь 2 случая, вы должны спросить дважды:)

$stmt->bind_result($db_name, $db_email);
$stmt->fetch();

if($db_name == $name) {
    array_push($error_array, "name taken.<br>");
}

if($db_email == $email) {
    array_push($error_array, "email taken.<br>");
}
0 голосов
/ 24 февраля 2019

Вот пример того, что я имею в виду, если вы просто измените эти (2) столбцы базы данных ....

<?php

$_POST['user_name'] = 'admin'; // should be cleaned and validated

$_POST['user_email'] = 'test@gmail.com'; // should be cleaned and validated

/* open a connection */

$con = mysqli_connect ( 'localhost', 'login_user', 'login_pass', 'database' );

/* check the connection */

if ( mysqli_connect_errno ( ) )
{
    echo "Connect failed: " . mysqli_connect_error () . "\r\n\r\n";

    exit ( );
}

/* initialize the statement */

$stmt = mysqli_stmt_init ( $con );

/* the query / sql statement */

$sql = "INSERT INTO users (user_name, user_email) VALUES (?,?);";

/* test the sql statement */

if ( mysqli_stmt_prepare ( $stmt, $sql ) === TRUE )
{
    /* bind the param(s) to the sql statement */

    mysqli_stmt_bind_param ( $stmt, "ss", $_POST['user_name'], $_POST['user_email'] );

    /* try to execute the sql statement */

    if ( mysqli_stmt_execute ( $stmt ) === FALSE )
    {
        /* show developer error, duplicate found, this would not be here */

        echo "Error: " . mysqli_error ( $con ) . "\r\n\r\n";


        /* show the user error, duplicate found */

        echo "Error: the username and or password already exist on are system\r\n";

        exit ( );   
    }
    else
    {
        /* close the sql statement */

        mysqli_stmt_close ( $stmt );

        echo "New User Added\r\n\r\n";

        exit ( );
    }

}
else /* query, sql statement error */
{
    echo "Query Error: " . mysqli_error ( $con ) . "\r\n\r\n";
}

/* close the connection */

mysqli_close ( $con );

?>
0 голосов
/ 23 февраля 2019
ALTER TABLE users ADD UNIQUE (user_name);
ALTER TABLE users ADD UNIQUE (user_email);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...