首页 > 解决方案 > change-username.php 将数据库中的用户名重命名为空白

问题描述

我的目标是创建一个用户仪表板,用户可以在其中更新他/她的详细信息,例如用户名、密码和电子邮件。

下面的代码来自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>

标签: phpphpmyadmin

解决方案


在分配参数之前,您正在绑定参数:

    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);

推荐阅读