如何使用php将多个数据插入数据库

时间:2016-01-30 16:52:40

标签: php mysql insert

更新

如何将多个数据插入数据库? 我有3个字段的产品表格。 status int 1,id_product varchar 10和name_product varchar 30。 这是我的代码:

<table border='1' cellpadding='2' cellspacing='5'>
<tr>
  <th>STATUS</th>
  <th>PRODUCT ID</th>
  <th>PRODUCT NAME</th>
  <th>CHOOSE</th>
</tr>

<?php
  include "connect.php";
  $sql = "SELECT * FROM PRODUCT WHERE IDCUSTOMER = $_SESSION[IDCUSTOMER]";
  $query = mysql_query($sql);
  while($result = mysql_fetch_array($query)){
  echo"<td><select name='status'><option value='0'>BUY</option>
  <option value='1'>SELL</option>
  <option value='2'>LOAN</option>
  </select></td>
  <td>$result[id_product]</td>
  <td>$result[name_product]</td>
  <td><input type='checkbox' name='check' /></td>";
  }
?>
</table>

我想要插入数据库的数据是status,id_product和name_product。

我想在选中复选框时插入此多个数据。 我不知道如何插入它们。 我希望这里有人可以帮助我:-)。 我真的很感激任何帮助。

1 个答案:

答案 0 :(得分:2)

这不起作用 - 每个结果都会有一个select / check参数,因此在发布(缺失)<form>后,您无法分辨它的属性,因为您获得的只是一个$_REQUEST['check'],其值为on,而一个$_REQUEST['status']的值为012

此外,$result[id_product]应为{$result['id_product']}等。

如果您为此字段命名,包括产品ID,则可以了解适用checkstatus值的产品:

$prod_id = $result['id_product'];
echo "
  <select name='status-{$prod_id}' ...>
  <input name='check-{$prod_id}' ...>
";

然后您可以像这样处理服务器端:

foreach ( $_REQUEST as $k => $v )
   if ( preg_match( "@^check-(.*)@", $k, $m ) )      
   {
       $id_product = $m[1];
       $status = $_REQUEST[ "status-$id_product" ];
       // your INSERT query...
   }

或者,如果没有preg_match,您需要检查strpos( $k, "check-" ) === 0substr( $k, strlen( "check-" ) )是否获得产品ID。

替代方案:数组

PHP提供了另一种传递请求参数的方法,使它们最终成为一个数组:您可以命名输入a[b],例如:

  <input name='a[foo]' value='abc'/>
  <input name='a[bar]' value='def'/>

如果您提交此表单,然后

echo "<pre>" . print_r( $_REQUEST, 1 ) . "</pre>";

你会看到

 Array
 (
     [a] => Array
     (
         [foo] => abc
         [bar] => def
     )
 )

这意味着您可以将这些输入作为数组访问:$_REQUEST['a']['foo']

你也可以这样做:

  <input name='a[]' value='abc'/>
  <input name='a[]' value='def'/>

在这种情况下$_REQUEST

 Array
 (
     [a] => Array
     (
         [0] => abc
         [1] => def
     )
 )

表格

现在让我们将其应用于您的表单。

我借此机会向您介绍PDO,因为mysql_query等已被弃用。您可以使用mysqli,但如果您更改数据库,则必须更改大量代码;使用PDO,您只需更改连接字符串。

使用查询参数/参数绑定也是明智之举。查询

"SELECT * FROM PRODUCT WHERE IDCUSTOMER = $_SESSION[IDCUSTOMER]";

有两个相关问题:首先,$_SESSION[IDCUSTOMER]应为{$_SESSION['IDCUSTOMER']},否则您会收到警告,查询将为".. WHERE IDCUSTOMER = " - 语法错误。 其次,如果$_SESSION['IDCUSTOMER']不是整数,则查询也会出现语法错误。

// connect to the database (connect.php)
$db = new PDO( "mysql:host=localhost;dbname=your_db", $dbuser, $dbpass );

// query for products using ? placeholders for query parameters:
$sth = $db->prepare( "SELECT * FROM PRODUCT WHERE IDCUSTOMER = ?" );
$sth->execute( [ $_SESSION['IDCUSTOMER'] ] );

while ( $row = $sth->fetch() ) {
  $id_product = $result['id_product'];  // makes things easier below
  echo "
    <tr>
      <td>
          <select name='status[$id_product]'>
            <option value='0'>BUY</option>
            <option value='1'>SELL</option>
            <option value='2'>LOAN</option>
          </select>
      </td>
      <td> $id_product </td>
      <td> {$row['name_product']} </td>
      <td> <input type='checkbox' name='check[$id_product]' /> </td>
  ";
}

在这里,您可以看到我们对HTTP请求参数名称使用foo[bar]表示法而不是foo[]表示法。这是因为如果我们使用<select name='status[]'><input type='checkbox' name='check[]'>,则可能会发生count( $_REQUEST['status']) != count( $_REQUEST['check'] ),因为复选框参数只有在选中时才会提交,否则就不存在。

使用$result['id_product']而不仅仅是行索引($i++)也很重要,因为查询返回的行的顺序和行数可以在生成{{1}之间发生变化提交它。

处理表单

这与之前的<form>代码段非常相似,但更简单,因为我们对请求参数使用foreach ($_REQUEST语法:

foo[bar]