我想知道下面的问题是否有更好的想法,
我有一个包含许多输入字段的表单,例如
<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'也是假的.
您可以使用简单的功能
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)
empty($var)是.的缩写!( isset($var) && $var ).
因此!empty($_POST['...'])对您的情况就足够了 - isset您目前的电话是多余的.