Menyimpan Data Dari Radio Button

misi numpang nanya.

misal ada 10 pertanyaan, trs di setiap pertanyaan ada 3 pilihan jawaban a b c pake radio button…

itu radio button menampilkannya pakai perulangan gini :

for ($n=1; $n<4; $n++) {

$tampil= CHtml::radioButton($jk, FALSE, array(

'name'=&gt;&#036;n, 'uncheckValue'=&gt;null	));

while($r2=mysql_fetch_array($hasil2)) {

echo &quot;&lt;br&gt;&quot;, &#036;tampil, &#036;r2['jawaban']; 


}}

gimana ya biar tahu jawaban yang dipilih yg mana?

misal milih jawaban a, maka nilai a= a+1, klo milih jawaban b, maka nilai b= b+1, c juga,

jadi di akhir kita tahu jawaban a b dan c masing2 berapa jumlahnya…

mohon bantuannya yaa… tks

Ini 10 pertanyaannya digabung di 1 halaman ato ditaruh di 10 halaman terpisah (model form wizard)? Kenapa gak pake CActiveForm dan radioButtonList, gan?




$form=$this->beginWidget('CActiveForm', array(

   'id'=>'question-form',

   'enableAjaxValidation'=>false,

)); 


echo $form->labelEx($model,'question1');

echo $form->radioButtonList($model, 'question1', $model->getOptions());


$this->endWidget();



Nanti di controller kan nilai jawaban yang dipilih bisa langsung dipake (dengan catatan rules untuk atribut-atribut jawaban sudah didefinisikan di model), ya?

Pertanyaannya digabung di 1 halaman…

rules nya isinya apa aja ya?

terus yang getOption itu maksudnya apa yaa? :slight_smile:

Isinya itu atribut2 yang bakal dimasukkan melalui form. Coba liat2 dulu fungsi rules() di model2 yang sudah ada (dalam direktori ‘protected/models’) aja, gan.

Buat menampilkan pilihan jawabannya, supaya gak usah nulis berulang-ulang. :D Agan bisa buat seperti ini di model:




public function getOptions()

{

    return array(

       'A'=>'A',

       'B'=>'B',

       'C'=>'C',

       ... (dst.)

    );

}



Sudah saya coba, dari View kan mengirimkan variabel $n(seperti yg saya tulis di kode di atas), kan $n itu array 1,2,3, di model udah saya buat juga public $n, tapi ada eror kayak gini :

Property "MulaitesForm.1" is not defined.

Gimana ya biar model bisa menerima array??

Kenapa pake array, gan? Apakah data dan jumlah pertanyaannya itu dinamis?

Kalau jumlah pertanyaannya statis, ane pikir bisa dibikin kayak gini:




<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(

   'id'=>'question-form',

   'enableAjaxValidation'=>false,

)); ?>


   <?php for ($n=1; $n<=10; $n++):  ?>

      <?php $attribute='q' .$n;  ?>

      <div class="row">

         <?php echo $form->labelEx($model, $attribute); ?>

         <?php echo $form->radioButtonList($model, $attribute, $model->getOptions()); ?>

         <?php echo $form->error($model, $attribute); ?>

      </div>

   <?php endfor; ?>


<?php $this->endWidget(); ?>

</div><!-- form -->



Nanti di model tinggal ditambahkan ke rules:




public function rules()

{

    return array(

       array('q1,q2,q3, dst. ...', 'required'),

    );

}



Ane belom tes kode di atas tapi kurang lebih idenya seperti itu. :)

oh ya sudah berhasil,terima kasih.

setelah radio button ada A, B, C…

bagaimana cara membuat supaya setelah radio button ada pilihan jawaban yang diambil dari database?

setelah saya coba-coba, yg data dari database tampilnya setelah 3 radio button, baru pilihan jawaban, seperti ini:

bagaimana agar pilihan jawaban dari databse muncul di sebelah kanan masing2 radio button?

terima kasih…

Bagian $model->getOptions() di formnya tinggal dirubah dengan query data dari database:


echo $form->radioButtonList($model, $attribute, masukkan method untuk query data di sini);

Mungkin bisa liat di sini atau sini.

method getOption di model gini bukan ya?

di tabel jawab ada kolom id_kategori yang saya isi 1 2 3 untuk pilihan jawaban A B C.

tapi yang tampil malah "Resource id #55", bukan pilihan jawabannya…

public function getOptions()

{ for($n=0; $n<10; $n++) {

$hasil2 = mysql_query("SELECT * FROM jawab where id_kategori=$n");

while($r2=mysql_fetch_array($hasil2)) {

$r2[‘jawaban’]; }

    return array(


   '1'=&gt;&#036;hasil2,


   '2'=&gt;'B',


   '3'=&gt;'C',


);

}}

Jujur ane kurang paham tabel Jawab yang agan bikin kaya gimana. Tapi kalau ane jadi agan, ane bakal memanfaatkan Active Record untuk mengakses datanya. Mungkin kurang lebih kaya gini (pake listData() dan findAll() di method getOptions() punya agan).

findAll nya udah ada di COntroler :

$data2= Jawab::model()->findAll();

di tabel Jawab tu ada kolom id_kategori dan jawaban

Sebelumnya, pake radio button yg kayak gini udah berhasil tampil :




for($n=1; $n<10; $n++) {

$hasil2 = mysql_query("SELECT * FROM jawab where id_kategori=$n");

$tampil= CHtml::radioButton($n, FALSE, array('name'=>$n, 'uncheckValue'=>null ));

while($r2=mysql_fetch_array($hasil2)) {

[b] echo "<br>", $tampil, $r2['jawaban'];[/b] 	}



yang saya bingungkan, bagaimana cara mengetahui button mana yg di klik user?Apakah A, B, atau C…

Kenapa di controller, gan? Bukannya method getOptions() itu ada di model?

Kalo atributnya udah dimasukkan ke rules (seperti contoh kode ane di atas), jawaban yang dipilih user bisa langsung diakses di controller, seperti ini (sekedar contoh saja, ya):




public function actionCreate()

{

    $model = new Question;

    if (isset($_POST['Question']))

    {

        // nilai atribut diset di sini

        $model->attributes = $_POST['Question'];

        

        // cek nilai atribut yang sudah diset

        var_dump($model->q1, $model->q2);


	if ($model->save())

	   $this->redirect(array('view', 'id'=>$model->id));

    }


    $this->render('create', array(

       'model'=>$model,

    ));

}



Atau kalau agan mau melakukan kalkulasi jawaban di model juga bisa. Tinggal buat fungsi tambahan saja.

Kalo pertanyaan nya di tiap halaman gmn carany ya gan, jadi setiap klik salah satu jwaban, otomatis tampil ke halaman pertanyaan berikut nya,

Mohon pencerahaan ny agan2, Thx

Bisa dibikin manual, tapi kalo ane jadi agan, ane bakal coba ekstensi yang ini dulu.