首页 > 解决方案 > 尝试仅更新从表单接收到的字段,而其他字段在 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();



 ?>

标签: phphtml

解决方案


如果我假设用户 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);

所以查询取决于输入的存在。


推荐阅读