PHP:isset的一个捷径而且是空的?

lau*_*kok 6 php function

我想知道下面的问题是否有更好的想法,

我有一个包含许多输入字段的表单,例如

<input name="pg_title" type="text" value="" />
<input name="pg_subtitle" type="text" value="" />
<input name="pg_description" type="text" value="" />
<input name="pg_backdate" type="text" value="" />
etc
Run Code Online (Sandbox Code Playgroud)

但有时我的表单中不需要上面的某些输入字段,例如,我只需要我的数据库注入的页面标题,

<input name="pg_title" type="text" value="" />
 etc
Run Code Online (Sandbox Code Playgroud)

我有另一个PHP页面来处理$_POST数据,

$pg_title = null;
$pg_subtitle = null;
$pg_description = null;
$pg_backdate = null;

 if(isset($_POST['pg_title']) && !empty($_POST['pg_title']) ) $pg_title = $_POST['pg_title'];
 if(isset($_POST['pg_subtitle']) && !empty($_POST['pg_subtitle']) ) $pg_subtitle = $_POST['pg_subtitle'];
 if(isset($_POST['pg_description']) && !empty($_POST['pg_description']) ) $pg_description = $_POST['pg_description'];
 if(isset($_POST['pg_backdate']) && !empty($_POST['pg_backdate']) ) $pg_backdate = $_POST['pg_backdate'];
Run Code Online (Sandbox Code Playgroud)

每次我必须检查$_POST某个输入字段是否已设置not empty,否则其变量将被设置为null,这样我就不会在我的数据库中注入空白空间.

当我有一长串要处理的变量时,我发现if isset!emptyif条件是非常重复的.

是否有任何默认的PHP函数来" 缩短 "上面的过程?或者我是否必须编写用户定义函数来处理这个问题?

或者也许有另一种方式呢?

谢谢.

编辑:

非常感谢大家的帮助.

我的php页面中只有一些额外的代码可以处理$ _POST数据,

$sql = "
    UPDATE root_pages
    SET 
        pg_url = ?, 
        pg_title = ?,
        pg_subtitle = ?,
        pg_backdate = ?,
        pg_description = ?,     
        ...
        updated_by = ?
    WHERE pg_id = ?
    ";

    $result = $connection->run_query($sql,array(
        $pg_url, 
        $pg_title,
        $pg_subtitle,
        $pg_backdate,
        $pg_description,        
        ...
        $pg_id
        ));
Run Code Online (Sandbox Code Playgroud)

如你所见,$pg_subtitle, $pg_backdate, $pg_description, etc我的查询中始终存在.因此,如果我得到$pg_subtitle = ''而不是$pg_subtitle = null没有数据,我的数据库记录将为该列提供一个空的空间.

谢谢 :-)

dec*_*eze 20

isset && !empty是多余的.在empty语言结构是基本的简写!isset($foo) || !$foo,用!empty等同于isset($foo) && $foo.因此,您可以通过省略isset支票来缩短代码.

一种更简单的方法是:

$values = array('pg_title' => null, 'pg_subtitle' => null, …);
$values = array_merge($values, $_POST);

// use $values['pg_title'] etc.
Run Code Online (Sandbox Code Playgroud)

如果您不希望您的默认null值被falsey值覆盖,例如'',您可以执行以下操作:

$values = array_merge($values, array_filter($_POST));
Run Code Online (Sandbox Code Playgroud)

请注意,这'0'也是假的.


Jac*_*cob 5

您可以使用简单的功能

function post_value_or($key, $default = NULL) {
    return isset($_POST[$key]) && !empty($_POST[$key]) ? $_POST[$key] : $default;
}
Run Code Online (Sandbox Code Playgroud)

然后使用:

$pg_title = post_value_or('pg_title');
// OR with a default
$pg_title = post_value_or('pg_title', 'No Title');
Run Code Online (Sandbox Code Playgroud)


Jon*_*ier 5

empty($var)是.的缩写!( isset($var) && $var ).

因此!empty($_POST['...'])对您的情况就足够了 - isset您目前的电话是多余的.