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

时间:2016-04-21 16:37:26

标签: php

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

我想:

  1. 使用PHP
  2. 接收所有输入字段的值
  3. 检查输入字段中的哪些值为空或无效
  4. 确保只将适当的输入值插入数据库,但不是全部
  5. 插入数据库
  6. <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>

2 个答案:

答案 0 :(得分:0)

接下来是一个如何操作的小例子,首先是在几个字段中使用相同名称捕获数据的HTML表单,其次是将数据作为数组获取的PHP:

<强>的test.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>

<强> test.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/>";
?>

答案 1 :(得分:0)

对于HTML部分,已经提到过,将数组附加到要作为集合获取的字段的名称,我假设字段为departments

<input type='text' name='departments[]' />

但对于服务器端,我的意思是PHP和MySQL: 你有两种方法可以做到:

1-您应该看看是否要将数据聚合到一个记录中,例如,您有10个Department个实例,并且您希望将所有这些实例放在一个单行/字段中。在这种方法中,您只需执行以下操作:

SQL查询:

insert into table_name (department) values(:department)";

PHP: $ departments = serialize(get_input($ _ POST ['department']));

当然,您已经验证了您的表格,这主要不是我们的主题。此外,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;
}