PDA

View Full Version : ارسال اطلاعات فرم



googoli
یک شنبه 17 اسفند 1393, 00:31 صبح
سلام
من یه چند تا سوال دارم با جواب چند گزینه ای مثلا
1- فردا به مدرسه می روید؟
گزینه 1 - بله
گزینه 2 - خیر
گزینه 3 - ممکن است
و الی اخر
که این فرم هر سری اطلاعات رو سابمیت می کنه و سوال بعدی رو نمایش میده
چطوری باید این فرم رو درست کنم که به مشکل بر نخورم؟

MMSHFE
یک شنبه 17 اسفند 1393, 09:14 صبح
کافیه یه CFormModel بسازین و فیلدها رو اینطوری داخلش معرفی کنید:

class QuizForm extends CFormModel
{
// define fields here as public
public $school;

public function rules()
{
return array(
array('school', 'in', 'range'=>array_keys($this->schoolOptions)),
);
}

public function attributeLabels()
{
return array(
'school'=>'فردا به مدرسه می روید؟',
);
}

public function getSchoolOptions()
{
return array(
'1'=>'بله',
'2'=>'خیر',
'3'=>'ممکن است',
);
}
}
حالا چون فرمتون چند مرحله ای هست، کافیه در هر مرحله یکی از این مقادیر رو بگیرین و توی مدل بگذارین و مدل رو با Yii::app()->user->setState توی سشن ذخیره کنید. توی هر مرحله هم وقتی اطلاعات پست شد، اول از توی سشن بخونید و توی متغیر بگذارین (با getState) و بعد مقدار جدید رو اضافه کنید و validate رو روی متغیر (مدل) صدا بزنید. اگه خطا نداشت، دوباره توی سشن بگذارین و کاربر رو به مرحله بعد بفرستین.

googoli
یک شنبه 17 اسفند 1393, 11:05 صبح
ممنون استاد
ولی من یه جوری انگار گنگ هستم هم فهمیدم مطلب شما رو هم نفهمیدم
ببینید من 2 تا جدول دارم که توی اولی سوال ها ذخیره شده که به گفته شما این سوال ها رو می تونم توی attributeLabels به صورت ارایه ای بریزم تا اینجا مشکلی نیست
اما قسمت دوم جواب ها هست که توی جدول دیگری ذخیره شده است که توی این مشکل دارم چون جواب ها همه به یک صورت نیست
با Yii::app()->user->setState مشکلی ندارم و فهمیدم
ولی نمی دونم فرستادن به مرحله بعد رو متوجه نشدم درست

googoli
یک شنبه 17 اسفند 1393, 23:13 عصر
من کار رو به این شکل پیش بردم


class QuizForm extends CFormModel
{

public function rules()
{
return array(
array('Q_id, score', 'numerical', 'integerOnly'=>true),
array('answer', 'length', 'max'=>255),
);
}

public function attributeLabels()
{
$question = array();
$t = Questions::model()->findAll();
foreach ($t as $k=>$v)
{
$question[$v->id]=$v->question;
}
return $question ;


}

}




public $id = 1;
public function actionQuiz()
{
$model=new QuizForm;
$modelans= new Answer;
$answer = Answer::model()->findAll('Q_id ='.$this->id);

if(isset($_POST['ajax']) && $_POST['ajax']==='Quiz-form')
{
echo 'post';
exit;
$this->id++ ;
$answer = Answer::model()->findAll('Q_id ='.$this->id);
$model->attributes=$_POST['QuizForm'];
if($this->id <7)
{
$this->render('Quiz',array(
'model'=>$model,
'answer'=>$answer,
'modelans'=>$modelans,
));
}
else
{
$this->redirect('test');
}
}
$this->render('Quiz',array(
'model'=>$model,
'answer'=>$answer,
'modelans'=>$modelans,
));
}






$form=$this->beginWidget('CActiveForm', array(
'id'=>'login-form',
'enableClientValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
),
));
echo $form->labelEx($model,$this->id).PHP_EOL.'<br/>';
$ans = array();
foreach ($answer as $key=>$value)
$ans[$value->id] = $value->answer;
echo $form->RadioButtonList($modelans, 'Q_id', $ans).PHP_EOL.'<br/>';

echo CHtml::submitButton('Submit');
$this->endWidget();

فقط مشکل اینجاست که فرم سابمیت نمیشه نمی دونم چرا؟
میشه راهنماییم کنید ؟

MMSHFE
دوشنبه 18 اسفند 1393, 07:41 صبح
ارتباط بین عناصر دیتابیستون رو نمیدونم. اگه میشه تیم ویور بدین. ضمناً چرا attributeLabels گذاشتین؟ چرا مقادیر رو دستی میخونید؟ کلاً فکر میکنم دارین اشتباه کار میکنین.

googoli
دوشنبه 18 اسفند 1393, 23:38 عصر
حق با شماست
من داشتم اشتباه می کردم باید از جدول پاسخ ها استفاده می کردم و کارها رو پیش می بردم
یک نگاهی به این لینک (http://www.yiiframework.com/forum/index.php/topic/50196-multi-step-form/) بندازید
بنظر من روش خوبی هست
ولی هر کار کردم نتونستم ازش استفاده کنم
نظر شما چی هست ؟
درباره این (http://www.yiiframework.com/extension/sformwizard)اکتنشن هم ببینید بکار میاد یا خیر؟
از این اکتنشن هم نتونستم استفاده کنم

MMSHFE
سه شنبه 19 اسفند 1393, 08:02 صبح
همون روش عادی هم جواب میده. درصورت امکان تیم ویور بدین ببینم مشکل چیه.