【问题标题】:PHP - Returning Errors with $_SESSIONPHP - 使用 $_SESSION 返回错误
【发布时间】:2016-12-08 15:46:13
【问题描述】:

我有一个 PHP 脚本,它将根据输入的订单 ID 从 Magento API 返回订单信息。我在表单中为 API 用户名和密码添加了两个额外的输入字段,这样它们就不会存储在 PHP 脚本文件中。

这很好用,除了我需要让脚本捕捉 API 用户名和/或密码不正确时导致的错误。

这是一个成功的查询:

最后一行是点击提交时返回的内容。如果查询不成功,脚本将不会返回初始表单页面,如下所示:

请看我下面的代码:

表单页面

<?php
    session_start();
?>
<html>
    <head>
        <title>Retrieve Order</title>
        <link rel="stylesheet" type="text/css" href="/matt/api.css">
    </head>
    <body>


        <form class="get_value" action="get_order.php" method="post">
            Enter username and password.
            <input type="text" name="api_user">
            <input type="password" name="api_pass"><br><br>
            Enter an order ID to retrieve the grand total order value.<br><br>
            <input type="text" name="order_id">
            <input type="submit" class="form_submit">
        </form>
    </body>
</html>
<?php
    if (isset($_SESSION['query_result'])) {
        echo $_SESSION['query_result'];
        unset($_SESSION['query_result']);
    }
?>

PHP 脚本

<link rel="stylesheet" type="text/css" href="/matt/api.css">
<?php
    $order_id = $_POST['order_id'];
    $user = $_POST['api_user'];
    $pass = $_POST['api_pass'];
    $client = new SoapClient('https://ts564737-container.zoeysite.com/api/v2_soap/?wsdl');
    $session = $client->login($user, $pass);
    $filter = array('filter' => array(array('key' => 'order_id', 'value' => $order_id)));
    $result = $client->salesOrderList($session, $filter);

    session_start();
    if ($result) {
       foreach ($result as $returned_order) {
            $_SESSION['query_result'] = 'The grand total of order ID <b>' . $order_id . '</b> is <span style="color: #ff0000; font-weight: bold;">£' . round($returned_order->grand_total, 2) . '</span>';
        }
    } else {
        $_SESSION['query_result'] = 'Order ID <b>' . $order_id . '</b> does not exist in the database.';
    }

    header('Location: xxx/enter_order_id.php');
?>

如何“捕捉”错误,使其作为query_result 会话变量的一部分返回?非常感谢您的洞察力。

【问题讨论】:

  • 查看try/catch 块。
  • 使用try
  • 请注意,您的header('Location: ....) 将永远无法使用。在将任何内容输出到屏幕之前,您必须设置所有标题。
  • Soap 调用需要包裹在 try/catch 中。正是在该调用中引发了异常。
  • 由于您在 header('Location: ...'); 语句上方有 HTML 输出 (&lt;link ....&gt;),因此该重定向不应该起作用。你应该得到“标题已经发送”。还是您的实际代码看起来略有不同?。

标签: php html magento session


【解决方案1】:

将变量和语句包装在 try-catch 异常处理程序中。工作代码:

<?php
    session_start();
    try {

        $order_id = $_POST['order_id'];
        $user = $_POST['api_user'];
        $pass = $_POST['api_pass'];
        $client = new SoapClient('https://ts564737-container.zoeysite.com/api/v2_soap/?wsdl');
        $session = $client->login($user, $pass);
        $filter = array('filter' => array(array('key' => 'order_id', 'value' => $order_id)));
        $result = $client->salesOrderList($session, $filter);

        if ($result) {
           foreach ($result as $returned_order) {
                $_SESSION['query_result'] = '<span class="success_box">The grand total of order ID <b>' . $order_id . '</b> is <b>£' . round($returned_order->grand_total, 2) . '</b></span>';
            }
        } else {
            $_SESSION['query_result'] = '<span class="error_box"><b>Error:</b> Order ID <b>' . $order_id . '</b> does not exist in the database.</span>';
        }
    } catch(exception $e) {
        $_SESSION['query_result'] = '<span class="error_box"><b>Error:</b> ' . $e->getMessage() . '</span>';
    }

    header('Location: xxx');
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 2011-12-05
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多