php - 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>
解决方案
在分配参数之前,您正在绑定参数:
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);
推荐阅读
- r - PCA 载荷结果的相同值
- mysql - 电子商务网站的数据库模式设计
- maven - 如何使用 curl 命令检查 nexus 中是否已经存在工件版本
- angular - Angular 指令:悬停时动态更改 img 背景
- javascript - 元素数据在检查定义后立即未定义
- python - 在 Windows 中的 Postgresql 上使用 heroku 创建数据库表?
- java - 各种数据类型在方法中返回而不创建对象
- javascript - 异步响应 Flatlist 中的原生渲染项
- java - springboot web应用程序中的语言翻译
- c# - 从 DateTime 中删除时间