【问题标题】:PHP form issue after submit提交后的PHP表单问题
【发布时间】:2020-05-12 10:05:00
【问题描述】:

我会尝试提交此表单:

<form name="quick_login" class="loginfrm" action="[{$oViewConf->getSelfActionLink()}]cl=subtel_account_extend_bill_details" method="post">
    <input type="hidden" id="oxid" name="oxid" value="[{$oViewConf->getoxtrckID()}]">

    <div class="form-group">
        <label for="loginEmail_[{$style}]">[{oxmultilang ident="WIDGET_LOGINBOX_EMAIL_ADDRESS"}]</label>
        <input type="text" id="email_track" name="email_track" class="form-control" required>
    </div>
    <div class="form-group">
        <label for="ordernr_track_[{$style}]">[{*oxmultilang ident="WIDGET_LOGINBOX_PASSWORD"*}]Order number</label>
        <input type="text" id="ordernr_track" name="ordernr_track" class="form-control" required >
    </div>

    <button type="submit" class="btn [{if $style eq 'desktop'}]btn-sm[{else}]btn-lg[{/if}] btn-info start_login">[{*oxmultilang ident="LOGIN"*}]Show order</button>
    <br/>
    <br/>
</form>

填写email和ordernr后。当我调试我得到我的氧化物时,我会重定向到一个空页面。我想先得到氧化物并在得到氧化物后重定向,这样我就可以转到我正在搜索的订单。

这两天我尝试了很多东西,但没有任何效果。

这就是我获取氧化物的功能

public function getoxtrckID()
{
    $sEMail = oxRegistry::getConfig()->getRequestParameter('email_track', true);
    $sONumber = oxRegistry::getConfig()->getRequestParameter('ordernr_track', true);
    $sArticleId = oxDb::getDb()->getOne("SELECT OXID FROM oxorder WHERE OXORDERNR = ? AND OXBILLEMAIL = ?", [$sONumber, $sEMail]);
    return $sArticleId;
}

我不擅长JS,所以只尝试了php,谁能给我一点帮助,非常感谢

【问题讨论】:

    标签: php forms smarty shop oxid


    【解决方案1】:

    您不需要实际的重定向,除非您想阻止访问者按 F5 并再次重新加载同一页面,这在此处不是必需的。
    在开始之前:您的变量 $sArticleId 包含一个订单 ID,为了使代码易于理解,您应该将其命名为 $sOrderId

    找到您的订单 ID 后,您还需要像这样加载订单数据:

    $oOrder = oxNew("oxorder");
    $oOrder->load($sOrderId);
    

    为了简单起见,您可以去掉隐藏的订单id字段,将加载订单数据的代码放入render()函数中,并将订单对象传递给视图(模板):

    public function render()
    {
      ... your render code ...
    
      $sEMail = oxRegistry::getConfig()->getRequestParameter('email_track', true);
      $sONumber = oxRegistry::getConfig()->getRequestParameter('ordernr_track', true);
      // if form was submitted, both variables will be set
      if($sEMail && $sONumber)
      {
        // finding order 
        $sOrderId = oxDb::getDb()->getOne("SELECT OXID FROM oxorder WHERE OXORDERNR = ? AND OXBILLEMAIL = ?", [$sONumber, $sEMail]);
    
        if($sOrderId) // order found -> loading order data
        {
          $oOrder = oxNew("oxorder");
          $oOrder->load($sOrderId) 
          $this->addTplParam('oOrder', $oOrder);
        }
        else // order not found, display error message
        {
          oxRegistry::get("oxUtilsView")->addErrorToDisplay('Order not found'); 
        }
      }
      return $sTempalteName;
    }
    

    在您的模板中,您将获得 oxOrder 对象的所有属性和方法:

    [{if $oOrder}]
      <h2>Your Order Data:</h2>
      [{$oOrder->oxorder__whateveryouwant->value }]
    [{/if}]
    

    【讨论】:

    • 感谢您的帮助和良好的解释,它终于工作了
    猜你喜欢
    • 1970-01-01
    • 2020-06-08
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 2022-01-16
    • 1970-01-01
    • 2017-09-02
    相关资源
    最近更新 更多