Php pdo从表单插入数组

时间:2016-12-06 16:38:36

标签: php mysql arrays forms pdo

通过教程,我创建了将数据插入数据库的html表单。它工作得很好,但是在教程中没有解释为什么他们将这样的代码用于数组列表。

$db = new PDO("mysql:host=localhost;dbname=test", "test_user", "test123");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

if(isset($_POST['btn-add']))
{
    $fields= (is_array($_POST['fields'])) ? $_POST['fields'] : array();
    $insertStmt = $db->prepare("INSERT INTO test (test_field) VALUES (:field)");

    foreach ($fields as $field) {
        $insertStmt->execute(array('field' => $field));
    }
}

<form action="" method="POST">
    <label>field 1 <input type="text" name="fields[0]"></label>         
    <label>field 2 <input type="text" name="fields[1]"></label>
    <button type="submit" name="btn-add">add</button>
</form>

我的问题是关于这一行。也许有人可以解释一下。

$products = (is_array($_POST['fields'])) ? $_POST['fields'] : array();

这条线做什么 - ? $ _POST [&#39; fields&#39;]:array();

为什么它不适用于 $ products =(is_array($ _ POST [&#39; fields&#39;]))

这也是从表单创建数组插入的好方法,或者我应该搜索不同的教程?

2 个答案:

答案 0 :(得分:0)

您提到的行将变量$products设置为数组,无论是否通过表单提供数据。

$products = (is_array($_POST['fields'])) ? $_POST['fields'] : array(); 

说“如果$_POST['fields']是一个数组,那么将$products设置为此给定数组,否则将$products设置为空数组”。

有关三元运算符的更多信息,请查看此处:http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary

这确保了以下代码

foreach ($fields as $field) {
    $insertStmt->execute(array('field' => $field));
}

不会引发警告

WARNING Invalid argument supplied for foreach() on line number ...

希望这会有所帮助:)

答案 1 :(得分:0)

$fields = (is_array($_POST['fields'])) ? $_POST['fields'] : array();

<强>解释

如果$_POST['fields']是数组,则条件的计算结果为true。如果条件为真,则$_POST['fields']之前的表达式:将分配给变量$fields,否则将分配array()之后的表达式:

语法如下:

$var = condition ? expr1 : expr2;

为了让你更清楚,这里是:

$a = 10;
$b = 20;    
$c = $b > $a ? $b : $a;

在此,我们检查$b是否大于$a时的条件,如果为真,$b的值分配给$c,如果为假,$a的值已分配。

这就是三元表达的工作原理。