我有四个名为['institution','Department','Country','City']
的输入字段。每个输入字段重复 10 次。
我想:
- 使用 PHP 接收所有输入字段的值
- 检查输入字段中的哪些值为空或无效
- 确保仅将正确的输入值插入到数据库中,而不是全部
- 插入到数据库中
<input type='text' value='' name='institution[]' class='form-control'>
<input type='text' value='' name='department[]' class='form-control'>
<input type='text' value='' name='city[]' class='form-control'>
<select class='form-control' name='country[]' id='setwidth'>
<option value='Dubai'></option>
<option value='Dubai'></option>
<option value='Dubai'></option>
</select>
接下来是一个如何做到这一点的小例子,首先是捕获具有相同名称的多个字段中数据的 HTML 表单,其次是将数据作为数组获取的 PHP:
测试.html
<html>
<head>
</head>
<body>
<form method="post" action="test.php">
<input type='text' value='aaa' name='institution[]'/>
<br/>
<input type='text' name='institution[]'/>
<br/>
<input type='text' value='555' name='institution[]'/>
<br/>
<input type='submit' value='Submit'/>
</form>
</body>
</html>
测试.php
<?php
$my_array = $_POST[ "institution" ];
for ( $i = 0; $i < count( $my_array ); $i++ )
if ( $my_array[ $i ] == "" )
echo "Index $i is unset.<br/>";
else echo "Index $i = " . $my_array[ $i ] . "<br/>";
?>
对于 HTML 部分,已经提到过,将一个数组附加到要作为集合获取的字段名称中,我假设该字段departments
:
<input type='text' name='departments[]' />
但是对于服务器端,我的意思是PHP和MySQL:在你自己面前,你有两种方式:
1-您应该查看是否要将数据聚合到一条记录中,例如,您有 10 个 Department
实例,并且您希望将它们全部放在一行/字段中。在这种方法中,您只需:
SQL查询:
insert into table_name (department) values(:department)";
.PHP:$departments = 序列化(get_input($_POST['部门']));
当然,您已经验证了您的表格,这不是我们的主要主题。此外,get_input()
是一个函数,您应该编写该函数来过滤$_REQUEST
条目。在这篇文章的末尾有一个函数的示例。
2-每个多值字段都有一个单独的表。例如,您有一个名为 user_to_departments
的表,其中包含以下键:
id | user_id | department
然后在查询中,您必须为查询的每个条目插入一条记录,如下所示:
$departments = get_input($_POST['departments']);
foreach($departments as $dep)
{
db_query("insert into user_to_departments ($user_id, $dep)");
}
上面的行将值直接放入查询中,这不是一个好的做法,您应该始终使用在MySQLi和PDO中得到极大支持的预准备语句。
更多关于准备好的声明:http://php.net/manual/en/mysqli.quickstart.prepared-statements.php
此外,要从方案更标准的数据库中选择查询,应依赖 JOIN 语句。有关 MySQL JOIN 语句的更多信息:http://www.tutorialspoint.com/mysql/mysql-using-joins.htm
这是一个非常简单的get_input()
示例函数:
function get_input($value)
{
if(is_array($value))
{
foreach($value as $key => $val)
{
$value[$key] = htmlentities(strip_tags($val)); // it allows only html entities and tag-free values
}
}
else
{
$value = htmlentities(strip_tags($value));
}
return $value;
}