爆炸是从字符串中删除最后一个字符

时间:2015-04-04 06:44:11

标签: php mysql

我正在建立一个电子商务网站。我在测试时遇到了以下问题:

  1. 从管理面板更新订单状态(处理中,发货,已完成和已取消)不仅适用于1个产品。
  2. 爆炸是在从数据库中检索值时删除最后一个字符。
  3. 如果订单中有多个产品,订单状态完全正常,但第2点保持不变。
  4. 例如:让我们说order (ORD-00001)

    我只有一个产品(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
    

    请帮帮我。提前谢谢。

2 个答案:

答案 0 :(得分:0)

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

在(,)针后使用空格。

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

使用此代码

答案 1 :(得分:0)

编辑2 中,您表示$row["ProdCode"]的值实际上最后缺少4。因此,explode(...)不是问题。如果$row["ProdCode"]实际上只是"DC-0001-0002, PK-0002-000",那么问题就出现在$validate->FetchAllDatas()设置$row的位置。