我有这个数据库
和此表单,从数据库中动态生成
<table border="1" cellspacing="0" cellpadding="6">
<tr bgcolor="#CCCCCC">
<td><strong>product id</strong></td>
<td><strong>product name</strong></td>
<td><strong>product price</strong></td>
<td><strong>quantity</strong></td>
</tr>
<form method="post" action="insert.php">
<?php
$query = $dbh->query('SELECT * FROM products');
$results = $query->fetchAll(PDO::FETCH_ASSOC);
foreach ($results as $row)
{
?>
<tr>
<td><?php echo $row['product_id']; ?></td>
<td><?php echo $row['product_name']; ?></td>
<td><?php echo $row['product_price']; ?></td>
<td><input name="quantity" type="text" value="0"></td>
</tr>
</form>
<?php } ?>
</table>
<br>
<input type="submit" value="Add Records">
表单中的数量是一个文本框,所以我可以修改它。 我想输入数量并按下按钮以在order_products表中插入值(包括数量)。
1)如何通过邮寄将所有数量和product_id(以及其余部分)传递到下一页? (直到现在我知道如何传递单个值)
2)有没有更好的方法来实现它?
3)insert语句应该在同一页面还是我获得post vars的页面?
db scheme http://i.stack.imgur.com/oqdOy.jpg
感谢
罗布
答案 0 :(得分:1)
1)首先,您必须将<input>
封装在单个表单中(将</form>
标记移到<input type="submit" value="Add Records">
之后,就像您拥有的那样它现在在第一次迭代时关闭<form>
标记)并通过HTTP POST方法提交它。然后,根据您的架构,您必须在quantity
旁边添加的唯一字段为product_id
,您可以在隐藏字段中指定该值,例如:
<?php
echo "<input type='hidden' name='pid_$row['product_id']' value='$row['product_id']'>";
echo $row['product_id'];
?>
请注意,您仍然可以将echo
值本身用于查看目的。您还必须动态生成数量<input>
字段name
属性,否则$_POST
将在其键相同时覆盖值。
<?php
echo "<input type='text' name='pid-qtd_$row['product_id']'>";
?>
2)这取决于您的发展重点。有一些框架可以简化您的流程。我建议您将所有数据库查询和连接数据保存在数据库帮助程序类中,并require
将其保存在您需要的任何位置。
3)由于您正在使用PDO,我假设您有一个OOP设计,这意味着在您的数据库帮助程序类中执行此操作。接收HTTP请求的页面必须require
您的帮助程序并处理对其查询方法的参数的$_POST
解析。不要忘记prepare your statements and parameterizing your queries。
答案 1 :(得分:0)
我建议将product_id放在一个隐藏的表单元素中:
<tr>
<input type='hidden' name='product_id' value='<?php echo $row['product_id']; ?>'/>
<td><?php echo $row['product_id']; ?></td>
<td><?php echo $row['product_name']; ?></td>
<td><?php echo $row['product_price']; ?></td>
<td><input name="quantity" type="text" value="0"></td>
</tr>
这将向product_id发送您的数量,您可以在插入声明中使用它。
唯一的问题是如果你有多行,那么product_id会有多个隐藏元素,等等。克服这个问题的方法包括通过在隐藏元素上附加递增数字来区分它们。名称,例如:
$i = 1;
foreach ($results as $row)
{
$product_id_name = 'product_id_'.$i;
$quantity_name = 'quantity_'.$i;
... echo your table row, using $product_id_name in the hidden element, and $quantity_name in your text input
$i++;
}
然后在你的插入代码中你必须查找$ _POST中的所有项目,其中的键以&#34; quantity _&#34;开头,如果它们非零,则在键前缀后获取整数NNN&# 34;数量_&#34;,并获取相应的product_id_NNN值来进行插入。
答案 2 :(得分:0)
使用隐藏元素,您可以将数据发布到第二页。使用计数器变量,您可以添加动态表单元素并将其发布到第二页。
<form method="post" action="test2.php">
<table border="1" cellspacing="0" cellpadding="6">
<tr bgcolor="#CCCCCC">
<td><strong>product id</strong></td>
<td><strong>product name</strong></td>
<td><strong>product price</strong></td>
<td><strong>quantity</strong></td>
</tr>
<?php
$query = $con->query('SELECT * FROM product'); //your query goes here
$results = $query->fetchAll(PDO::FETCH_ASSOC);
$i=0; //counter variable
foreach ($results as $row)
{
?>
<tr>
<td>
<?php echo $row['prod_id']; ?>
<input type="hidden" name="prod_id<?php echo $i; ?>" value="<?php echo $row['prod_id']; ?>" />
</td>
<td>
<?php echo $row['prodname']; ?>
<input type="hidden" name="name<?php echo $i; ?>" value="<?php echo $row['prodname']; ?>" />
</td>
<td>
<?php echo $row['price']; ?>
<input type="hidden" name="price<?php echo $i; ?>" value="<?php echo $row['price']; ?>" />
</td>
<td><input name="quantity<?php echo $i; ?>" type="text" value="0"></td>
</tr>
<?php
$i++; //increment counter variable
}
?>
<input type="hidden" name="rows" id="rows" value="<?php echo $i; ?>" />
</table>
<br>
<input type="submit" value="Add Records">
</form>
您的插入页面代码就在这里....
for($i=0;$i<=$_POST['rows'];$i++)
{
$prodid = $_POST['prod_id'.$i];
$pname = $_POST['name'.$i];
$pprice = $_POST['price'.$i];
$con ->exec("insert into product(prod_id,prodname,price)values('$prodid', '$pname','$pprice' )" );
}