Php 有没有一种简单的方法可以跳过将字段更新为数据库中的空值?

Php 有没有一种简单的方法可以跳过将字段更新为数据库中的空值?,php,Php,当用户使用可选输入填写表单时,此操作开始。这些值由AJAX传递到另一个PHP页面,以插入到数据库中。如果特定输入为空,我不想更新存储在数据库中的数据。除了编写大量的if语句外,还有什么方法可以检查输入值是否为空?如果它是空的,我如何编写语句使MySQL不会更新数据库中相应的字段 if(isset($_POST['f_name']) && isset($_POST['m_name']) && isset($_POST['l_name']) && is

当用户使用可选输入填写表单时,此操作开始。这些值由AJAX传递到另一个PHP页面,以插入到数据库中。如果特定输入为空,我不想更新存储在数据库中的数据。除了编写大量的
if
语句外,还有什么方法可以检查输入值是否为空?如果它是空的,我如何编写语句使MySQL不会更新数据库中相应的字段

if(isset($_POST['f_name']) && isset($_POST['m_name']) && isset($_POST['l_name']) && isset($_POST['alt_name'])){
    $fname = $_POST['f_name'];
    $mname = $_POST['m_name'];
    $lname = $_POST['l_name'];
    $altname = $_POST['alt_name'];

如果某些$\u POST条目为空,则不应将其放入数据库。我这样说是因为如果数据库中已经存在一个值,我不想用空值覆盖该值。

好吧……您可以使用foreach检查所有值

$empty = FALSE;
   foreach ($_POST as $key) {
    if (!isset($key)) {
      $empty = TRUE;
       break;
   }
}

if (!$empty) {
$fname = $_POST['f_name'];
    $mname = $_POST['m_name'];
    $lname = $_POST['l_name'];
    $altname = $_POST['alt_name'];
}

我通常使用缩写if stations(也称为三元运算符)来做这样的事情。您可能可以编写类似以下内容的SQL查询:

$query = "UPDATE my_table SET f_name = ".(!empty($fname) ? "'$fname'" : 'f_name').", m_name = ".(!empty($mname) ? "'$mname'" : 'm_name').", ";
//etc.. etc.. 

在这种情况下,您也不允许人们只输入
空格
/
&bnsp

<?php
$empty = FALSE;

foreach ($_POST as $key)
{
    if (!isset($key) || strlen(trim($key)) != 0)
    {
      $empty = TRUE;
    }
}

if (!$empty)
{
    $fname = $_POST['f_name'];
    $mname = $_POST['m_name'];
    $lname = $_POST['l_name'];
    $altname = $_POST['alt_name'];
}
?>


您有一个SQL注入漏洞。更不用说使用
f\u name=f\u name
的查询(或其他任何查询)非常糟糕。不应将值直接插入语句中。相反,用位置参数构建语句并使用一个准备好的语句。@SLaks显然我会在上面的行之前处理它。我发布的解决方案只是一个演示逻辑的小片段示例。@adlawson在这种情况下,这很好,我用它来简单地设置一个字段的值,当用户提供的值为空时,该字段的值等于它本身。在这种情况下,您还允许人们只使用一个
空格
/
。第三行缺少一个
。是的,谢谢你指出这一点。如果($key='')可能会解决这个问题。除非我遗漏了什么again@Mr.Pallazzo:在空格的情况下,值不是空的,并且在问题的上下文中,不应该被过滤。@adlawson这是一个常见的错误,我到处都能看到。我怀疑有人的名字、中间名或姓氏都是
。@Darvex
如果(!isset(trim($key))
有点无用的话。如果您使用
trim()
您需要像这样使用它:
strlen(trim($key))!=0
。首先删除空格,如果剩余字符串的长度等于
0
,则返回false。如果(!empty)用于所有变量,是否可能重复?我希望能够插入所有没有空格的变量。我会把查询更新也放在if(!empty)中吗?这样我就可以把
更新用户集fname='$fname',mname='$mname',lname='$lname',altname='$altname'
;而这些设置参数中的每一个只有在没有空输入的情况下才能工作?是的。。但别忘了先验证输入@恩里科帕拉佐:嘿,我也有同样的问题,我正在使用CodeIgniter。将帮助我如何在CodeIgniter模型中使用此代码,我正在使用存储过程来存储/更新数据。