Form Gönderme Örneğiyle CodeIgniter Form Doğrulaması

CodeIgniter'da Form

Formlar, kullanıcıların uygulama ile etkileşim kurması ve veri göndermesi için bir yol sağlar. Web sitesini ziyaret eden birinin doldurup bize bilgi gönderebileceği bir iletişim formu olarak kullanılabilir. Alınan bilgiler genellikle veritabanında saklanır veya e-posta yoluyla gönderilir.

HTML Form Yapısı

Aşağıdaki kod tipik bir HTML formunun yapısını göstermektedir.

<form id="frmUsers" name="frmUsers" method="POST" action="create_user.php">
	<input type="text" id="user_id" name="user_id">
	<input type="password" id="password" name="password">

	<input type="submit" value="Submit">
</form>

İŞTE,

  • … formun açılış ve kapanış etiketleridir. id ve name özelliği formun adını ve kimliğini belirtir. Method niteliği kullanılacak HTTP Fiilini belirtir. Bu genellikle POST fiili ile belirtilir.
  • Form öğelerini belirtir. Name özelliği, işlenmek üzere arka uç sunucusuna gönderilen değişken adıdır.

CodeIgniter Form Yardımcısı

HTML harikadır, anlaşılması ve yazılması kolaydır, ancak CodeIgniter işleri daha da basitleştirir. CodeIgniter, HTML formları oluşturmak için yerleşik işlevlere sahiptir.

Form yardımcısını kullanarak bir form oluşturan aşağıdaki CodeIgniter form gönderme kodunu ele alalım

 <?php
        echo form_open('create_user.php', ['id' => 'frmUsers']);
        
        echo form_label('User Id', 'user_id');
        echo form_input(['name' => 'user_id']);
        
        echo form_label('Password', 'password');
        echo form_input(['type' => 'password', 'name' => 'password']);
        
        echo form_submit('btnSubmit', 'Create User');
        
        echo form_close();
        ?>

İŞTE,

  • echo form_open('create_user.php', ['id' => 'frmUsers']); formun açılış etiketini oluşturur, eylemi POST Verb olarak ayarlar ve eylem URL'sini create_user.php olarak ayarlar
  • echo form_label('Kullanıcı Kimliği', 'kullanıcı_kimliği'); user_id adıyla giriş alanı için Kullanıcı Kimliğini okuyan bir etiket oluşturur.
  • echo form_input(['isim' => 'kullanıcı_kimliği']); user_id adında metin türünde bir giriş alanı oluşturur
  • echo form_submit('btnSubmit', 'Kullanıcı Oluştur'); Kullanıcı Oluştur etiketini içeren bir gönder düğmesi oluşturur
  • echo form_close(); formu kapatır

Yukarıdaki CodeIgniter kodundan da görebileceğiniz gibi form yardımcıları saf PHP kullanarak form oluşturmamızı kolaylaştırıyor. Nitelikleri form yardımcı yöntemlerine aktararak form için oluşturulan HTML'yi özelleştirebiliriz.

Yukarıdaki kod aşağıdaki HTML form kodunu oluşturur

        <form action="http://localhost:3000/index.php/create_user.php" id="frmUsers" method="post" accept-charset="utf-8">
            <label for="user_id">User Id</label>
            <input type="text" name="user_id" value=""/>

            <label for="password">Password</label>
            <input type="password" name="password" value=""/>

            <input type="submit" name="btnSubmit" value="Create User"/>
        </form>

Form yardımcısını kullanmanın en büyük avantajı, belirlenmiş HTML standartlarına uygun, anlamsal olarak doğru kod üretmesidir.

Daha fazla ayrıntı için resmi CodeIgniter belgelerine başvurabilirsiniz

https://codeigniter.com/user_guide/helpers/form_helper.html

CodeIgniter Form Örneği

CodeIgniter'ın temellerini anlattıktan sonra, bu süre boyunca üzerinde çalıştığımız eğitim projemize geri dönelim. CodeIgniter Eğitim SerisiÖzetle, eğitim projesi, ayrıntıları veritabanında saklayacak bir kişiler yönetim uygulaması oluşturuyor.

Temas kurmak

Önceki derste uygulamalarımız ve basit görünümlerimiz için rotalar oluşturduk. application/views/contacts/create.php dosyasını açın

Create.php kodunu aşağıdaki gibi değiştirin

<div class="column">
    <h2 class="title">Create Contact</h2>
    <form action="<?= base_url('contacts/store') ?>" method="POST">
        <div class="field">
            <label class="label">Contact Name</label>
            <div class="control">
                <input id="name" name="name" class="input" type="text" placeholder="Type the contact name">
            </div>
        </div>
        <div class="field">
            <label class="label">Contact Number</label>
            <div class="control">
                <input id="name" name="name" class="input" type="text" placeholder="Type the contact number">
            </div>
        </div>
        <div class="field">
            <label class="label">Email Address</label>
            <div class="control">
                <input id="email" name="email" class="input" type="email" placeholder="Type the email address">
            </div>
        </div>
        <div class="field is-grouped">
            <div class="control">
                <button class="button is-link">Save Contact</button>
            </div>
        </div>
    </form>
</div>

Not: yukarıdaki kod, formlar oluşturmak için düz HTML kullanır.

Şimdi formlarımızın web tarayıcısında nasıl göründüğüne bakalım

Aşağıdaki URL'yi web tarayıcımıza yükleyin.

http://localhost:3000/contacts/create

Eğer eğitim projesini oluşturuyorsanız, aşağıdakileri görebilmeniz gerekir

CodeIgniter Formu

CodeIgniter'da Form Doğrulama

Formlardan veri işlerken doğrulama çok kritik bir rol oynar. Diyelim ki bir kullanıcı bir web sitesine kaydoluyor; gerekli bilgileri ve e-posta adresini doldurduğundan emin olmak istiyoruz. Girilen e-posta adresinin geçerli olduğundan emin olmamız gerekiyor. Tarih değerleriyle çalışıyorsak, tarih aralıklarının geçerli olduğundan emin olmak istiyoruz. Bir ayda 32 gün olan bir tarihi kabul etmek zorunda kalmayız vb.

Doğrulama yukarıdaki sorunları çözer. CodeIgniter Doğrulaması, web uygulamalarıyla çalışırken iki (2) cephede yapılır.

İstemci tarafı doğrulaması web tarayıcısı tarafından yapılır. Bu genellikle HTML kullanımını içerir ve JavaKomut dosyası. İstemci tarafı doğrulaması, her şey istemci tarafında yapıldığı için performansı artırır. Bu nedenle, verileri sunucuya göndermeye gerek yoktur. İstemci tarafı doğrulamasının dezavantajı, kullanıcının bunun üzerinde kontrol sahibi olmasıdır. Eğer JavaDoğrulama ve kullanıcıyı devre dışı bırakma komut dosyası JavaTarayıcıda script yoksa doğrulamanız başarısız olur.

Sunucu tarafı doğrulaması sunucu tarafında yapılır. Bu doğrulamanın dezavantajı, kullanıcının verileri işlenmek üzere sunucuya göndermesi ve yanıtı beklemesidir. Bu, ağ kaynaklarını kullanır ve performansı düşürebilir. Sunucu tarafı doğrulamanın en büyük avantajı, daha fazla kontrole sahip olmanız ve kullanıcı devre dışı bıraksa bile doğrulama kurallarınızın çalışacağından emin olmanızdır. JavaTarayıcıdaki komut dosyası.

Daha iyi bir strateji, birincil doğrulama stratejisi olarak istemci tarafını ve geri dönüş mekanizması olarak sunucu tarafını kullanmaktır.

Form Doğrulama Kuralları Ekleme

CodeIgniter'ın yerleşik bir doğrulama kütüphanesi vardır. Kütüphane aşağıdaki satır kullanılarak yüklenir

$this->load->library('form_validation');

CodeIgniter form doğrulama kütüphanesi aşağıdaki eylemlerden bazılarını gerçekleştirmek için kullanılabilir

  • Gerekli alanları kontrol edin. Bu, gönderilen değerleri inceler ve gerektiği gibi etiketlenen bir alanın bir değeri yoksa bir hata döndürür
  • Veri türü doğrulaması – bazı alanlar yalnızca sayısal değerler gerektirebilir. Sayısal olmayan bir değer algılanırsa kitaplık bir hata döndürür. Form gönderiminin yürütülmesi de iptal edilir.
  • Uzunluk doğrulama – bazı veri türleri, alanların belirli bir minimum veya maksimum sayıda karaktere sahip olmasını gerektirir. Doğrulama kütüphanesi bu gibi durumlarda kullanışlıdır.
  • Veri temizleme – doğrulama kitaplığı aynı zamanda güvenlik nedenleriyle gönderilen verilerden kötü amaçlı kodları kaldıran yeteneklere de sahiptir. Örneğin, gönderilen değerler etkinse JavaBunlarda script veya SQL Injection kodu varsa, doğrulama kütüphanesi zararlı kodu temizler ve işe yaramaz hale getirir.
  • Benzersiz veritabanı alanlarını doğrulayın – kullanıcıların bir e-posta adresi kullanarak kaydolduğu bir formunuz olduğunu varsayalım. E-posta adresinin benzersiz olduğundan emin olmak istersiniz. Kütüphane, gönderilen verileri bir veritabanı tablosu ve alanına göre kontrol etmenizi kolaylaştırır. Bu, değerin daha önce alındığını bilmenizi sağlar.

Doğrulama kuralları aşağıdaki format kullanılarak ayarlanır

$this->form_validation->set_rules('field','human readable field','rule',['custom message']);

İŞTE,

  • 'field', kütüphane tarafından doğrulanacak form alanı adını belirtti
  • 'insan tarafından okunabilir alan', doğrulama altındaki alanın insan tarafından okunabilir formatını belirtir. Bir hata oluştuğunda bu kullanıcıya geri görüntülenir.
  • 'kural' gerekli, sayısal, minimum uzunluğun kontrol edilmesi vb. gibi uygulanacak doğrulama kuralını belirtir.
  • ['özel mesaj'] isteğe bağlıdır ve doğrulama kuralı başarısız olduğunda görüntülenmesi gereken özel bir doğrulama mesajı ayarlamak için kullanılabilir.

Aşağıda, iletişim adını doğrulamak için CodeIgniter'da bir form gönderme örneği verilmiştir

$this->form_validation->set_rules('contact_number', 'Contact Number', 'required');

İŞTE,

  • Yukarıdaki kod, contact_number alanının girilip girilmediğini kontrol eder. Ayarlanmazsa İrtibat Numarası alanının gerekli olduğunu belirten bir hata döndürür.

Doğrulamayı belirlenen kurallara göre çalıştırmak için doğrulama kitaplığının aşağıdaki işlevini kullanırız

$this->form_validation->run()

Yukarıdaki kod false değerini döndürürse, bir veya daha fazla ayarlanan kural başarısız olmuş demektir. True değerini döndürürse, doğrulama kurallarının tümü geçmiş demektir ve daha sonraki işlemlere devam edebilirsiniz.

Doğrulama kurallarının daha fazla örneğine bakalım. Diyelim ki bazı alanları doğrulamak istiyorsunuz, örneğin kişi adı, numara ve e-posta adresi, bunu başarmak için aşağıdaki kodu kullanabilirsiniz.

$rules = array(
        array(
                'field' => 'contact_name',
                'label' => 'Contact Name',
                'rules' => 'required'
        ),
        array(
                'field' => 'contact_number',
                'label' => 'Contact Number',
                'rules' => 'required',
                'errors' => array(
                        'required' => 'You must provide a %s.',
                ),
        ),
        array(
                'field' => 'email_address',
                'label' => 'Email Address',
                'rules' => 'required'
        )
);

$this->form_validation->set_rules($rules);

İŞTE,

  • Yukarıdaki CodeIgniter örneğindeki e-posta doğrulamasında, kütüphanenin set_rules işlevi için kuralları olan bir dizi alan sağlıyoruz. Bu, bazı alanları doğrularken işinizi kolaylaştırır.

Benzersiz Doğrulama

Aynı numarayı iki kez kaydetmemek için iletişim numarasını doğrulamak istiyorsak bunu yapmak için aşağıdaki kuralı kullanabiliriz.

$this->form_validation->set_rules('contact_number', 'Contact Number','required|is_unique[contacts.contact_number]');

İŞTE,

  • | birden fazla kuralı bir araya getirmek için kullanılır
  • is_unique[kişiler.kişi_numarası], kişi_numarası değerinin veritabanı tablosundaki kişiler içindeki kişi_numarası alan değerlerine göre benzersiz olup olmadığını kontrol eder.

Form Doğrulama Hata Mesajlarını Görüntüleme

Formun işlenmesi sırasında bir hata oluşursa, oluşan doğrulama hatalarını görüntülemek için aşağıdaki kodu kullanabilirsiniz

<?php echo validation_errors(); ?>

İŞTE,

  • Yukarıdaki işlev meydana gelen tüm hataları döndürür.

Gönderilen Form Verilerini Doldurma: Yapışkan Formlar

Bazı formların birçok alanı vardır ve bir hata oluştuysa, doğru şekilde eklenen verilerin korunduğundan emin olmak istersiniz. Doğrulama kütüphanesinin bunu başarmak için mekanizmaları vardır. Bunu aşağıdaki kodu kullanarak yapıyoruz.

<?php echo set_value('field_name'); ?>

İŞTE,

  • Yukarıdaki kod kullanıcının girdiği girişi görüntüler.

Doğrulama kitaplığı altında bulunan yöntemlere ilişkin eksiksiz bir başvuru kılavuzu için CodeIgniter'ın resmi kullanıcı kılavuzundaki API belgelerine başvurabilirsiniz.

https://codeigniter.com/userguide3/libraries/form_validation.html

CodeIgniter Form Doğrulama Örneği

Bu eğitim serileri boyunca, bir kişi yönetimi uygulaması olan eğitim projemize daha fazla kod ekliyoruz. Bu bölümde doğrulama kütüphanesini yükleyeceğiz ve gerçek dünyadan örnek bir uygulama kullanarak onu pratik kullanıma nasıl koyabileceğimizi göreceğiz.

Mağaza yöntemini eklemek için rota kodunu aşağıdaki gibi değiştirin

$route['default_controller'] = 'welcome';
$route['contacts'] = 'contacts';
$route['create'] = 'contacts/create';
$route['store'] = 'contacts/store';
$route['edit/:id'] = 'contacts/edit';
$route['update/:id'] = 'contacts/update';
$route['delete/:id'] = 'contacts/delete';
$routes['users'] = 'welcome/users';

Şimdi form doğrulama kitaplığını Kişiler denetleyicisine yükleyelim ve bazı doğrulama kuralları ayarlayalım.

CodeIgniter örneğinde aşağıdaki form doğrulamasında gösterildiği gibi kodu değiştirin:

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Contacts extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->helper('url', 'form');
        $this->load->library('form_validation');
    }

    public function index() {
        $this->load->view('header');
        $this->load->view('contacts/index');
        $this->load->view('footer');
    }

    public function create() {
        $this->load->view('header');
        $this->load->view('contacts/create');
        $this->load->view('footer');
    }

    public function store() {
        $rules = array(
            array(
                'field' => 'contact_name',
                'label' => 'Contact Name',
                'rules' => 'required'
            ),
            array(
                'field' => 'contact_number',
                'label' => 'Contact Number',
                'rules' => 'required',
                'errors' => array(
                    'required' => 'You must provide a %s.',
                ),
            ),
            array(
                'field' => 'email_address',
                'label' => 'Email Address',
                'rules' => 'required'
            )
        );

        $this->form_validation->set_rules($rules);

        if ($this->form_validation->run() == FALSE) {
            $this->load->view('header');
            $this->load->view('contacts/create');
            $this->load->view('footer');
        } else {
            redirect(base_url('contacts'));
        }
    }

    public function edit($id) {
        $this->load->view('header');
        $this->load->view('contacts/edit');
        $this->load->view('footer');
    }

    public function update($id) {
        $this->load->view('header');
        $this->load->view('contacts/update');
        $this->load->view('footer');
    }

    public function delete($id) {
        $this->load->view('header');
        $this->load->view('contacts/delete');
        $this->load->view('footer');
    }
}

İŞTE,

  • $rules = array(…) kümeleri doğrulama kurallarını tanımlar
  • $this->form_validation->set_rules($rules); doğrulama kurallarını belirler
  • if ($this->form_validation->run() == FALSE) {…} doğrulama kurallarını çalıştırır ve başarısız olursa form, doğrulama hatalarıyla yeniden görüntülenir. Doğrulama başarılı olursa, yalnızca liste kişileri sayfasına yönlendiriliriz. Normal şartlarda veriyi veritabanına yazardık. Sonraki derslerde bunu yapacağız veritabanları.

Aşağıdaki form doğrulama CodeIgniter örneğinde gösterildiği gibi application/contacts/create.php kodundaki oluşturma görünümünü değiştirin:

<div class="column">
    <h2 class="title">Create Contact</h2>
    <div class="notification is-danger">
    <?php echo validation_errors(); ?>
    </div>
    <form action="<?= base_url('contacts/store') ?>" method="POST">
        <div class="field">
            <label class="label">Contact Name</label>
            <div class="control">
                <input id="contact_name" name="contact_name" class="input" type="text" value="<?php echo set_value('contact_name'); ?>" placeholder="Type the contact name">
            </div>
        </div>
        <div class="field">
            <label class="label">Contact Number</label>
            <div class="control">
                <input id="contact_number" name="contact_number" class="input" type="text" value="<?php echo set_value('contact_number'); ?>" placeholder="Type the contact number">
            </div>
        </div>
        <div class="field">
            <label class="label">Email Address</label>
            <div class="control">
                <input id="email_address" name="email_address" class="input" type="email" value="<?php echo set_value('email_address'); ?>" placeholder="Type the email address">
            </div>
        </div>
        <div class="field is-grouped">
            <div class="control">
                <button class="button is-link">Save Contact</button>
            </div>
        </div>
    </form>
</div>

İŞTE,

  • doğrulama işlemi sırasında varsa oluşan hataları görüntülüyoruz
  • varsa önceden ayarlanmış olan değeri ayarlar

Aşağıdaki URL'yi web tarayıcınıza yüklemeniz gerekiyor. Daha sonra herhangi bir değer girmeden Kişi Oluştur'a tıklayın

CodeIgniter Form Doğrulaması

ÖZET

  • Formlar, kullanıcıların uygulamayla etkileşim kurması ve veri göndermesi için bir yol sağlar.
  • HTML harikadır, anlaşılması ve yazılması kolaydır, ancak CodeIgniter işleri daha da basitleştirir. CodeIgniter, HTML formları oluşturmak için yerleşik işlevlere sahiptir.
  • Formlardan veri işlenirken doğrulama çok kritik bir rol oynar.
  • Bu eğitimde önemli doğrulama stratejilerini ve bunların artılarını ve eksilerini gördük. Ayrıca CodeIgniter'ın yerleşik doğrulama kütüphanesini kullanarak doğrulama kurallarının nasıl belirleneceğini ve hata mesajlarının nasıl giderileceğini de öğrendik. Edinilen bilgileri pratik uygulamada uygulayarak dersi sonlandırdık.