一个点击链接直接修改相关数据库字段值的问题

弄了好久,找了好些相关的帮助文件和api,不过还是没解决,只能再来请教强了, ;D

是这样,我需要点击一个链接,然后将数据库里面其中一个字段的值更新。链接代码如下:

<?php echo CHtml::link('接受订单',array('orderacc','id'=>$model->orderId)); ?>

action部分代码

 public function actionOrderacc()


    {


         $orderDetail=Naming::model()->findByAttributes(array('orderId'=>$_GET['id']));


        //print_r($orderDetail);


        $orderDetail->orderstatus=2;


        $orderDetail->save(); 


        $this->redirect(array('user/orderlist'));


        $this->render('orderacc',array('orderDetail'=>$orderDetail));


    }

view文件为空的php。

这样操作是不行的,尝试用linkbutton,但是连delete也不起作用(范例admin里面拷贝做相应修改的),所以放弃了。

虚心请教。

不是太明白你碰到的问题。你这段代码应该可以工作啊。有两点需要注意的:

  1. 你这里的render()不起作用的,因为redirect后就退出了。

  2. 你的orderacc是通过GET方式被调用的,这样不是特别好。最好是通过POST方式,因为这个动作要修改数据。你可以用linkButton。

因为例子里面通过CHtml::link传递的参数你用了GET方式,所以我以为Yii就是设定成这个方式来获取url的参数传递的。

另外是关于linkButton的格式的,

<?php echo CHtml::linkButton(‘Delete’,array(

        'submit'=>'',

        'params'=>array('command'=>'delete','id'=>$model->usernum),

        'confirm'=>"Are you sure to delete #{$model->usernum}?")); ?>

以上代码是自带的CRUD例子中,delete按钮的代码,那么如果我需要做的是更新orderid=1的记录中的status为2,应该如何来写呢?

谢谢。

另外 :) 我把上面代码redirect放到view里面代码可以运行了。

你应该需要这些:



<?php echo CHtml::linkButton('接受订单',array(


           'submit'=>array('orderacc'),


           'params'=>array('id'=>$model->orderId))); ?>


在orderacc动作里你可以通过$_POST['id']获得id值。



<?php


public function actionOrderacc()


 {


         $orderDetail=Naming::model()->findByAttributes(array('orderId'=>$_POST['id']));


        //print_r($orderDetail);


        $orderDetail->orderstatus=2;


        $orderDetail->save();


        $this->redirect(array('user/orderlist'));


}


再次感谢。:) :D

public function loaduser($id=null)


	{


		if($this->_user===null)


		{


			if($id!==null || isset($_GET['id']))


				$this->_user=user::model()->findbyPk($id!==null ? $id : $_GET['id']);


			if($this->_user===null)


				throw new CHttpException(500,'The requested user does not exist.');


		}


		return $this->_user;


	}

这是例子中的获取用户信息的函数,这里怎么不用post而用get呢?同样是通过url传递的id

<?php echo CHtml::link('接受订单',array('orderacc','id'=>$model->orderId)); ?>
是不是通过上面的链接只能用$_GET来获取传递的参数呢?

因为我把刚才的GET改成POST之后就出现了Undefined index: id错误,错误的地方就是$orderDetail=Naming::model()->findByAttributes(array('orderId'=>$_POST['id']));

是的。link产生的是一条普通链接,参数都在URL里,所以是GET类型的。

而linkButton是通过javascript来提交表单的,它是通过POST方式传递参数的。