【问题标题】:database getting updated wrong from custom module form after validation数据库在验证后从自定义模块表单中更新错误
【发布时间】:2015-11-10 10:18:34
【问题描述】:

您好,我正在 Magento 中处理自定义模块表单。我使用了 Magento 提供的默认验证。

这是我的表单并将表单 ID 传递给 varienform

<form id="my-custom-form" action=""  method="post">
  <label> Form</label>

  <label>First Name</label>
  <strong>:</strong>
  <input class="input-text required-entry" type="text" name="fname" maxlength="20"><br>
  <label>Last Name</label>
  <strong>:</strong>
  <input class="input-text required-entry" type="text" name="lname" maxlength="20"><br>
  <label>Address</label>
  <strong>:</strong>
  <textarea class="required-entry" placeholder="Type your address" name="address"></textarea><br>
  <label>State</label>
  <strong>:</strong>
  <input class="required-entry" type="text" maxlength="20" name="state"><br>
  <label>City</label>
  <strong>:</strong>
  <input class="required-entry" type="text" maxlength="20" name="city"><br>
  <label>Mobile No</label>
  <strong>:</strong>
  <input class="required-entry" type="number" maxlength="10" name="mobileno">    <br>
  <input type="submit" name="submit" value="submit">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  <input type="button" name="Cancel" value="cancel">
</form>

<script type="text/javascript">
  //< ![CDATA[
    var customForm = new VarienForm('my-custom-form');
  //]]>
</script>

我已经在 indexcontroller 中添加了 db insert

<?php
class MyCustom_Helloworld_IndexController extends     Mage_Core_Controller_Front_Action
{

  /*
  * this method privides default action.
  */
  public function indexAction()
  {
  $param = $this->getRequest()->getParams();

  $firstname = $param['fname'];
  $lastname = $param['lname'];
  $address = $param['address'];
  $state = $param['state'];
  $city = $param['city'];
  $mobile = $param['mobileno'];

  $model = Mage::getModel('helloworld/helloworld');
  // $model->setTitle($title);
  $model->setFirstname($firstname);
  $model->setLastname($lastname);
  $model->setAddress($address);
  $model->setState($state);
  $model->setCity($city); 
  $model->setMobileno($mobile); 
  $model->save();   

  /*
  * Initialization of Mage_Core_Model_Layout model
  */
  $this->loadLayout();
  /*
  * Building page according to layout confuration
  */
  $this->renderLayout();

  }
}

当我运行我的模块时,表单会出现,当我不添加任何值并单击提交时,会显示验证错误,因此验证没有问题,但是当我签入 db 时,表格会更新为空值。可能是什么原因?

【问题讨论】:

    标签: forms validation magento module


    【解决方案1】:

    您可以尝试以下方式进行调试:

    1) 向您的表单添加操作并在控制器中执行回显退出,这可以确认数据是否到达您的控制器中。

    2) 一旦控制器可以访问,print_r $param。此外,您应该始终添加服务器端验证,如下所示:

    if(in_array('', $param)){ return $this->_redirect('your handler');}
    

    3) 使用上述步骤 2 在您的控制器中通过正确的键值对到达数据后,检查您的模型是否在模型文件夹中正确初始化。

    4) 检查您的列名是否正确写入 set 方法。

    5) 最后但可能是主要问题,从后端清除所有 magento 缓存并尝试再次保存数据。

    【讨论】:

    • 我是 magento 新手 .. 我是否需要提供更多我创建的文件才能更具体地说明我可以在哪里进行更改?
    • 哦,你能不能去后端,去系统->缓存管理器,然后点击所有按钮“刷新磁缓存”和“刷新magento存储”,然后再试一次。如果没有,我们将进一步检查。
    • 你能做 echo '
      '; print_r($param);退出;在你的控制器中检查数据是否正确?
    • 运行时显示一个空数组..我在公共函数 indexAction(){} 中添加了
    【解决方案2】:

    这将阻止您添加空值。

    if($this->getRequest()->getParams()) {
        $param = $this->getRequest()->getParams();
    
    
        $firstname = $param['fname'];
        $lastname = $param['lname'];
        $address = $param['address'];
        $state = $param['state'];
        $city = $param['city'];
        $mobile = $param['mobileno'];
    
    
    
        $model = Mage::getModel('helloworld/helloworld');
        // $model->setTitle($title);
        $model->setFirstname($firstname);
        $model->setLastname($lastname);
        $model->setAddress($address);
        $model->setState($state);
        $model->setCity($city); 
        $model->setMobileno($mobile); 
        $model->save(); 
        $this->_redirectReferer();
        }else {
          /*
        * Initialization of Mage_Core_Model_Layout model
        */
        $this->loadLayout();
        /*
        * Building page according to layout confuration
        */
        $this->renderLayout();
        }
    

    【讨论】:

    • 这是有效的,但是否有可能在提交后阻止重定向到主页
    • 您自己添加重定向只需添加重定向 $this->_redirect('youurl');如果您不想重定向,只需删除此 $this->_redirectReferer();
    猜你喜欢
    • 2020-07-25
    • 2019-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多