Formu Post Etmeden Girilen Değerin Daha Önce Kaydolup Olmadığını Ajax Ile Nasıl Kontrol Edebiliriz

Arkadaşlar merhabalar. Uygulamamda yer alan üye formunda üye no kısmı mevcut ve değer manuel olarak giriliyor. Bu alan veri tabanında benzersiz kimliğe sahip. Aynı üye numarası ile kaydolmaya çalışıldığında hata veriyor sistem. Ben şu şekilde bir şey yapmak istiyorum. Formu post etmeden önce girilen üye numarasının veritabında mevcut olup olmadığını kontrol ettirmek istiyorum ajax yöntemiyle veya sizin önerdiğiniz başka bir yol varsa o şekilde. Eğer aynı üye no daha önce eklenmişse bunu kullanıcıya uyarı mesajı olarak göstermek istiyorum. Nasıl yaparım acaba? Yol gösterirseniz sevinirim. İyi çalışmalar.

üye no girildikten sonra onblur ile ajax i çalıştırıp kontrol yaparsın. submit butonunuda buna göre enable disable edersin ve uyarı mesajını verirsin

Merhabalar @Umut Gundogdu ilgin için teşekürler. Yii’de yeni olduğum için ve özellikle söz diziminini yeni öğrendiğim için kodla örneklendirmen mümkün mü acaca.

Her ne kadar ajaxla üye no kontrolü yapılsa bile, insert işlemi yapılmadan önce mutlaka tekrar kontorolünün yapılması gerekir.

Konsolu tekil kullanıcı kullanacaksa sorun yok tabi ama birden fazla kişinin aynı anda üye create etme ihtimali varsa üye numaralarında çakışma olabilir.

Konsolu tekil kullanıcı kullanacak ama her ihtimale karşı aynı üye no ile üye yapılmaya çalışılmasının önüne geçmek istiyorum.

O zaman sana tavsiyem ajax işine hiç girme.

postunu yap… aynı üye no varsa save işlemini yapma… statik bir error ekle. form dolu olarak (son girilen değerlerle) yeniden ekrana gelecektir.

örneğin




if(isset($_POST['members'])){

  $model = new Members();

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


  $check = Members::model()->findbyAttributes(array('memberId'=>$model->memberId));

  if($check){

      $this->addError('memberId', 'Bu üye numarası daha önceden başka bir üyeye verilmiş...')

  }

  else{

      $model->save();

  }


}



Yukarıdaki yapıyı kodlarıma uyguladım. Ancak hata veriyor sanırım bir fonksiyon oluşturmak gerekiyor. Aldığım hata şu şekilde


UyeController and its behaviors do not have a method or closure named "addError".




$this->addError('memberId', 'Bu üye numarası daha önceden başka bir üyeye verilmiş...')



yerine




$model->addError('memberId', 'Bu üye numarası daha önceden başka bir üyeye verilmiş...')



deneyebilirsin…

İlgin için teşekkürler. Yukarıdaki ifadeyi değiştirdim. Hata vermiyor artık ancak bu defada aynı üye numarasıyla üye kaydı yapmaya çalışıyorum formu post ediyorum ama bembeyaz bir sayfa çıkıyor herhangi bir şey yok ekranda.

action codelarını yapıştırır mısın?


	public function actionEkle()

	{


        $uyeler = new Uyeler ; // uyeler modelimizi dahil ettik

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

        {

           /*echo '<pre>';

            var_dump($_POST);

            exit;*/

            // isset ile formdan gelen verileri kontrol ediyoruz

            $uyeler->uye_id = $_POST['uye_id'];

            $uyeler->adi = $_POST['adi'];

            $uyeler->soyadi = $_POST['soyadi'];

            $uyeler->dogum_yeri = $_POST['dogum_yeri'];

            $uyeler->dogum_tarihi = $_POST['dogum_tarihi'];

            $uyeler->nufus_ili = $_POST['Iller']['ad'];

            $uyeler->nufus_ilcesi = $_POST['Ilceler'];

            $uyeler->anne_adi = $_POST['anne_adi'];

            $uyeler->baba_adi = $_POST['baba_adi'];

            $uyeler->tel = $_POST['tel'];

            $uyeler->e_posta = $_POST['e_posta'];

            $uyeler->kan_grubu = $_POST['kan_grubu'];

            $uyeler->cinsiyet = $_POST['cinsiyet'];

            $uyeler->adres = $_POST['adres'];

            $uyeler->adres_ili = $_POST['Iller']['ilID'];

            $uyeler->adres_ilcesi = $_POST['adresIlceler'];

            $uyeler->uye_gorevi = $_POST['uye_gorevi'];

            $uyeler->uye_kayit_tarihi = $_POST['uye_kayit_tarihi'];

            $uyeler->uye_durumu = $_POST['uye_durumu'];


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

            {

                $uyeler->attributes = $_POST['uye_id'];

                $kontrol=Uyeler::model()->findAllByAttributes(array('uye_id'=> $uyeler->uye_id));


                if ($kontrol)

                {

                    $uyeler->addError('uye_id', 'Bu üye numarası daha önceden başka bir üyeye verilmiş...');

                }


                else {





                    if($uyeler->save(true))

                    {

                        // üye kaydı başarılıysa

                        $this->render('mesaj',Yii::app()->user->setFlash('success', "Üye Başarı ile eklendi."));




                    }


                    else

                    {

                        $this->render('mesaj',Yii::app()->user->setFlash('error', "Hata! Üye Kaydı yapılamadı."));




                    }

                }

            }





        }


        else


        {


            $iller = new Iller();

            $this->render('ekle', array('iller'=>$iller));


        }


	}

Action 'a baktığımda işi epey uzattığını görüyorum. Fazla vaktim olmadığı için hızlıca bir göz atma fırsatım oldu. bu akış ile eğer save işlemi yapılmazsa yeni render işleminde form boş gelecek ve değerler yeniden doldurulmak zorunda kalınacak…

view’inide rica etsem :)


ekle.php


<?php

/* @var $this UyelerController */

/* @var $model Uyeler */


?>


<?php

echo "<div style='width:120px; float: left'>";

$chtml=new CHtml;

echo $chtml::beginForm(array('uye/ekle'),'post');

echo "Üye No:";

echo "<br/>";

echo $chtml::textField('uye_id','',array(

    'ajax' => array(

        'type'=>'POST',

        'url'=>CController::createUrl('Uyenokontrol'),

        'data'=> array('uye_no'=>'js:this.value'),

        'update'=>'#uye_no_kontrol',




    )

));


echo "<br/>";

echo "Adı:";echo "<br/>";

echo $chtml::textField ('adi');

echo "<br/>";

echo "Soyadı:";

echo "<br/>";

echo $chtml::textField ('soyadi');

echo "<br/>";

echo "Doğum Yeri";

echo "<br/>";

echo $chtml::textField ('dogum_yeri');

echo "<br/>";

echo "Doğum Tarihi:";

echo "<br/>";

// tarih seçmek için

$this->widget('zii.widgets.jui.CJuiDatePicker',array(

    'name'=>'dogum_tarihi',

    'language' => 'tr',

    'value'=>date('Y-m-d'),

    // additional javascript options for the date picker plugin

    'options'=>array(

        'showAnim'=>'fold',

        'dateFormat' => 'yy-mm-dd', //save to db format

       // 'altFormat' => 'dd-mm-yy', // show to user format

        'changeMonth' => 'true', // ay değiştirme

        'changeYear' => 'true', // yıl değiştirme

        'showOtherMonths'=>true,// Show Other month in jquery

        'selectOtherMonths'=>true,// ay seçebilme

        //'showButtonPanel'=>true, // altta kapat ve bugün butonlarını oluşturuyor.

        'yearRange'=>'1900:2099', // yıl aralığı

        'showOn'=>'button', // 'focus', 'button', 'both' // butona (ikon) tıklandığında ajandanın açılması için

        'buttonImage'=>Yii::app()->request->baseUrl.'/images/calendar.png', // ikonun yolu

        'buttonImageOnly'=>true, // buton kısmında sadece resmin görünmesini sağlıyor. False olsa butun görünür ve butonun üstünde ikon görünür

    ),

    'htmlOptions'=>array(

        'style'=>'width:100px;vertical-align:top'

    ),

));

echo "<br/>";

echo "Nüfusa Bağlı Olduğu İl:";

echo "<br/>";


echo $chtml::activeDropDownList($iller,'ad',CHtml::listData(Iller::model()->findAll(

        array('order' => 'ilID')),'ilID','ad'),

    array(

        'prompt'=>'İl Seçiniz',

        'ajax'=>array(

            'type'=>'POST',

            'url' => CController::createUrl('Ilcesec'),

            'data'=> array('ilID'=>'js:this.value'),

            'update'=>'#Ilceler',))

);


// İlçelerin listesini dropdownlistte gösteriyor.

echo "<br/>";

echo "Nüfusa Bağlı Olduğu İlçe:";

echo "<br/>";

echo $chtml::dropDownList('Ilceler','', array(),

    array('prompt'=>'İlçe Seçiniz')); // İlçelerin listesini dropdownlistte gösteriyor.

echo "<br/>";

echo "Anne Adı:";

echo "<br/>";

echo $chtml::textField ('anne_adi');

echo "<br/>";

echo "Baba Adı:";

echo "<br/>";

echo $chtml::textField ('baba_adi');

echo "<br/>";

echo "</div>";

echo "<div style='width:150px; margin-left: 100px; float: left'>";

echo "Telefon";

echo "<br/>";

echo $chtml::textField ('tel');

echo "<br/>";

echo "E-posta";

echo "<br/>";

echo $chtml::textField ('e_posta');

echo "Kan Grubu";

echo "<br/>";

echo $chtml::DropDownList('kan_grubu','',array('1'=>'A Rh (+)','2'=>'A Rh (-)','3'=>'B Rh (+)','4'=>'B Rh (-)','5'=>'AB Rh (+)','6'=>'AB Rh (-)','7'=>'0 Rh (+)','8'=>'0 Rh (-)'),array('empty' =>('Kan Grubu Seçiniz') )); // Kan Grubu listesini dropdownlistte gösteriyor.

echo "<br/>";

echo "Cinsiyet:";

echo "<br/>";

echo $chtml::DropDownList('cinsiyet','',array('1'=>'Erkek','2'=>'Kadın'),array('empty' =>('Cinsiyet Seçiniz') )); // Cinsiyet listesini dropdownlistte gösteriyor.

echo "<br/>";

echo "Adres:";

echo "<br/>";

echo $chtml::textArea('adres');

echo "<br/>";

echo "Adres İli";

echo "<br/>";

// adres iline ait dropdownlist

echo $chtml::activeDropDownList($iller,'ilID',CHtml::listData(Iller::model()->findAll(

        array('order' => 'ilID')),'ilID','ad'),

    array(

        'prompt'=>'İl Seçiniz',

        'ajax'=>array(

            'type'=>'POST',

            'url' => CController::createUrl('Ilcesec'),

            'data'=> array('ilID'=>'js:this.value'),

            'update'=>'#adresIlceler',))

);

echo "<br/>";

echo "Adres İlçesi:";

echo "<br/>";

echo $chtml::dropDownList('adresIlceler','', array(),

array('prompt'=>'İlçe Seçiniz')); // Adres İlçelerin listesini dropdownlistte gösteriyor.

echo "<br/>";

echo "Üye Görevi:";

echo "<br/>";

echo $chtml::DropDownList('uye_gorevi','',array('1'=>'Üye','2'=>'Başkan','3'=>'Başkan Yardımcısı','4'=>'Muhasip','5'=>'Sekreter','6'=>'Yedek Üye'),array('empty' =>('Üyelik Türü Seçiniz') ,'options' => array(1 => array('selected' => 'selected')) )); // Üye görevi gösteriyor.

echo "<br/>";

echo "Üyelik Tarihi:";

echo "<br/>";

// tarih seçmek için

$this->widget('zii.widgets.jui.CJuiDatePicker',array(

    'name'=>'uye_kayit_tarihi',

    'language' => 'tr',

    'value'=>date('Y-m-d'),

    // additional javascript options for the date picker plugin

    'options'=>array(

        'showAnim'=>'fold',

        'dateFormat' => 'yy-mm-dd', //save to db format

        // 'altFormat' => 'dd-mm-yy', // show to user format

        'changeMonth' => 'true', // ay değiştirme

        'changeYear' => 'true', // yıl değiştirme

        'showOtherMonths'=>true,// Show Other month in jquery

        'selectOtherMonths'=>true,// ay seçebilme

        //'showButtonPanel'=>true, // altta kapat ve bugün butonlarını oluşturuyor.

        'yearRange'=>'1900:2099', // yıl aralığı

        'showOn'=>'button', // 'focus', 'button', 'both'

        'buttonImage'=>Yii::app()->request->baseUrl.'/images/calendar.png',

        'buttonImageOnly'=>true,

    ),

    'htmlOptions'=>array(

        'style'=>'width:100px;vertical-align:top'

    ),

));

echo "<br/>";

echo "Üyelik Durumu:";

echo "<br/>";

echo $chtml::DropDownList('uye_durumu','',array('1'=>'Aktif','2'=>'Pasif'),array('empty' =>('Üyelik Durumu Seçiniz') ,'options' => array(1 => array('selected' => 'selected')) )); // Üyelik durumu dropdownlistte gösteriyor. ",'options' => array(0 => array('selected' => 'selected'))" istediğin value'nin seçili gelmesini sağlıyor.

echo "<br/>";

echo $chtml::submitButton('Üye Ekle',array('name'=>'ekle'));

echo $chtml::resetButton('İptal',array('name'=>'iptal'));

echo "</div>";

echo "<div style='width: 500px; height: 400px; float: right; background-color: #C9E0ED;'>";

echo "denme";

echo "</div>";

?>






işi chtml ile yapmakla uzatmışsın.

gii üzerinden create edilen formları kullanman hem view tarafında hemde action tarafında işini kolaylaştırır.

Vaktim olduğunda örnek bir toparlama kaynağı gönderirim.

Yii’de yeni olduğum için bir çok şeye hakim değilim yii adına. Form’u CActiveForm’a döndereceğim. Becerebilirsem form post edildiğinde mecburi giriş alanlarının dolumu boş mu dolumu onu kontrol ettirmek istiyorum. Örnekleri bu yönde verirsen sevinirim.

Merhaba, php ye dair cok birsey bilmiyorum. Yapacagim bir odevde bir formu post etmeden datasini sifreleyip gondermem lazim. post etmeden once sifrelemeyi nasil yapabilirim?Bu form ayni zamanda onsubmit uzerinde sifreleme fonksiyonunu da cagiriyor.php tarafinda da if(isset($_POST["form"])) denedigim zaman bunun tanimlanmamis oldugu hatasini aliyorum. Fikri olan birisi varsa yardimci olursa cok ssevinirim.