通过教程,我创建了将数据插入数据库的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;]))
这也是从表单创建数组插入的好方法,或者我应该搜索不同的教程?
答案 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
的值已分配。
这就是三元表达的工作原理。