change-username.php переименовывает имя пользователя в пустое в базе данных - PullRequest
0 голосов
/ 17 февраля 2019

Моя цель - создать панель пользователя, где пользователь может обновлять свои данные, такие как имя пользователя, пароль и адрес электронной почты.

Код ниже взят из файла reset-password.php (который на самом деле работает).Я пытался изменить его, чтобы изменить имя пользователя и адрес электронной почты.Но сначала я должен заставить его работать должным образом.

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

<?php
*// Initialize the session*
session_start();
*// Check if the user is logged in, otherwise redirect to login page*
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
header("location: login.php");
exit;
}
*// Include config file*
require_once "config.php";

*// Define variables and initialize with empty values*
$new_username = "";
$new_username_err = "";

*// Processing form data when form is submitted*
if($_SERVER["REQUEST_METHOD"] == "POST"){

*// Validate new Username*
if(empty(trim($_POST["new_username"]))){
    $new_username_err = "Please enter a new username.";     
}

*// Check input errors before updating the database*
if(empty($new_username_err)){
    *// Prepare an update statement*
    $sql = "UPDATE users SET username = ? WHERE id = ?";

    if($stmt = mysqli_prepare($link, $sql)){
        *// Bind variables to the prepared statement as parameters*
        mysqli_stmt_bind_param($stmt, "si", $param_username, $param_id);

        *// Set parameters*
        $param_username = $new_username;
        $param_id = $_SESSION["id"];

        *// Attempt to execute the prepared statement*
        if(mysqli_stmt_execute($stmt)){
            *// Username updated successfully. Destroy the session, and redirect to login page*
            session_destroy();
            header("location: change-username-success.php");
            exit();
        } else{
            echo "Oops! Something went wrong. Please try again later.";
        }
    }

    *// Close statement*
    mysqli_stmt_close($stmt);
}

*// Close connection*
mysqli_close($link);
}
?>

Мои коды кодов:

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">

                <div class="form-group <?php echo (!empty($new_username_err)) ? 'has-error' : ''; ?>">
                    <input type="text" name="new_username" placeholder="New Username" class="form-control" value="<?php echo $new_username; ?>">
                    <span class="help-block"><?php echo $new_username_err; ?></span>
                </div>


                <div class="form-group">
                    <input type="submit" class="btn" value="Submit">
                    <a class="btn" href="userpage.php"><i class="fas fa-ban"></i>Cancel</a>
                </div>
 </form>

1 Ответ

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

Вы связываете параметры перед их назначением:

    mysqli_stmt_bind_param($stmt, "si", $param_username, $param_id);

    *// Set parameters*
    $param_username = $new_username;
    $param_id = $_SESSION["id"];

Помещаете блок с привязкой после назначения:

    *// Set parameters*
    $param_username = $new_username;
    $param_id = $_SESSION["id"];

    mysqli_stmt_bind_param($stmt, "si", $param_username, $param_id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...