我目前有一个包含超过50个字段的表单,大约有20个可选字段。
是否有任何简单的方法可以在一次命中中处理$_POST
数据以删除空字符串并在插入数据库之前将其更改为NULL,或者是否必须在以下方法中逐个完成它们:
if ($_POST['field_x'] == "") {
$_POST['field_x'] = NULL;
}
答案 0 :(得分:9)
您可以使用array_filter:
$post = array_filter($_POST);
http://php.net/manual/en/function.array-filter.php
如果没有提供回调,则将删除所有输入等于FALSE的条目(请参阅转换为布尔值)。
要删除空字符串,您可以使用:
function drop_empty($var)
{
return ($var === '') ? NULL : $var;
}
$post = array_filter($_POST, 'drop_empty');
如果您不想删除值,但只想将它们设置为NULL:使用array_map
:
$post = array_map('drop_empty', $_POST);
答案 1 :(得分:4)
将所有空字符串元素设置为NULL:
foreach ($_POST as &$v) {
if ($v !== "") {
continue
}
$v = NULL;
}
unset($v); // remove the reference (alias) to the last element of $_POST
答案 2 :(得分:3)
这很简洁,但它也会删除POST值,如整数0
或其他任何在转换为(bool)时评估为false的值
$_POST = array_filter($_POST);
如果这对您不起作用,您可以使用回调函数,使用===
与""
进行比较
你还应该注意,这更像是调用unset()
而不是将数组元素设置为NULL
,这非常相似,可能对你的情况更好/甚至更好。
答案 3 :(得分:0)
(isset($_POST['x']) ? $_POST['x'] : NULL)
更简单的PDO绑定内联方法。 isset()是一个特殊的函数。您无法调用另一个函数,然后检查变量上的isset()。
示例:
$conn = new PDO($pdo_connection, $pdo_username, $pdo_password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare('SELECT * FROM `t` WHERE `x`=:x');
$stmt->bindValue(':x', (isset($_POST['x']) ? $_POST['x'] : NULL), PDO::PARAM_STR);
$stmt->execute();
答案 4 :(得分:0)
基于hakre的答案我的解决方案是:
model.fit_generator(batches,
steps_per_epoch=steps_per_epoch,
nb_epoch=1,
validation_data=test_batches,
nb_val_samples=test_batches.n)
之后我将这样的SQL命令连接起来:
foreach ($_POST as &$v) {
$v = (is_numeric($v) ? $v : ($v === "" ? "NULL" : "'" . $v . "'"));
}
unset($v);
实际上我没有其他方法可以将所有emtpy $ _POST变量的NULL真正地转换为数据库字段。
答案 5 :(得分:0)
您可以执行以下操作:
foreach ($_POST as $k => $v) {
if(empty($v) || $v === '') {
$_POST[$k] = null;
}
}
echo '<pre>';var_dump($_POST);echo '</pre>';
答案 6 :(得分:-1)
将$ _POST [&#39;数据&#39;]分配给变量,例如$ a = $ _ POST [&#39; data&#39;];在使用变量$ a之后,将其设为空,如$ a =&#34;&#34 ;;或$ a = null;