2015-04-04 25 views
1

我正在製作電子商務網站。我遇到以下在測試期間遇到的問題:爆炸正在刪除字符串中的最後一個字符

  1. 從管理面板更新訂單狀態(處理中,送貨,完成和取消)不適用於1件產品。
  2. 從數據庫中檢索值時,Explode正在刪除最後一個字符。
  3. 如果訂單中有多個產品,訂單狀態完全正常,但點2保持不變。

因此,例如:可以說,在我的order (ORD-00001)

我只有1個產品(ABC-000001)。所以,當爆炸時,我得到的價值爲(ABC-00000)。

在我的下order (ORD-00002)

我有2個產品(ABC-000001PQR-00005)。所以在爆炸時,我得到的值爲(ABC-000001PQR-0000)。

在第二個訂單中,訂單狀態完全正常。但是,在第一順序中,它根本不起作用。

這裏的PHP按鈕單擊事件:

<?php 

if (isset($_POST["btnUpdateOrderStatus"])) { 

    $qu = "SELECT * FROM orders WHERE OrderCode = '".$_GET["ord"]."'"; 
    $result = $validate->Query($qu); 
    if (!$result) { 
     echo $validate->Error(); 
     exit(); 
    } 
    while ($rowp = $validate->FetchAllDatas()) { 
     $p = explode(', ', $rowp["ProdCode"]); 

     foreach ($_POST["updateOrderPerProductStatus"] as $key => $value) { 
      //echo $key; 
      for ($i=0; $i < count($p); $i++) { 
       if($p[$i] == $key) { 
        $querToUpdateOrderStatus = "UPDATE orders SET OrderStatus = '".implode(', ',$_POST["updateOrderPerProductStatus"])."' WHERE OrderCode = '".$_GET["ord"]."' "; 

        if ($validate->Query($querToUpdateOrderStatus)) { 
         header("Location: http://www.example.com/nbs/Administrators/Orders/Update.php?ord=".$_SESSION["ord"]."&id=".$_SESSION["id"]); 
         exit(); 
        } else { 
         echo $validate->Error(); 
         exit(); 
        } 
       } 
      } 
     } 
    } 
} 

?> 

下面是我用的代碼:

<?php 
$query = "SELECT o.*, com.* FROM orders o, commission com WHERE o.OrderCode = '".$ord."'"; 

$validate->Query($query); 

if ($validate->NumRows() >= 1) { 
    while ($row = $validate->FetchAllDatas()) { 

     $products = explode(',', $row['ProdCode']); // <-- error line 
     $qnty = explode(', ', $row['Quantity']); 
     $orderStats = explode(', ', $row["OrderStatus"]); 
     $productsWithQunty = array_combine($products, $qnty); 

     echo ' 
     <tr> 
      <td style="width: 50%">Order Code: </td> 
      <td style="width: 50%">'.$row["OrderCode"].'</td> 
     </tr> 
     <tr> 
      <td style="width: 50%">Order Date: </td> 
      <td style="width: 50%">'.$row["OrderDate"].'</td> 
     </tr> 
     <tr> 
      <td style="width: 50%">Order Status: </td> 
      <td style="width: 50%">'.$row["OrderStatus"].'</td> 
     </tr> 
     <tr> 
      <td style="width: 50%">Order Modified: </td> 
      <td style="width: 50%">'.$row["OrderModified"].'</td> 
     </tr> 
     <tr> 
      <td style="width: 50%">Order Payable: </td> 
      <td style="width: 50%">'.number_format($row["PayableAmount"], 2).'</td> 
     </tr> 
     <tr> 
      <td style="width: 50%">Products: </td> 
      <td style="width: 50%">'; 
      foreach ($productsWithQunty as $key => $value) { 
       echo $key . ":" . $value; 
      } 
      echo '</td> 
     </tr>'; 
     $arrProductStatus = array_combine($products, $orderStats); 
     ?> 
     <form action="Update.php?ord=<?php echo $ord; ?>" method="POST"> 
      <?php 
      foreach ($arrProductStatus as $key => $value) { 
       echo ' 
       <tr> 
        <td style="width: 50%">'.$key.'</td> 
        <td style="width: 50%">         
         <select name="updateOrderPerProductStatus['.$key.']"> 
          <option value="'.$value.'">'.$value.' -- selected</option> 
          <option value="In Process">In Process</option> 
          <option value="Cancelled">Cancelled</option> 
          <option value="Completed">Completed</option> 
          <option value="Shipping">Shipping</option> 
         </select> 
        </td> 
       </tr>'; 
      } 
      ?> 
      <tr> 
       <td colspan="2"> 
        <input type="submit" name="btnUpdateOrderStatus" class="btn btn-primary btn-block" value="Submit"> 
       </td> 
      </tr> 
     </form> 
     <?php 
    } 
} 
?> 

編輯1:

產品陣列: 對於order (ORD-00001)

Array 
(
    [0] => ABC-000001 
) 

對於order (ORD-00002)

Array 
(
    [0] => ABC-000001 
    [1] => PQR-00005 
) 

編輯2:RickJames評論

後,這裏就是我從實際的數據庫中獲取。

代碼:

echo $row["ProdCode"]; 
$products = explode(', ', $row['ProdCode']); 
print_r($products); 

結果上面的代碼:

DC-0001-0002, PK-0002-000 // The actual product code coming from DB 

Array ([0] => DC-0001-0002 [1] => PK-0002-000) 

並在數據庫中,我有:

OrderCode CustomerId ProductCode 
ORD-000002  1  DC-0001-0002, PK-0002-0004 

請幫助我。先謝謝你。

+0

只需指定錯誤在哪一行即可 – 2015-04-04 06:48:21

+0

也可以顯示$ row ['ProdCode'] array – 2015-04-04 06:54:23

+0

我仍然困惑哪一個是$ row ['ProdCode']。請在此處填寫 – 2015-04-04 07:03:33

回答

0
$products = explode(',', $row['ProdCode']); // <-- error line 

在(,)針之後使用空格。

$products = explode(', ', $row['ProdCode']); 

使用此代碼

+0

試過並測試過,沒有運氣..謝謝你.. – 2015-04-04 07:30:11

+0

還有一件事,在回答時,請格式化代碼,使其看起來不錯和可讀。 – 2015-04-04 07:31:09

+0

然後你犯了一些愚蠢的錯誤,因爲在我的手它完美地工作。你能告訴我哪一步發生問題嗎? – Gaurav 2015-04-05 13:44:53

0

EDIT 2你指出的$row["ProdCode"]值在最後居然缺乏4。因此,explode(...)不是問題。如果$row["ProdCode"]確實只是"DC-0001-0002, PK-0002-000",那麼問題似乎在於$validate->FetchAllDatas(),其中$row被設置。

+0

那麼根據你的說法,這有什麼問題? – 2015-04-07 03:48:19

+0

但我在我的應用程序的許多地方使用了'$ validate-> FetchAllDatas()'。我找不到任何問題。只有在這個地方我有這個問題。休息一切工作正常。 – 2015-04-07 03:53:56