以html形式更新依赖于另一表的一个表值

时间:2019-07-11 12:18:18

标签: php mysql

两个表Order和Line_items相互关联,因为order_id放置在订单项中,

现在首先填充订单表,然后根据订单表的ID填充lineitems表。 一个isset()中的所有变数都有两个函数,一个函数在订单表中添加值,第二个函数获取订单ID,然后填充lineitems函数。

问题是第一个订单项的订单ID在HTML表单的order_id的value属性中为“”。 (我很难解释这个问题。)

这是我的Php isset()函数。

 if(isset($_POST['check_out'])){
    $user_id = $_POST['user_id'];
    $shipping_address = $_POST['shipping_address'];
    $billing_address = $_POST['billing_address'];
    $shipping_method_id = $_POST['shipping_method_id'];
    $grand_total = $_POST['grand_total'];
$order->addOrder($user_id,$shipping_address,$billing_address,$shipping_method_id,$grand_total);

$order_id = $_POST['latestorder'];
$product_id = $_POST['product_id'];
$product_price = $_POST['product_price'];
$product_quantity = $_POST['product_quantity'];
$product_total = $_POST['product_total'];
if (empty($order_id)) {
        $order_id=$order->latestOrderRecord();
        $order_id=+1;
    }


$id= count($product_id);

for ($i=0; $i <$id ; $i++) { 

    $line_items->insertInLineItems($order_id,$product_id[$i],$product_price[$i],$product_quantity[$i],$product_total[$i]);
    // $shoping_cart->

    header('location:../cart.php');

    }


}

html表单

<form method="post" action="n/GetPostData.php" class="woocommerce-shipping-calculator">
  <td data-title="Shipping">
    Flat Rate: 
    <span class="amount">$300.00</span> 
    <p><a data-toggle="collapse" aria-controls="calculator" href="#calculator" aria-expanded="false" class="shipping-calculator-button">Calculate Shipping</a></p>
    <div id="calculator" class="shipping-calculator-form collapse">
      <p id="calc_shipping_country_field" class="form-row form-row-wide">
        <select rel="calc_shipping_state" class="country_to_state" id="calc_shipping_country" name="shipping_method_id">
          <option>Select Shipment Method</option>
          <?php $shipping_method=$shipment_method->allShipmentMethod(); 
            while ($row=mysqli_fetch_assoc($shipping_method)) { ?>
          <option value="<?php echo $row['id'] ?>"><?php echo $row['name']; ?></option>
          <?php } ?>
        </select>
      </p>
      <p id="calc_shipping_country_field" class="form-row form-row-wide">
        <input type="text" id="calc_shipping_postcode" name="shipping_address" placeholder="Shipping Address"  class="input-text">
      </p>
      <p id="calc_shipping_state_field" class="form-row form-row-wide validate-required">
        <input type="text" id="calc_shipping_postcode" name="billing_address" placeholder="Billing Address"  class="input-text">
      </p>
    </div>
  </td>
  </tr>
  <tr class="order-total">
    <th>Total</th>
    <td data-title="Total">
      <strong><span class="amount">$<?php echo $total; ?></span></strong> 
      <input type="hidden" name="grand_total" value="<?php echo $total ?>">
      <input type="hidden" name="user_id" value="<?php echo $id ?>">
      <?php $latestrecord=$order->latestOrderRecord(); ?>
      <input type="hidden" name="latestorder" value="<?php echo $latestrecord ?>">
      <?php $total=0; $all_cart_products=$shoping_cart->allShopingcartValue($id); 
        while ($row=mysqli_fetch_assoc($all_cart_products)) { ?>
      <input type="hidden" name="product_id[]" value="<?php echo $row['product_id']; ?>">
      <input type="hidden" name="product_quantity[]" value="<?php echo $row['quantity']; ?>">
      <input type="hidden" name="product_price[]" value="<?php echo $row['price']; ?>">
      <input type="hidden" name="product_total[]" value="<?php echo $row['total']; ?>">
      <?php } ?>
      <p><button type="submit" class="button" name="check_out" type="submit">Chcek Out</button></p>
    </td>
  </tr>
</form>

在订购表为空时,name="latestorder"第一次显示“”(无值)。

这是latestOrderRecord()函数定义

public function latestOrderRecord()
{

    $query="SELECT MAX(id) AS LatestRecord FROM orders";

    $conn=$this->Connection();

    $result = mysqli_query($conn,$query);

    $num_rows = mysqli_num_rows($result);
    if ($num_rows>0) {
        while ($row=mysqli_fetch_assoc($result)) {
            $latestrecord=$row['LatestRecord'];
         }
    }
    return $latestrecord;
}

Line items table

Orders table Picture

1 个答案:

答案 0 :(得分:1)

问题是,您正在header()循环中使用for()重定向:

for ($i=0; $i <$id ; $i++) { 
    header('location:../cart.php'); // that is the issue 
}

您必须在for循环中使用成功变量,然后才能在循环外使用变量进行重定向,例如:

提示:

if($success){
    header('location:../cart.php');
    exit(); // always use exit() after header() otherwise script execution will not stop
}

编辑:

根据您的评论,您正在lineitem表中获得订单ID 0,因为您插入的$_POST['latestorder']值是0,因为您没有最新的ID。

您需要插入此查询的最后插入的ID:

$order->addOrder($user_id,$shipping_address,$billing_address,$shipping_method_id,$grand_total);

addOrder()方法返回最后插入的id,并将其存储到新变量中,并在lineitem表中使用此变量,例如:

$lastInsertID = $order->addOrder($user_id,$shipping_address,$billing_address,$shipping_method_id,$grand_total);

,这里$line_items->insertInLineItems($order_id,$product_id[$i],$product_price[$i],$product_quantity[$i],$product_total[$i]);$order_id替换$lastInsertID

请确保方法addOrder()返回最后插入的ID。