好像是个bug 刷新页面就自动保存了

内容是访问announce/edit/id/8/type/edit

public function actionEdit()

{


	$id=Yii::app()->request->getParam('id');


	$type=Yii::app()->request->getParam('type');


	


	$params=array();


	$params['id']=isset($_REQUEST['id'])?$_REQUEST['id']:null;


	$params['content']=isset($_REQUEST['content'])? $_REQUEST['content']:null;


	$params['subject']=isset($_REQUEST['subject'])? $_REQUEST['subject']:null;


	$params['sort']=isset($_REQUEST['sort'])?$_REQUEST['sort']:null;


	


	$params['link']=isset($_REQUEST['link'])?$_REQUEST['link']:null;


	if($type=='edit')


	{


		$model=new AnnounceBehaviors();


		$result=$model->getDetail($params['id']);


		$this->render('newedit',array('result'=>$result));


		


	}


	else 


	{


		$model=new AnnounceBehaviors();


		$model->update($params);


		$this->redirect(array('announce/detail','id'=>$params['id']));


	}


	


}

然后获取到对应的信息呈现出来,但是点刷新就自动保存了。展现出来的信息就是保存后的新信息,而且保存的是上面params里面的值。保存也保存嘛,但是只是单纯的保存,没有出现跳转到detail这个里面,。YII框架源码不确定是什么版本。最新稳定版本地测试正常,公司服务器上面出的错。

但是删除else 里面的代码。然后刷新就正常显示数据。没有出现保存。

你else 里面的东西本就不安全 你为啥不按 gii生成的逻辑走

对于增删改 这三种操作都要走post的 你里面必须判断是否是post操作 然后才进行save或者delete

这个是编程常识: 所有的请求分两种 请求和命令 请求用get方法 是幂等的 命令是会产生某种持久化变化的请求(增删改 都会对某个表产生持久化影响)并且一般不是幂等的(多次请求返还的结果不一样)用的http方法也不一样(post put delete)

这种常识就是CGridView 为什么delete是post操作的原因 还有你的操作中除了没判断是post操作 竟越过save操作直接update 这样验证规则就避开了 很不安全

get操作(从浏览器输入url地址)就可以导致你数据的保存的 :lol:

你能说得明白点么。

我上面是获取对应的记录是用announce::model()->findbyPk();为什么要save呢?