• 11-01-2014, 22:03:52
    #1
    Arkadaşlar yeni kayıt oluşturmak istiyorum bir türlü yapamadım.

    Protected/views/öğrenci
    
    <h1> Yeni Öğrenci </h1>
    <?php echo CHtml::form(); ?>
    <table>
        <tr>
            <td>
                Adi   
            </td>
            <td>
                <?php echo CHtml::textField('adi', '',array ('size'=>'50')); ?>
            </td>
        </tr>
        <tr>
            <td>
                Soyadi
            </td>
            <td>
                <?php echo CHtml::textField('soyadi', ''); ?>
            </td>
        </tr>
        <tr>
            <td>
                Tc
            </td>
            <td>
                <?php echo CHtml::textField('tc', ''); ?>
            </td>
        </tr>
        <tr>
            <td>
                Cinsiyet
            </td>
            <td>
                <?php echo CHtml::dropDownList('cinsiyet', 0, array(
                    '0'=>'',
                    '1'=>'Erkek',
                    '2'=>'Kadın',
                )); ?>
            </td>
        </tr>
        <tr>
            <td>
                Adres
            </td>
            <td>
                <?php echo CHtml::textArea('adres', '',array('rows'=>'4','cols'=>'50')); ?>
            </td>
        </tr>
        <tr>
            <td>
                ABD
            </td>
            <td>
                <?php echo CHtml::dropDownList('abd_id', '', $ana); ?>
            </td>
        </tr>
        <tr>
            <Td colspan="2">
                <?php echo CHtml::submitButton('Kaydet'); ?>
            </td>
            
        </tr>
    </table>
    <?php echo CHtml::endForm(); ?>
    Yeni kayıt için :

            // yeni kayıt için 
               public function actionYeni()
               {
                   //post değişkenin içini görmek - Trace
                   echo Yii::trace(CVarDumper::dumpAsString($_POST),'vardump');
                   if (!empty($_POST['adi'])){
                       $model = new ogr_ogrenci ();
                       $model->adi = $_POST ['adi'];
                       $model->soyadi = $_POST ['soyadi'];
                       $model->tc = $_POST ['tc'];
                       $model->adres = $_POST ['adres'];
                       $model->abd_id = $_POST ['abd_id'];
                       $model->save();
                       //kayıtsayfasına gitmesin
                       $this->redirect('index');
                       //başka doyayı göstermek için
                       //$this->render('basari');
                   }
                   else
                   {
                   // aray oluşturdu
                    $abdler = Abd::model()->findAll();
                    // list datası oluşturuluyor
                    $ana = CHtml::listData($abdler, 'id', 'adi');                
                    $this->render('yeni',array(
                        'ana'=>$ana,
                    ));
                   }
               }
    Hatam nerede arkadaşlar ?
  • 12-01-2014, 12:40:45
    #2
    Öncelikle modeliniz için aktif bir form oluşturmanızı öneririm. Aktaracağınız öğrenci modeline ait formu aşağıdaki şekilde oluşturmanız, hata yapma ihtimalinizi azaltır ve yaptığınız hatayı görmenizi sağlar.

    public function actionYeni()
    {
      $model = new ogr_ogrenci ();
      .
      .
      .
      $this->render('yeni',array('ana'=>$ana, 'model' => $model ));
    <?= CHtml::errorSummary($model); ?>
    .
    .
    .
    <tr>
      <td><?= CHtml::activeLabel($model,'adi'); ?></td>
      <td><?= CHtml::activeTextField($model,'adi') ?></td>
    </tr>
    İkinci olarak modelinizi her halükarda geçerli bir model olarak farz ediyorsunuz. Bu da eğer modelinizde bir hata olsa da ve kaydetmese de sayfayı yönlendireceği ve kullanıcıya, model üzerinde oluşacak olan hataları göstermeyeceği anlamına geliyor.

    if($model->save())
      $this->redirect('index');
    Lakin daha ayrıntılı tahminlerde bulunmak için verdiğiniz kodlar yeterli değil. Eğer POST içindeki değişkenlerin geçerli olduğundan eminseniz modelinizdeki kuralları tekrar gözden geçirmeniz gerekli.
  • 12-01-2014, 13:13:56
    #3
    Çok teşekür ederim