Magento 1.7.0.2:
我试图获得一个表单(在后端)上传一个文件(图片)Post到自己,如果不完整,或adminhtml控制器如果完成.我的 JavaScript验证工作正常,但是当/如果我的表单被POST,我被重定向到仪表板.我有一个表单键,我的url是用特殊的键创建的,但是我仍然无法通过POST获得.有人可以帮我吗
我试图获得一个表单(在后端)上传一个文件(图片)Post到自己,如果不完整,或adminhtml控制器如果完成.我的 JavaScript验证工作正常,但是当/如果我的表单被POST,我被重定向到仪表板.我有一个表单键,我的url是用特殊的键创建的,但是我仍然无法通过POST获得.有人可以帮我吗
phtml模板文件:
<script type="text/javascript"> function postSelf(){ form=document.getElementById('imgSel'); form.action='<?PHP Mage::helper("adminhtml")->getUrl("*/*/")?>'; form.submit(); } function validateForm(){ var name=document.forms["imgSel"]["iName"].value; var file=document.forms["imgSel"]["file_upload"].value; if (!name){ alert("You must have an Image Name!"); postSelf(); } else if (!file){ alert("You must have a File to upload"); postSelf(); } else{ form=document.getElementById('imgSel'); form.submit(); } } </script> <?PHP Mage::log(Mage::helper("adminhtml")->getUrl("*/*/"),null,‘layout.log’ );?> <h3 class="icon-head head-adminhtml-imagegrid">Add an Image:</h3> <form name="imgSel" id="imgSel" action="<?PHP Mage::helper("adminhtml")->getUrl("*/*/insert")?>" enctype="multipart/form-data" method="POST"> <!--Form key--> <input type="hidden" name="form_key" value="<? echo Mage::getSingleton('core/session')->getFormKey(); ?>" /> <?PHP Mage::log(Mage::getSingleton('core/session')->getFormKey(),‘layout.log’ );?> <label for="iName">Image Name:</label> <input type="text" name="iName"> <label for="style">Associated Style Name:</label> <select name="style"> <?PHP echo '<option value="-1">None</option>'; $styles = Mage::getModel('cartonplugin/cartonstyle')->getCollection(); foreach($styles as $style){ echo '<option value="'.$style->getId().'"'; echo '>'.$style->getData('style_name').'</option> '; } echo '</select><br />'; ?> <input type="hidden" name="MAX_FILE_SIZE" value="40" /> Upload Image: <input type="file" name="file_upload" /> <br> <!--<input type="submit" value="submit">--> <button onClick="validateForm()" class="UploadButton" >Upload</button> </form>
控制器:只有insertAction()函数用于此表单.其余的是用于处理任何已经上传的图像的gridview的东西.
<?PHP class Nationwide_Newcart_Adminhtml_IndexController extends Mage_Adminhtml_Controller_Action { protected function _initAction() { $this->loadLayout()->_setActiveMenu('igrid/set_time7') ->_addBreadcrumb('image Manager','image Manager'); return $this; } public function indexAction() { $this->loadLayout(); $this->renderLayout(); //var_dump(Mage::getSingleton('core/layout')->getUpdate()->getHandles()); } public function newAction() { $this->_forward('edit'); } public function editAction() { $stId = $this->getRequest()->getParam('id'); $model = Mage::getModel('newcart/imagemodel')->load($stId); if ($model->getId() || $stId == 0) { Mage::register('image_data',$model); $this->loadLayout(); $this->_setActiveMenu('igrid/set_time7'); $this->_addBreadcrumb('image Manager','image Manager'); $this->_addBreadcrumb('Image Description','Image Description'); $this->getLayout()->getBlock('head') ->setCanLoadExtJs(true); $this->_addContent($this->getLayout() ->createBlock('newcart/adminhtml_imagegrid_edit')) ->_addLeft($this->getLayout() ->createBlock('newcart/adminhtml_imagegrid_edit_tabs') ); $this->renderLayout(); } else { Mage::getSingleton('adminhtml/session') ->addError('That Image does not exist'); $this->_redirect('*/*/'); } } public function saveAction() { if ($this->getRequest()->getPost()) { try { $postData = $this->getRequest()->getPost(); $model = Mage::getModel(''); //Mage::log($this->getRequest()->getParam('id'),‘layout.log’ ); if( $this->getRequest()->getParam('id') <= 0 ) $model->setCreatedTime( Mage::getSingleton('core/date') ->gmtDate() ); $model //->addData($postData) //DO NOT! Includes a form key! ->setUpdateTime( Mage::getSingleton('core/date') ->gmtDate()) ->setId($this->getRequest()->getParam('id')); $model->setData('image_name',$postData['image_name']); $model->setData('style_name',$postData['style_name']); $model->save(); Mage::getSingleton('adminhtml/session') ->addSuccess('successfully saved'); Mage::getSingleton('adminhtml/session') ->settestData(false); $this->_redirect('*/*/'); return; } catch (Exception $e){ Mage::getSingleton('adminhtml/session') ->addError($e->getMessage()); Mage::getSingleton('adminhtml/session') ->settestData($this->getRequest() ->getPost() ); $this->_redirect('*/*/edit',array('id' => $this->getRequest() ->getParam('id'))); return; } } $this->_redirect('*/*/'); } public function deleteAction() { if($this->getRequest()->getParam('id') > 0) { try { $model = Mage::getModel('newcart/imagemodel'); $model->setId($this->getRequest() ->getParam('id')) ->delete(); Mage::getSingleton('adminhtml/session') ->addSuccess('successfully deleted'); $this->_redirect('*/*/'); } catch (Exception $e) { Mage::getSingleton('adminhtml/session') ->addError($e->getMessage()); $this->_redirect('*/*/edit',array('id' => $this->getRequest()->getParam('id'))); } } $this->_redirect('*/*/'); } public function insertAction(){ $postData = $this->getRequest()->getPost(); Mage::log($postData,‘layout.log’ ); //post checking if(empty($postData)){ } $this->_redirect('*/*/'); } }
解决方法
你需要检查几件事情:
>你在这里有回音:
action="<?PHP Mage::helper("adminhtml")->getUrl("*/*/insert")?>"
应该
action="<?PHP echo Mage::helper("adminhtml")->getUrl("*/*/insert")?>"
>确保您只使用正常的PHP标签(<?PHP?>).短标签被证明是不好的做法,所以改变
<input type="hidden" name="form_key" value="<? echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
至
<input type="hidden" name="form_key" value="<?PHP echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
与此同时,请确保您的浏览器中使用浏览源功能在HTML中正确填充所有数据.