Delete & Gridview

[right]سلام دوستان

من در یک

gridview

از گزینه های

delete & update

استفاده کردم. و زمانیکه روی دکمه

delete

کلیک میکنم

id

سطر مورد نظر به اکشن مربوطه فرستاده میشود. و در همان اکشن با استفاده از

$_GET[‘id’]

در یک کوئری سطر مورد نظر پیدا و سپس حذف میشود.

آیا راه دیگری برای فرستادن

id

به

action

هست که از امنیت بالاتری برخوردار باشه؟؟

این هم قسمتی از کدها:

[/right]

gridview:


                          array(

            'class'=>'CButtonColumn',

                     'template'=>'{delete}{update}',

                                

                     'buttons'=>array(

                     'delete'=>array(

                     'url'=>'Yii::app()->createUrl("newsmanage/delete", array("id"=>$data->id))',

                     'deleteConfirmation'=>'function(){confirm("are you sure delete?");}',

                        ),

action:




$newsDelete=  News::model()->find("id=:id",array(":id"=>$_GET['id']));

$newsDelete->delete();



مرسی

[rtl][font="Tahoma"]مشخص نکردید چه چیزی باعث میشه که این کد به نظر شما نا امن جلوه کنه![/font][/rtl]

[right]

سلام

دربین فیلترهایی که روی کنترلرها اعمال میشه

‘postOnly + delete’,

داریم.اما در اینجا ما با متد

GET

کار میکنیم و نمیتونیم این فیلتر رو اعمال کنیم. سوالم این هست که چه طوری میتونیم با متد

POST

شناسه مربوط به رکوردی رو که باید حذف بشه رو بفرستیم؟؟[/right]

[rtl][font="Tahoma"]سلام

اگه رفرنس رو بخونید شاید امکان سوییچ کردن به Post به جای استفاده از Get وجود داشته باشه.

اما یک نکته مهم در خصوص نگرانی شما

اگه کسی بخواد انگولک کنه، مقادیر داخل Post رو هم می تونه دستکاری کنه

در واقع اگه الان هم با Get ارسال میشه به خاطراینه که می خواد یک اکشن به نام delete رو اجرا کنه که کاملا منطقی هستش

و شما اگه نمی خوای هر خبری امکان پاک شدن داشته باشه، باید قبل از انجام delete چک کنی

که ایا این کاربر مجاز به پاک کردن این خبر هست یا نه![/font][/rtl]

[right]

سلام

برای حذف کردن در

gridView

به طور پیش فرض در

Yii

ajax از

استفاده می شود

که با متد

post

می باشد

چرا

ajax

رو غیرفعال کردی ؟

برای امنیت هم

csrf

[indent][/indent]رو فعال کن

[/right]

[right]سلام

خیلی ممنون از راهنمایی تون ، اما امکان داره بگید این کار رو چهطور انجام بدم؟

مرسی[/right]

[font="Tahoma"][right]دوست عزیز برای ارسال ای جکس آی دی می تونی ابتدا آی دی رکوردی که توسط کاربر انتخاب شده رو از طریق جی کوئری به دست بیاری و بعد از طریق خود جی کوئری ارسال کنی … مثل کد زیر


jQuery.ajax({

                  	   		"type":"POST",

                  	   		"data":{"SelectedItem":SelectedItemListBox},

                  	   		"success":  callback, 

        				"error":error,

                  	   		"url":"/pacs/index.php?r=reports/delete"

                  	   		,"cache":false

                  	  	});

در کد بالا من آی دی رکوردم رو فرستادم برای اکشن delete

و حالا کافیه بگی cgridview

رفرش بشه و که برای اون می تونی در تابع callback

که توی کد بالا هست و دستور زیر رو قرار بدی


function callback(providerdata,status){

	        $("#yw2").yiiGridView.update("yw2");      

	}

[/right]

[right]که yw2

همون آی دی gridview هستش[/right]

[center]ببخشید دیگه تازه کارم ببخشید اگه مشکلی داشت… :D [/center][/font]

[right][rtl]

[font="Tahoma"]هیچ وقت از idهای به شکل yw… استفاده نکنید چون به صورت خودکار توسط فریم ورک تولید میشه و ممکنه با داشتن چند تا gridview توی یک صفحه و یا به روز کردن فریم ورک این کدهای javascript از کار بیفتن[/font]

[/rtl]

[/right]