我在PHP中动态创建了一个html表。该表有复选框,名称价格和数量。数量是下拉列表。我想知道如何根据所选复选框发布所有这些值。这是小snipet.What我想要的是用户会选择 复选框,我想将名称,价格和选定的数量发布到另一个页面cart.php。
我现在正在工作的是我只能通过执行$ _POST ["复选框"]来发布选中的复选框值。但我不知道为所选复选框发布值。请帮助。我正在努力学习PHP。
<form action="cart.php" name="myform" id="menuform" method="post" >
echo "<label>"."Appetizers"."</label>";
echo "<center>";
echo "<table class='appetizerstable'>";
echo "<thead>";
echo "<tr>";
echo "<th>";
echo "Select";
echo "</th>";
echo "<th>";
echo "Name";
echo "</th>";
echo "<th>";
echo "Price";
echo "</th>";
echo "<th>";
echo "quantity";
echo "</th>";
echo "</tr>";
echo "</thead>";
echo "<tbody>";
while($row = mysqli_fetch_array($appetizers)) {
echo "<tr>";
echo "<td>" ."<input type='checkbox' name ='checkboxes[]' value=".$row['id'].">".
"</td>";
echo "<td>" ."<label name='foodname[]'>". $row['name']."</label>" . "</td>";
echo "<td>" ."<label name='foodprice[]'>". $row['price']."</label>" . "</td>";
echo "<td>"."<select id='quantity[] name='quantity[]'>".
"<option value='1'>1</option>".
"<option value='1'>2</option>".
"</select>".
"</td>";
echo "</tr>";
}
echo "</tbody>";
echo "</table>";
echo "<center>";
答案 0 :(得分:0)
您不需要发送名称和价格值,因为您始终可以通过在发送表单数据时知道该项目的ID来从数据库中检索这些值。因此,我们将只关注所检查项目的quantities
和id
。
您尝试执行的操作的主要问题是quantity[]
表单数据和checkboxes[]
表单数据在发送表单时不会在数组中具有相同数量的项目...你没有检查每件物品。发生的情况是checkboxes
仅在选中此框时发送数据,而quantity[]
在选择了选项时发送数据,默认情况下始终选择一个。因此,无论是否检查,基本上每个数量选择数据都将被发送。因此很难确定哪些数量的数组项属于复选框数组项。但是有一个解决方案......一个复杂的解决方案,但仍然是一个只有php的解决方案。
以下是新的HTML 为了便于阅读,我清理了一下
<form action="cart.php" name="myform" id="menuform" method="post" >
<label>Appetizers</label>
<center>
<table class="appetizerstable">
<thead>
<tr>
<th>Select</th>
<th>Name</th>
<th>Price</th>
<th>quantity</th>
</tr>
</thead>
<tbody>
<?php while($row = mysqli_fetch_array($appetizers)) : ?>
<tr>
<td>
<input type="checkbox" name ="checkboxes[]" value="<?php echo $row['id'] ?>">
</td>
<td>
<label><?php echo $row['name']; ?></label>
</td>
<td>
<label><?php echo $row['price']; ?></label>
</td>
<td>
<select id="quantity[]" name="quantity[]">
<option value="<?php echo '1-' . $row['id']; ?>">1</option>
<option value="<?php echo '2-' . $row['id']; ?>">2</option>
</select>
</td>
</tr>
<?php endwhile; ?>
</tbody>
</table>
<center>
</form>
好的,改变了......好好看一下新的quantity[]
值。我附加了一个破折号,后跟行id。现在每个值都有一个唯一值,我们可以将数值与复选框值相关联。接下来我们将在cart.php文件中解决这个问题。以下是如何做到这一点:
<强> cart.php 强>
<?php
if(isset($_POST['checkboxes']) && isset($_POST['quantity']) ) {
$checkboxes = $_POST['checkboxes'];
$quantities_unfiltered = $_POST['quantity'];
$quantities = array();
foreach($quantities_unfiltered as $unfiltered) {
$filtered = explode('-', $unfiltered);
// $filtered now equals a 2 item array
// $flitered[0] = the quantity value
// $filtered[1] = the id
// create an associative array for easy access to the quantity by using the id as the array key
$quantities[ $filtered[1] ] = $filtered[0];
}
// now we can figure out the quantity values for each checkbox checked
// test it out by echoing the values
foreach($checkboxes as $id) {
echo 'Item with id of ' . $id . ' was selected with a quantity of ' . $quantities[$id] . '<br>';
}
}
?>
希望能帮到你一点。
<强>更新强>
我在cart.php示例中添加了一个if语句,并从名称属性中删除了foodprice[]
和foodname[]
,因为它们不作为POST数据发送,因为html不是表单元素。我对此有点挑剔。
答案 1 :(得分:0)
您可以使用jquery在下拉值更改时提交表单
<select name="" id="" onchange="this.form.submit()"> .......... ......... </select>