php - 尝试仅更新从表单接收到的字段,而其他字段在 PHP 中变为空白
问题描述
我正在尝试创建一个更新 PHP 函数,它正在工作,但是我遇到了一些问题,我从表单中收到了用户名电子邮件和密码,但是如果用户将其中的一个或 2 个留空,我想更新唯一一个没有留空,例如“通过”,但是当我这样做时,其他 2 个字段在数据库中更新为空或空白,我的代码中有什么错误?
<?php
session_start();
$id = $_SESSION['user_id'];
$email = $_POST['emailAlter'];
$nome = $_POST['nameAlter'];
$pass = $_POST['passAlter'];
$con = mysqli_connect("localhost", "root", "", "smarttime");
$query = mysqli_query($con,"UPDATE users SET use_name = '$nome', use_email = '$email', use_pass = '$pass' WHERE use_id = '$id'");
$test = mysqli_query($con,"SELECT * from users");
$row = mysqli_fetch_array($test);
if (!$con) {
die('Erro de Acesso à BD' . mysqli_connect_error());
}
if(!isset($email) || trim($email) == '')
{
$email = mysqli_query($con,"SELECT use_email from users where use_id ='$id");
$query = mysqli_query($con,"UPDATE users SET use_name = '$nome', use_email = '$email', use_pass = '$pass' WHERE use_id = '$id'");
}
if(!isset($nome) || trim($nome) == '')
{
$nome = mysqli_query($con,"SELECT use_name from users where use_id ='$id");
$query = mysqli_query($con,"UPDATE users SET use_name = '$nome', use_email = '$email', use_pass = '$pass' WHERE use_id = '$id'");
}
if(!isset($pass) || trim($pass) == '')
{
$nome = mysqli_query($con,"SELECT use_pass from users where use_id ='$id");
$query = mysqli_query($con,"UPDATE users SET use_name = '$nome', use_email = '$email', use_pass = '$pass' WHERE use_id = '$id'");
}
$query;
header('Location: logged.php');
exit();
?>
解决方案
如果我假设用户 ID 始终存在并且有效,那么您可以构建这样的查询:
$setters = array();
if ($trim($email) != '') $setters[] = "use_email = '$email'";
if ($trim($nome) != '') $setters[] = "use_name = '$nome'";
if ($trim($pass) != '') $setters[] = "use_pass = '$pass'";
$query = "UPDATE users SET ".implode(", ",$setters)." WHERE use_id = '$id'";
$result = mysqli_query($con,$query);
所以查询取决于输入的存在。
推荐阅读
- wordpress - Wordpress 加速 RabbitMQ 队列
- gis - 与使用 PyQGIS 提取的值相比,UI 中的最小最大值不同
- firebase - Advance_pdf_viewer 和 firebase_storage 的颤振依赖问题
- geocoding - 向 Here.com API 结果添加新的兴趣点
- python - 如何从系列中有重复名称的 Pandas DF 创建字典
- performance - 飞镖中的空函数
- bash - 如何扫描条件匹配字符串并在匹配时循环
- javascript - 跨度文本更改后页面变白?
- sql - postgressql/typeorm - 在同一张表上使用过滤器计数并与另一个表连接
- php - 通过 PHP 登录谷歌后如何获取登录电子邮件?