更新
如何将多个数据插入数据库? 我有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。
我想在选中复选框时插入此多个数据。 我不知道如何插入它们。 我希望这里有人可以帮助我:-)。 我真的很感激任何帮助。
答案 0 :(得分:2)
这不起作用 - 每个结果都会有一个select
/ check
参数,因此在发布(缺失)<form>
后,您无法分辨它的属性,因为您获得的只是一个$_REQUEST['check']
,其值为on
,而一个$_REQUEST['status']
的值为0
,1
或2
。
此外,$result[id_product]
应为{$result['id_product']}
等。
如果您为此字段命名,包括产品ID,则可以了解适用check
和status
值的产品:
$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-" ) === 0
和substr( $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]