2014-10-08 193 views
0

我正在使用zend中的忘记密码模块。我想要将'memcode'用户发送到控制器,以便我可以传递查询以重置密码。在zend中将数据从视图传递到控制器

ForgotController.php

public function changepasswordAction() 
    { 
    $post = $this->request->getPost(); 
    $dbAdapter=$this->getServiceLocator()->get('Zend\Db\Adapter\Adapter'); 
    $form = new ForgotForm($dbAdapter); 
    $project = new Projects(); 
    $id=$this->params()->fromQuery('id'); 
    $viewModel = new ViewModel(array('form' =>$form)); 
    return $viewModel; 

    } 



     public function resetAction() 
     { 
     $pswd = $this->getRequest()->getPost('password'); 
     $id=$this->params()->fromRoute('id',0); 
     echo $id; 
     $sql="UPDATE projects set password = '".$pswd."' where memcode = '".$id."'"; 
     $statement = $dbAdapter->query($sql); 
     $result = $statement->execute(); 
     } 

视图代码:changepassword.phtml

echo $_GET['id']; 
$form = $this->form; 
$form->setAttribute('action', $this->url(NULL,array('controller'=>'Forgot', 'action' =>'reset','id'=>$_GET['id']))); 
$form->setAttribute('method', 'post'); 
$form->prepare(); 
echo $this->form()->openTag($form);?> 
<h4>Set new password</h4> 
<p> Welcome! <?php //echo $this->user_email; ?> </p> 
<table> 
<tr> 
<td><dt><?php echo $this->formLabel($form->get('password')); ?></dt> 
<dd><?php 
echo $this->formElement($form->get('password')); 
echo $this->formElementErrors($form->get('password')); 
?></dd></td></tr> 

<tr> 
<td><dt><?php echo $this->formLabel($form->get('confirm_password')); ?></dt> 
<dd><?php 
echo $this->formElement($form->get('confirm_password')); 
echo $this->formElementErrors($form->get('confirm_password')); 
?></dd></td></tr> 

<tr> 
<td><dt><?php echo $this->formElement($form->get('submit')); 
echo $this->formElementErrors($form->get('submit')); 
?></dd></td></tr> 

</table> 
</dd> 
</section> 

如何通过我通过“$ _GET [ '身份证']到控制器resetAction function.Now获得ID我得到O作为它的值?

+0

$ _GET不是你应该在ZF2中使用过的东西。更新密码的方式非常危险,因此我建议您检查一下密码安全性。现在的情况是,你会受到SQL注入的危害。 – Sam 2014-10-08 06:20:11

回答

0

不要直接使用$ _GET当使用ZF2时,您可以在您的changePasswordAction中执行此操作:

$viewModel = new ViewModel(array('form' => $form, 'id' => $id)); 

,然后在changepassword.phtml就可以直接使用这个变量作为$this->id

另外要注意您的代码:你要小心这样的SQL这可能是受到SQL注入攻击...

+0

但是如何在resetAction()中获取此id,以便我可以触发查询来重置密码 – prachi 2014-10-08 06:29:18

+0

您必须替换行中的$ _GET ['id']'$ form-> setAttribute('action',$ this-> url(NULL,array('controller'=>'Forgot','action'=>'reset','id'=> $ this-> id)));'然后'$ id = $ this - > params() - > fromRoute('id',0);'会正常工作... – 2014-10-08 13:05:34

+0

仍然我将id的值作为0 – prachi 2014-10-09 10:17:42

相关问题