如果我们有许多同名的输入,我们如何接收值并插入到数据库中


If we have many inputs with same name how we can receive the value and insert into the database

我有四个名为['institution','Department','Country','City']的输入字段。每个输入字段重复 10 次。

我想:

  1. 使用 PHP 接收所有输入字段的值
  2. 检查输入字段中的哪些值为空或无效
  3. 确保仅将正确的输入值插入到数据库中,而不是全部
  4. 插入到数据库中

<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;
}