gpt4 book ai didi

php - php如何向数据库中插入多条数据

转载 作者:行者123 更新时间:2023-11-29 07:24:06 24 4
gpt4 key购买 nike

更新:

如何向数据库中插入多条数据?我有包含 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。

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

最佳答案

那行不通 - 你会有一个 select/check每个结果都有一个参数,因此在发布(丢失) <form> 后您无法判断它属于哪里。 ,因为您得到的只是一个 $_REQUEST['check']值(value)on和一个$_REQUEST['status']值为 0 , 12 .

此外,$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-" ) === 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
)
)

表格

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

我借此机会向您介绍PDOmysql_query等已弃用。您可以使用 mysqli ,但是如果你改变数据库,你就必须改变很多代码;使用 PDO,您只需更改连接字符串即可。

使用查询参数/参数绑定(bind)也是明智的。查询

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

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

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

处理表单

这与之前的 foreach ($_REQUEST 非常相似片段,但更简单,因为我们使用 foo[bar]请求参数语法:

$sth = $db->prepare( "
INSERT INTO PRODUCTS (id_product, name_product, status, IDCUSTOMER ) VALUES (?,?,?,?)
");

foreach ( $_REQUEST['check'] as $id_product => $ignore )
$sth->execute( [
$id_product,
$name_product, // TODO
$status,
$_SESSION['IDCUSTOMER']
] );

关于php - php如何向数据库中插入多条数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35104361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com