例如,我在主页上有这段代码。
<?php
session_start();
$_SESSION['order']=array();
?>
<form name="orderform" method="post" action="e.php">
Product Catalog
<table border="1">
<tr>
<td>Product</td>
<td>Price</td>
<td>Quantity</td>
</tr>
<?
for($i=0;$i<6;$i++){
echo '<tr>';
echo '<td><input type=hidden name="product" value="'.$i.'"> Product '.$i.'</td>';
$price=rand(1,10);
echo '<td><input type=hidden name="price" value="'.$price.'">$'.$price.'</td>';
echo '<td><input type=text name="quantity"></td>';
echo '<tr>';
}
?>
</table>
<br>
<input type="submit" name="submit" value="submit">
</form>
我有一个多维会话数组,$ _SESSION ['order']我正在尝试保存这个6个产品项目的订单形式,以及它的价格和数量,所以它可以在POST后的下一页上检索方法已被采取行动。
即在e.php文件
上<?php
session_start();
$_SESSION['order'][] = array('product'=>$_POST['product'],
'price'=>$_POST['price'],
'quantity'=>$_POST['quantity']);
var_dump($_SESSION['order']);
if(count($_SESSION['order'])>0){
foreach($_SESSION['order'] as $order){
echo "<p>Product = ".$order['product']."</p>";
echo "<p>Price = ".$order['price']."</p>";
echo "<p>Quantity = ".$quantity['quantity']."</p>";
}
}
?>
但是我在e.php上得到的结果是我只得到订单页面的最后一项,而不是其他前五项。我在这里做错了吗?你有什么想法?
答案 0 :(得分:0)
问题是您有多个具有相同名称的表单字段。你需要这样的东西:
for($i=0; $i<6; $i++){
$price = rand(1,10);
printf('<tr>'.
'<td><input type=hidden name="product[%1$d]" value="%1$d" />Product %1$d</td>'.
'<td><input type=hidden name="price[%1$d]" value="%2$f" />$ %2$f</td>'.
'<td><input type=text name="quantity[%1$d]" /></td>'.
'</tr>',
$i, $price);
}
和
for ($i = 0; $i < count($_POST['product']; $i++) {
$_SESSION['order'][] = array('product'=>$_POST['product'][$i],
'price'=>$_POST['price'][$i],
'quantity'=>$_POST['quantity'][$i]);
(对于生产,你应该检查POST变量,如果它们确实存在,并且数组的大小正确。)
答案 1 :(得分:0)
您_POST
多个字段具有相同的name
属性,因此$_POST
变量将仅包含您要发布的最终唯一名称。您可以为每个输入创建唯一的名称,也可以将字段作为数组发布。唯一名称如下所示:
<?
for($i=0;$i<6;$i++){
echo '<tr>';
echo '<td><input type=hidden name="product'.$i.'" value="'.$i.'"> Product '.$i.'</td>';
$price=rand(1,10);
echo '<td><input type=hidden name="price'.$i.'" value="'.$price.'">$'.$price.'</td>';
echo '<td><input type=text name="quantity'.$i.'"></td>';
echo '<tr>';
}
?>
然后你需要遍历post数组并将其添加到会话数组中:
<?php
$i=0;
while(isset($_POST['product'.$i])){
$_SESSION['order'][] = array('product'=>$_POST['product'],
'price'=>$_POST['price'],
'quantity'=>$_POST['quantity']);
$i++;
}
?>
您也可以将其作为数组发送:
<?
for($i=0;$i<6;$i++){
echo '<tr>';
echo '<td><input type=hidden name="product[$i]" value="'.$i.'"> Product '.$i.'</td>';
$price=rand(1,10);
echo '<td><input type=hidden name="price[$i]" value="'.$price.'">$'.$price.'</td>';
echo '<td><input type=text name="quantity[$i]"></td>';
echo '<tr>';
}
?>
并且像这样得到它:
<?php
foreach($_POST['product'] as $key => $value){
$_SESSION['order'][] = array('product'=>$_POST['product'][$key],
'price'=>$_POST['price'][$key],
'quantity'=>$_POST['quantity'][$key]);
}
?>