我正在创建具有菜肴细节的餐厅项目。我想实现添加多个菜肴,而无需在数据库中使用会话保存。
我的操作不能正常运行。当我添加新菜时,它会覆盖上一个菜的值并将数组增加1
<?php
$DBhost = "localhost";
$DBuser = "root";
$DBPassword = "";
$database = "tandoor";
$CS = mysqli_connect($DBhost, $DBuser, $DBPassword, $database);
session_start();
?>
<?php
$id = 0;
if(isset($_POST['qty']))
{
$_SESSION['qty'] = $_POST['qty'];
$sessonID = $_SESSION['id'] = $id;
}
if(isset($_SESSION['qty'])){
$qty=$_SESSION['qty'];
}
?>
<?php
$orderinfo['id'] = $sessonID;
$orderinfo['qty'] = $qty;
$_SESSION['orderinfo'][] = $orderinfo;
print_r($_SESSION['orderinfo']);
?>
<?php
if(isset($_GET['did']))
{
$Did = $_GET['did'];
}
?>
<?php
$title = "Order details";
?>
<?php
$selectBannerQuery = "select * from banner";
$selectBannerCmd = $CS->query($selectBannerQuery);
?>
<table class="order-table">
<tr>
<th>Item Name</th>
<th>Price</th>
<th>Quantity</th>
<th>Total</th>
<th>Operations</th>
</tr>
<?php
for($i = 0 ; $i< count($_SESSION['orderinfo']); $i++)
{
if (isset($Did))
{
$sessonID = $_SESSION['id']= $Did;
}
else {
$sessonID = $_SESSION['id'];
}
?>
<?php
if (isset($sessonID))
{
$selectdishinfoQuery = "select D_id, DishName, price from dishes where D_id= $sessonID";
$selectdishinfoCmd = $CS -> query($selectdishinfoQuery);
while ($selectdishinfo = mysqli_fetch_array($selectdishinfoCmd, MYSQLI_ASSOC)){
$id = $selectdishinfo['D_id'];
$dishName = $selectdishinfo['DishName'];
$dishprice = $selectdishinfo['price'];
?>
<?php
if(isset($qty))
{
$total = $dishprice * $qty;
}
?>
<tr>
<td><?php if(isset($dishName)){echo ($dishName);}?></td>
<td><?php if(isset($dishprice)){echo ($dishprice);}?></td>
<td><?php if(isset($qty)){echo ($qty);}?></td>
<?php
?>
<td><?php if(isset($total)){echo ($total);}?></td>
<td><select name="qty" onchange="this.form.submit()">
<option value="0" <?php if(isset($qty)){ if ($qty == 0 ){echo 'selected';}}?>>0</option>
<option value="1" <?php if(isset($qty)){ if ($qty == 1 ){echo 'selected';}}?>>1</option>
<option value="2" <?php if(isset($qty)){ if ($qty == 2 ){echo 'selected';}}?>>2</option>
<option value="3" <?php if(isset($qty)){ if ($qty == 3 ){echo 'selected';}}?>>3</option>
<option value="4" <?php if(isset($qty)){ if ($qty == 4 ){echo 'selected';}}?>>4</option>
<option value="5" <?php if(isset($qty)){ if ($qty == 5 ){echo 'selected';}}?>>5</option>
<option value="6" <?php if(isset($qty)){ if ($qty == 6 ){echo 'selected';}}?>>6</option>
<option value="7" <?php if(isset($qty)){ if ($qty == 7 ){echo 'selected';}}?>>7</option>
<option value="8" <?php if(isset($qty)){ if ($qty == 8 ){echo 'selected';}}?>>8</option>
<option value="9" <?php if(isset($qty)){ if ($qty == 9 ){echo 'selected';}}?>>9</option>
<option value="10" <?php if(isset($qty)){ if ($qty == 10 ){echo 'selected';}}?>>10</option>
<option value="11" <?php if(isset($qty)){ if ($qty == 11 ){echo 'selected';}}?>>11</option>
<option value="12" <?php if(isset($qty)){ if ($qty == 12 ){echo 'selected';}}?>>12</option>
<option value="13" <?php if(isset($qty)){ if ($qty == 13 ){echo 'selected';}}?>>13</option>
<option value="14" <?php if(isset($qty)){ if ($qty == 14 ){echo 'selected';}}?>>14</option>
<option value="15" <?php if(isset($qty)){ if ($qty == 15 ){echo 'selected';}}?>>15</option>
<option value="16" <?php if(isset($qty)){ if ($qty == 16 ){echo 'selected';}}?>>16</option>
<option value="17" <?php if(isset($qty)){ if ($qty == 17 ){echo 'selected';}}?>>17</option>
<option value="18" <?php if(isset($qty)){ if ($qty == 18 ){echo 'selected';}}?>>18</option>
<option value="19" <?php if(isset($qty)){ if ($qty == 19 ){echo 'selected';}}?>>19</option>
<option value="20" <?php if(isset($qty)){ if ($qty == 20 ){echo 'selected';}}?>>20</option>
</select>
</td>
</tr>
<?php }
}}?>
</table>
Session基本上是一个全局数组你可以在其中设置嵌套数组
你可以创建一个会话$_SESSION("dishes"=>array())
然后每次你得到一个新菜的时候都加上$_SESSION["dishes"][] = $array_of_new_dish
下面的代码是为您更新您的会话购物车相关的逻辑,如果您想添加当前数量与以前的,将以这种方式完成,其他逻辑将与您的工作流一起工作。
if(isset($_POST['qty']))
{
$_SESSION['qty'] = !isset($_SESSION['qty'])?$_POST['qty']:$_SESSION['qty']+$_POST['qty'];
$sessonID = $_SESSION['id'] = $id;
}
if(isset($_SESSION['qty']))
{ $qty=$_SESSION['qty']; }