Neler yeni

Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

  • Forumdan daha fazla yararlanmak için, profilinizi telefon numaranız 📱 ile doğrulayın ve daha ayrıcalıklı olun 😉
    Daha fazla bilgi!

PHP ile Mvc framework oluşturma

INNER JOIN, LEFT JOIN, RIGT JOIN Methodu.

ilişkisel sorgular da hayati öneme sahip sorgulardır. Bu sorgularımızı da kendi fonksiyonumuz ile kolaylaştırıcağız. Bundan önce phpmyadmin alanına gidin ve aşağıdaki tabloyu oluşturun.

ekranciktisi_30.jpg

Şimdi database.php sınıfımızı açıyoruz ve en altına aşağıdaki kodlarımızı yazıyoruz.

PHP:
/*
    * JOIN Sorgu Methodu
*/

public function Join($tablo1, $tablo2, $kosul, $join_ismi = "")
{
    if(empty($join_ismi)){

        $this->Sorgu = $this->db->prepare("SELECT * FROM " . $tablo1 . " INNER JOIN " . $tablo2 . " ON " . $kosul);
        return $this->Sorgu->execute();
    }
}

Şimdi models dizini içerisindeki user.php sınıfımızı açıyoruz ve içerisindeki kodları aşağıdaki kodlar ile değiştiriyoruz.

PHP:
<?php
class User extends Database
{
    public function JoinIslemi()
    {
        $this->Join("users", "urunler", "users.id = urunler.id");
        $sonuclar = $this->tumKayitlar();
        echo "<pre>";
        print_r($sonuclar);
        echo "</pre>";
    }
}

?>

Şimdi controllers dizini içerisindeki profile.php sınıfımızı açıyoruz ve içerisindeki users() method kodlarını aşağıdaki kodlar ile değiştiriyoruz.


PHP:
public function user()
{
    $users = $this->model("user");
    $users->JoinIslemi();
    $this->view("users");

}

Ekran çıktısı:

ekranciktisi_31.jpg

Sıradaki sorgu methodumuz ise LEFT JOIN sorgu methodunu yazmak. Burada database.php sınıfımız içerisinde yer alan, Join() methoduna else if ekleyerek bir kontrol daha ekleyeceğiz. Burada eğer $join_ismi parametresine LEFT JOIN gelirse, bizim else if kontrol blogundaki $join_ismi == "LEFT JOIN" alanındaki sorgumuz devreye girecek. Bunun için ilgili Join() fonksiyonumuza if else blogu içerisinde aşağıdaki örnekte olduğu gibi kodlarımızı ekleyelim.

PHP:
public function Join($tablo1, $tablo2, $kosul, $join_ismi = "")
{
    if(empty($join_ismi)){

        $this->Sorgu = $this->db->prepare("SELECT * FROM " . $tablo1 . " INNER JOIN " . $tablo2 . " ON " . $kosul);
        return $this->Sorgu->execute();

    }else if($join_ismi == "LEFT JOIN"){

        $this->Sorgu = $this->db->prepare("SELECT * FROM " . $tablo1 . " LEFT JOIN " . $tablo2 . " ON " . $kosul);
        return $this->Sorgu->execute();

    }
}

Daha sonra models dizimi içerisindeki user.php sınıf dosyamızı açıyoruz, buradaki kodumuza sadece ek bir parametre vereceğiz ama yine de kodun tamamını aşağıda paylaşıyoruz.

PHP:
<?php
class User extends Database
{
    public function JoinIslemi()
    {
        $this->Join("users", "urunler", "users.id = urunler.id", "LEFT JOIN");
        $sonuclar = $this->tumKayitlar();
        echo "<pre>";
        print_r($sonuclar);
        echo "</pre>";
    }
}

?>

profile.php alanında zaten kodlarımız tanımlı, ilgili url'i http://localhost/netron/profile/user çalıştırıyoruz ve aşağıdaki örnekte olduğu gibi LEFT JOIN sorgumuzun da başarılı bir şekilde çalıştığını görebiliriz.

ekranciktisi_32.jpg

Sıradaki sorgu methodumuz ise RIGHT JOIN sorgu methodunu yazmak. Bu sorgu da LEFT JOIN sorgusunun hemen hemen aynısı olacak. Tek farkı LEFT JOIN olan yerleri RIGHT JOIN değiştirmek. Burada database.php sınıfımız içerisinde yer alan, Join() methoduna bir else if blogu daha ekleyerek bir kontrol daha ekleyeceğiz. Burada eğer $join_ismi parametresine RIGHT JOIN gelirse, bizim else if kontrol blogundaki $join_ismi == "RIGHT JOIN" alanındaki sorgumuz devreye girecek. Bunun için ilgili Join() fonksiyonumuza if else blogu içerisinde aşağıdaki örnekte olduğu gibi kodlarımızı ekleyelim.


PHP:
public function Join($tablo1, $tablo2, $kosul, $join_ismi = "")
{
    if(empty($join_ismi)){

        $this->Sorgu = $this->db->prepare("SELECT * FROM " . $tablo1 . " INNER JOIN " . $tablo2 . " ON " . $kosul);
        return $this->Sorgu->execute();

    }else if($join_ismi == "LEFT JOIN"){

        $this->Sorgu = $this->db->prepare("SELECT * FROM " . $tablo1 . " LEFT JOIN " . $tablo2 . " ON " . $kosul);
        return $this->Sorgu->execute();

    }else if($join_ismi == "RIGHT JOIN"){

        $this->Sorgu = $this->db->prepare("SELECT * FROM " . $tablo1 . " LEFT JOIN " . $tablo2 . " ON " . $kosul);
        return $this->Sorgu->execute();

    }
}

Daha sonra models dizini içerisindeki user.php sınıf dosyamızı açıyoruz, buradaki kodumuz da yapmamız gereken şey sadece LEFT JOIN yazan yeri RIGTH JOIN olarak değiştirmek biz yine de kodun tamamını aşağıda paylaşıyoruz.

PHP:
<?php
class User extends Database
{
    public function JoinIslemi()
    {
        $this->Join("users", "urunler", "users.id = urunler.id", "RIGHT JOIN");
        $sonuclar = $this->tumKayitlar();
        echo "<pre>";
        print_r($sonuclar);
        echo "</pre>";
    }
}

?>

profile.php alanında yine aynı şekilde zaten kodlarımız tanımlı, ilgili url'i http://localhost/netron/profile/user çalıştırıyoruz ve aşağıdaki örnekte olduğu gibi RIGHT JOIN sorgumuzun da başarılı bir şekilde çalıştığını görebiliriz.

ekranciktisi_32.jpg

Sıradaki işlemimiz INNER JOIN sorgularında Alias kullanımı. Aliaslar sütunlara takma isim vermemize yarayan komutlardır. Aşağıdaki alias kullanımında join methodunu değilde, genelSorgu() methodu ile kullandığımıza dikkat ediniz. models dizini içerisindeki user.php sınıf dosyasını açınız ve içindeki kodları aşağıdaki kodlar ile değiştiriniz.

PHP:
<?php
class User extends Database
{
    public function JoinIslemi()
    {
            $this->genelSorgu("SELECT users.id as user_id, urunler.id as urunler_id FROM users INNER JOIN urunler ON users.id = urunler.id");
        $sonuclar = $this->tumKayitlar();
        echo "";
        print_r($sonuclar);
        echo "";
    }
}

?>

profile.php ilgili url'i http://localhost/netron/profile/user çalıştırıyoruz ve aşağıdaki örnekte olduğu gibi alias kullandığımız sorgumuzun da başarılı bir şekilde çalıştığını görebiliriz.

ekranciktisi_33.jpg

Alias kullanımı ile alakalı bir örnek kod daha bırakmak istiyorum. Burada da tüm iki tablodaki ürünlerin ve kime ait oldukları başarılı bir şekilde sorgulanmakta. alias kullanımı join işlemlerinde oldukça önemlidir. Aksi halde sorgu da bir karışıklık olabilir. Bu yüzden bu tür alias atamalarında kesinlikle bir hata ile karşılaşmazsınız. Aşağıdaki sorguya bakabilirsiniz.

PHP:
<?php
class User extends Database
{
    public function JoinIslemi()
    {
            $this->genelSorgu("SELECT users.id as user_id,
                                            users.isim as users_isim,
                                            users.adres as users_adres,
                                            urunler.id as urunler_id,
                                            urunler.urun_adi as ur_adi,
                                            urunler.urun_fiyati as ur_fiyati
                                             FROM users INNER JOIN urunler ON users.id = urunler.id");
        $sonuclar = $this->tumKayitlar();
        echo "<pre>";
        print_r($sonuclar);
        echo "</pre>";
    }
}

?>

Ekran çıktısı:

ekranciktisi_34.jpg
 
Yardımcı (Helper) Fonksiyonlarının Yükleyici Kodlaması ve Çıktı Sağlanması

Database framework kodlamamız bittiğine göre (ileride iyileştirmeler yapılabilir) şimdi sırada yardımcı fonksiyonlarımızı oluşturmamızın zamanı geldi. İlk olarak BASE URL linkimizi oluşturalım. config dizini içerisindeki config.php dosyamızı açıyoruz ve altına aşağıdaki BASE URL sabitimizi ekliyoruz. Bu linki artık sitenin her yerinde kullanabiliriz. Ayrıca bu link bizim domain adresimizi temsil edecek. Biz localhost üzerinden çalıştığımız için proje dosyamızın linkini verdik. Siteyi sunucuya yükleme aşamasında bu link domain adresi ile değişmesi gerekecek. Biz burada http://localhost/netron linkini domainimiz olarak kabul edeceğiz.

PHP:
/*
    * BASE URL
*/

define("BASE_URL", "http://localhost/netron");

Yardımcı (Helper) fonksiyonlarının Oluşturulması - link_css

Şimdi sıradaki yardımcı fonksiyonumuz ise, sitemize eklemiş olduğumuz css dosyalarının her sayfada sorunsuz çalışmasını sağlamak için link_css adında bir yardımcı fonksiyon oluşturacağız ama bundan önce helpers dizini içerisinde oluşturacağımız dosyaların otomatik olarak sisteme dahil edilmesini sağlamamız gerekiyor. Bizim netron.php adında dosyalarımızı, sınıflarımızı çağırdığımız bir sınıfımızı vardı burada helpers yardımcı fonksiyonlarımıza buldurup, sistemimize dahil ettirebiliriz. netron.php dosyasını açıyoruz ve en altına aşağıdaki helpers dosya bulucu fonksiyonumuzu ekliyoruz.

PHP:
/*
    * Helper yardımcı fonksiyonlarımızın dosyalarının olup olmadığını kontrol ediyoruz.
*/

public function helper($helper_ismi){

    if(file_exists("../system/helpers/" . $helper_ismi . ".php")){

        require_once "../system/helpers/" . $helper_ismi . ".php";

    }else {
        die("<div style='background-color: #f1f4f4;color:#afaaaa;border:1px dotted #afaaaa;padding: 10px; border-radius: 4px;'> <strong>". $helper_ismi ."</strong> İsimli helper dosyası bulunamadı</div>");
    }

}

Daha sonra helpers dizini içerisinde url.php dosyası oluşturup içerisine aşağıdaki kodları yazıyoruz.

PHP:
<?php
function link_css($css_path){
    if(!empty($css_path)){
        return '<link type="text/css" rel="stylesheet" href="'.BASE_URL.'/' . $css_path.'">';
    }
}

?>

Şimdi public/css dizini içerisinde style.css dosyası oluşturalım ve içerisine aşağıdaki css kodlarını ekleyelim.

CSS:
body {
    background-color: red;
}

Şimdi de views dizini içerisindeki users.php dosyasını açalım ve link_css fonksiyonumuzla beraber, css dosya yolumuzu ilgili alana yazalım. Örnek kodlama aşağıda gösterilmiştir..

PHP:
<!doctype html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta name="viewport"
    content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Users</title>
    <?php echo link_css("css/style.css"); ?>
    </head>
    <body>
</body>
</html>

Şimdi de bunun çalışıp çalışmadığını test edelim. controllor dizini içerisindeki profile.php dosyasını açalım ve user() method kodlarını aşağıdaki kodlar ile değiştirelim. Dikkat ederseniz sadece helper sınıfımızı çağırdık.

PHP:
public function user()
{
    $this->helper("url");
    $this->view("users");
}

Şimdi tarayıcımız da http://localhost/netron/profile/user url'i çalıştıralım ve sayfanın kırmızı olduğunu yani yardımcı fonksiyonumuzun başarılı bir şekilde çalıştığını görebiliriz.

ekranciktisi_35.jpg

Şimdi de link_js yardımcı fonksiyonumuzu yazalım, burada script linklerimizi sayfamıza dahil edeceğiz. Bunun gerçekleştirmek için url.php dosyasını açıyoruz ve içerisine aşağıdaki kodları ekliyoruz.

PHP:
function link_js($js_path){
    if(!empty($js_path)){
        return '<script type="text/javascript" src="'.BASE_URL.'/' . $js_path.'"></script>';
    }
}

Şimdi de public/js dizini içerisinde app.js adında bir dosya oluşturalım ve içerisine aşağıdaki kodları ekleyelim.

JavaScript:
alert("Merhaba netr0n Framework");

Daha sonra views dizini içerisindeki users.php dosyamızı açalım ve </body> tagının hemen üstüne aşağıdaki örnekte olduğu gibi link_js() fonksiyonumuzu ekleyelim.

PHP:
<!doctype html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta name="viewport"
    content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Users</title>
    <?php echo link_css("css/style.css"); ?>
    </head>
    <body>

    <?php echo link_js("js/app.js"); ?>
</body>
</html>

Şimdi tarayıcımız da http://localhost/netron/profile/user url'i çalıştıralım ve app.js içerisinde yazdığımız uyarı mesajını aşağıdaki çıktı örneğinde olduğu gibi görelim.

ekranciktisi_36.jpg
 
Yardımcı (Helper) fonksiyonlarının Oluşturulması - form input

Şimdi sıradaki yardımcı fonksiyonlarımız ise, form açma kapatma ve inputlarımız. İlk yapmamız gereken helpers dizini içerisinde form.php adında dosya oluşturup, içerisine aşağıdaki kodlarımızı yazalım.

form.php heplers dosyamızın içerisine aşağıdaki kodları ekleyelim.

PHP:
/*
    * Form açma helper
*/

function form_ac($action = "" , $method = "", $secenekler = []){

if(array_key_exists("id", $secenekler)){

    $id = $secenekler['id'];

}else{

    $id = null;

}

if(array_key_exists("class", $secenekler)){

    $class = $secenekler['class'];

}else{

    $class = null;

}

$url = BASE_URL . "/" . $action;

return '<form action="'.$url.'" method="'.$method.'" class="'.$class.'" id="'.$id.'">';
}

Form açma kullanımı

PHP:
<?php echo form_ac("profile/submit_form", "POST", ['class' => 'form', 'id' => 'formid']); ?>

Multi Part dosya gönderim formu (open)

PHP:
/*
    * Form açma MultiPart helper
*/

function form_multipart($action = "" , $method = "", $secenekler = []){

if(array_key_exists("id", $secenekler)){

    $id = $secenekler['id'];

}else{

    $id = null;

}

if(array_key_exists("class", $secenekler)){

    $class = $secenekler['class'];

}else{

    $class = null;

}

$url = BASE_URL . "/" . $action;

return '<form action="'.$url.'" method="'.$method.'" class="'.$class.'" id="'.$id.'" enctype="multipart/form-data">';
}

Form Multi Part kullanımı

PHP:
<?php echo form_multipart("profile/submit_form", "POST", ['class' => 'form', 'id' => 'formid']); ?>

form.php heplers dosyamızın içerisine aşağıdaki kodları en alta ekleyelim.

PHP:
*
    * Form kapat
*/

function form_kapat(){
return '</form>';
}

Form kapatma kullanımı


PHP:
<?php echo form_kapat(); ?>

Form input fonksiyonu ve kullanımı

PHP:
<?php
function form_input($formAlanlari){

    if(array_key_exists("name", $formAlanlari)){

        $name = $formAlanlari['name'];

    }else {

        $name = null;

    }

    if(array_key_exists("id", $formAlanlari)){

        $id = $formAlanlari['id'];

    }else {

        $id = null;

    }

    if(array_key_exists("class", $formAlanlari)){

        $class = $formAlanlari['class'];

    }else {

        $class = null;

    }

    if(array_key_exists("placeholder", $formAlanlari)){

        $placeholder = $formAlanlari['placeholder'];

    }else {

        $placeholder = null;

    }

    if(array_key_exists("value", $formAlanlari)){

        $value = $formAlanlari['value'];

    }else {

        $value = null;

    }

    if(array_key_exists("type", $formAlanlari)){

        if($formAlanlari['type'] == "text"){

            $type = "text";

        }elseif($formAlanlari['type'] == "email"){

            $type = "email";

        }elseif($formAlanlari['type'] == "password"){

            $type = "password";

        }elseif($formAlanlari['type'] == "file"){

            $type = "file";

        }

    }

    if($type == "file"){

        return '<input type="'.$type.'" name="'.$name.'" id="'.$id.'" class="'.$class.'">';

    }else{

        return '<input type="'.$type.'" name="'.$name.'" id="'.$id.'" class="'.$class.'" placeholder="'.$placeholder.'" value="'.$value.'">';

    }


}

?>

Şimdi views dizini içerisindeki users.php dosyasını açalım ve <body> içinde aşağıdaki gibi bir form alanı oluşturalım.

PHP:
<?php echo form_input(['type' => 'text', 'name' => 'kullaniciAdi', 'id' => 'input-id', 'class' => 'form-control', 'placeholder' => 'Adınızı giriniz', 'value' => '']); ?>

Form file kullanımı

PHP:
<?php echo form_input(['type' => 'file', 'name' => 'kullaniciAdi', 'id' => 'input-id', 'class' => 'form-control']); ?>

form.php heplers dosyamızın en altına aşağıdaki submit button fonksiyonunun kodlarını ekleyelim.

PHP:
/*
    * Submit Buttonu
*/

function form_submit($formAlanlari){

if(array_key_exists("name", $formAlanlari)){

    $name = $formAlanlari['name'];

}else{

    $name = null;

}

if(array_key_exists("class", $formAlanlari)){

    $class = $formAlanlari['class'];

}else{

    $class = null;

}

if(array_key_exists("id", $formAlanlari)){

    $id = $formAlanlari['id'];

}else{

    $id = null;

}

if(array_key_exists("value", $formAlanlari)){

    $value = $formAlanlari['value'];

}else{

    $value = null;

}

return '<input type="submit" class="'.$class.'" id="'.$id.'" value="'.$value.'">';

}

Form submit button kullanımı

PHP:
<?php $data = ['name' => 'giris', 'class' => 'btn btn-default', 'id' => 'btn-id', 'value' => 'Giriş']; ?>

<?php echo input_submit($data); ?>

form.php heplers dosyamızın en altına aşağıdaki button helper fonksiyonunun kodlarını ekleyelim.

PHP:
/*
    * Button Helper
*/

function form_button($formAlanlari){
if(array_key_exists("name", $formAlanlari)){

    $name = $formAlanlari['name'];

}else{

    $name = null;
}

if(array_key_exists("class", $formAlanlari)){

    $class = $formAlanlari['class'];

}else{

    $class = null;
}

if(array_key_exists("id", $formAlanlari)){

    $id = $formAlanlari['id'];

}else{

    $id = null;
}

if(array_key_exists("value", $formAlanlari)){

    $value = $formAlanlari['value'];

}else{

    $value = null;
}

return '<button type="button" class="'.$class.'" id="'.$id.'" name="'.$name.'">'.$value.'</button>';
}

Form Button Helper kullanımı

PHP:
<?php echo input_button(['name' => 'btn', 'class' => 'btn-primary', 'id' => 'btn', 'value' => 'Tıkla']); ?>

Şimdi controllers dizini içerisindeki profile.php dosyasını açalım ve user methodumuzun içine form helperımızı çağıralım. Örnek kod bütünü aşağıdaki gibi olacaktır.

PHP:
public function user()
{
    $this->helper("url");
    $this->helper("form");
    $this->view("users");
}

Şimdi tarayıcımız da http://localhost/netron/profile/user url'i çalıştıralım ve inputumuzum oluştuğunu aşağıdaki örnekte olduğu gibi görebiliriz.

ekranciktisi_37.jpg

Şimdi anchor_link() fonksiyonumuzu oluşturalım. Bu fonksiyon bize link oluşturmada yardımcı olacak. controllers dizini içerisindeki profile.php dosyasını açalım ve user methodumuzun içine form helperımızı dahil edelim. Örnek kod bütünü aşağıdaki gibi olacaktır.

PHP:
public function user()
{
    $this->helper("url");
    $this->helper("form");
    $this->helper("html");
    $this->view("users");
}

Şimdi helpers dizini içerisinde html.php dosyasını oluşturalım ve içerisine aşağıdaki kodları yazalım.

PHP:
<?php

function anchor_link($href, $value, $secenekler = []){

    if(array_key_exists("class", $secenekler)){

        $class = $secenekler['class'];

    }else{

        $class = null;
    }

    if(array_key_exists("id", $secenekler)){

        $id = $secenekler['id'];

    }else{

        $id = null;
    }

    $url = BASE_URL . "/" . $href;

    return ''.$value.'';
}

?>

Şimdi views dizini içerisinde users.php dosyasını açalım ve <body> içerisine aşağıdaki kodu yazalım. Örnek kullanım kodlarımız aşağıdaki gibidir. Ayrıca test etmek için profile.php sınıfı içerisinde bir methoda yönlendirme de yapabilirsiniz.

PHP:
<?php echo anchor_link("profile/anchor", "Delete", ['class' => 'link']); ?>

Dikkat ederseniz her seferin de profile.php dosyasında methodlarımıza alt alta helper eklemesi yapmamız gerekiyordu, yani çağrılmasını yapıyorduk. Alta alta yapmak sıkıntılı bir durum değil ama alt alta olması, çok dosyamız olduğunda kötü gözükecektir. Biz bunu dizi olarak yapmaya karar verdik. İlk önce libraries dizini içerisindeki netron.php sınıf dosyamızı açalım ve helper() fonksiyonumuzu aşağıdaki kodlarla değiştirelim.

PHP:
/*
    * Helper yardımcı fonksiyonlarımızın dosyalarının olup olmadığını kontrol ediyoruz.
*/

public function helper($helper_isimleri){

if(!empty($helper_isimleri)){

    foreach($helper_isimleri as $helper_ismi):

        if(file_exists("../system/helpers/" . $helper_ismi . ".php")){

            require_once "../system/helpers/" . $helper_ismi . ".php";

        }else {
            die("<div style='background-color: #f1f4f4;color:#afaaaa;border:1px dotted #afaaaa;padding: 10px; border-radius: 4px;'> <strong>". $helper_ismi ."</strong> İsimli helper dosyası bulunamadı</div>");
        }

    endforeach;
}

}

Şimdi de profile.php sınıf dosyamızda user() methodumuza eklemiş olduğumuz helper'ları kaldılarım ve aşağıdaki kodları ekleyelim.

PHP:
public function user()
{
    $this->helper(['url', 'form', 'html']);
    $this->view("users");
}

Şimdi de sayfamızı test ettiğimiz de helperlarımızın düzgün bir şekilde çalıştığını görebiliriz.
 
Form Verilerinin Alınması

Burada form helperlarıyla yani yardımcı helper fonksiyonlarımızla bir form oluşturacağız ve bu form'dan verilerin alınmasını göreceğiz. Bunun için views dizini içerisindeki users.php dosyasını açıyoruz ve body tagının içerisine aşağıdaki formumuzu ekliyoruz.

PHP:
<?php echo form_ac("profile/submit_form", "POST", ['class' => 'form']); ?>

<?php echo form_input(['type' => 'password', 'name' => 'password', 'id' => 'input-id', 'class' => 'form-control', 'placeholder' => 'Şifre giriniz', 'value' => '']); ?> <br />

<?php echo form_input(['type' => 'email', 'name' => 'email', 'id' => 'input-id', 'class' => 'form-control', 'placeholder' => 'Email giriniz', 'value' => '']); ?><br />

<?php echo form_input(['type' => 'text', 'name' => 'username', 'id' => 'input-id', 'class' => 'form-control', 'placeholder' => 'Adınızı giriniz', 'value' => '']); ?><br />

<?php $data = ['name' => 'giris', 'class' => 'btn btn-default', 'id' => 'btn-id', 'value' => 'Giriş']; ?>

<?php echo form_submit($data); ?>

<?php echo form_kapat(); ?>

Burada oluşturmuş olduğumuz formun action alanının profile/submit_form methoduna gittiğini görebiliyoruz. O zaman controllers dizini içerisindeki profile.php sınıf dosyamızı açıyoruz ve daha önce oluşturmuş olduğumuz submit_form() methodunu aşağıdaki kodlar ile değiştiriyoruz.

PHP:
public function submit_form()
{
    echo $_POST['password'] . "<br />";
    echo $_POST['email'] . "<br />";
    echo $_POST['username'];
}

Şimdi bir form gönderimi yapacağız verilerimizin formdan gelip gelmedeğini kontrol edeceğiz. Bunun için tarayıcımızda ilgili http://localhost/netron/profile/user url'imizi açıyoruz ve form alanlarını dolduruyoruz.

ekranciktisi_38.jpg

Bu forumu submit ettiğimizde formdan gelen verilerin başarılı bir şekilde geldiğini görebiliriz.

ekranciktisi_39.jpg
 
Form Verilerinin Database Kaydı

Formdan gelen verilerin database alanında ilgili tabloya kaydını gerçekleştireceğiz. Bunun için views dizini içerisindeki users.php dosyamızı açalım form içeriğini aşağıdaki form içeriği ile değiştirelim.

PHP:
<?php echo form_ac("profile/submit_form", "POST", ['class' => 'form']); ?>

<?php echo form_input(['type' => 'text', 'name' => 'isim', 'id' => 'input-id', 'class' => 'form-control', 'placeholder' => 'İsim giriniz', 'value' => '']); ?> <br />

<?php echo form_input(['type' => 'text', 'name' => 'adres', 'id' => 'input-id', 'class' => 'form-control', 'placeholder' => 'Adres giriniz', 'value' => '']); ?><br />

<?php $data = ['name' => 'giris', 'class' => 'btn btn-default', 'id' => 'btn-id', 'value' => 'Ekle']; ?>

<?php echo form_submit($data); ?>

<?php echo form_kapat(); ?>

Şimdi de controllers dizini içerisindeki profile.php dosyamızı açalım ve __construct methodumuzu aşağıdaki __construct methodu ile değiştirelim dikkat ederseniz __construct methodunun üstünde public $user_model; isminde bir de değişkenimiz var ve bununla birlikte __construct methodunun içerisinde modelden gelen sınıfımız var. Bunuda $this->user_model diyerek gelen sınıfı değişkenimizin içerisine depoladık ve artık bunu profile sınıfımızın içerisinde kullanabiliriz.

PHP:
public $user_model;

public function __construct()
{
    $this->user_model = $this->model('user');
}

Şimdi de profile.php içerisindeki submit_form() methodumuzu aşağıdaki gibi kodlayalım.

PHP:
public function submit_form()
{
    $isim   = $_POST['isim'];
    $adres  = $_POST['adres'];

    $data = ['isim' => $isim, 'adres' => $adres];

    if($this->user_model->data_ekle($data)){

        echo "Ekleme başarıyla yapıldı";

    }else {

        echo "Ekleme işlemi sırasında hata oluştu";
    }
}

Şimdi de models dizini içerisindeki user.php dosyamızı açalım ve içerisine aşağıdaki method kodlarını yazalım.

PHP:
public function data_ekle($data)
{
    if($this->Ekle("users", $data)){

        return true;

    }else{

        return false;
    }
}

Şimdiye kadar yazdığımız bu kodları açıklayalım. Form oluşturduk ve form input name isimlerini isim ve adres olarak belirledik ve action olarak profile/submit_form alanına gitmesini söyledik. Daha sonra profile.php içerisindeki submit_form() alanında bu değerleri aldık. Tabii bundan öncede __construct methodu içerisinde ilgili user model dosyasımı çağırdık ve model sınıfımızı bir değişkene aktardık. Daha sonra models dizini içerisindeki user.php içerisinde data_ekle adında bir method oluşturduk ve burada da database.php içerisindeki Ekle methoduna controllers/profile.php içerisindeki submit_form methodundan gelen form değerlerini kaydetmesini söyledik. Burada başarılı olursa true dedik bu true alanı başarılıysa controllers/profile.php alanında submit_form methodunun if alanı içerisindeki başarılı blogunu çalıştıracak başarısız ise else alanındaki başarısız mesajını döndürecek. Şimdi http://localhost/netron/profile/user form alanına gidelim ve ilgili formu dolduralım.

ekranciktisi_40.jpg

Şimdi ekle butonuna basalım.

ekranciktisi_41.jpg

Ekleme işleminin başarılı olduğu mesajını aldığımıza göre phpmyadmin alanından users tablosuna baktığımızda ilgili kaydın da eklendiğini görebiliriz.

ekranciktisi_42.jpg
 
Helper - Yonlendirme Fonksiyonu

Yönlendirme yani redirect yardımcı (helper) fonksiyonumuzu oluşturup, buna göre yönlendirmenin çalıp çalışmadığı ile alakalı kontrol testlerimizi yapacağız. Bunun için helpers dizini içerisinde yonlendir.php adında bir dosya oluşturalım ve içerisine aşağıdaki fonksiyon kodlarını ekleyelim.

PHP:
<?php
    function yonlendir($path){
    header("location:" . BASE_URL . "/" . $path);
}
?>

Şimdi de controllers dizini içerisinde panel.php adında bir dosya oluşturalım ve içerisine aşağıdaki sınıf kodlarını ekleyelim.

PHP:
   <?php

    class Panel extends Netron
    {
        public function index()
        {
    
        }
    
        public function profile()
        {
            echo "Panel";
        }
    }
    
    ?>

Şimdi de controllers dizini içerisinde user.php sınıf dosyamızı açalım ve user() methodumuzu aşağıdaki gibi düzenleyelim. (Ayrıca aşağıda da görüldüğü gibi helper dizi fonksiyonu içerisine yonlendir helperini eklemeyi unutmayınız.)

PHP:
public function user()
{
    $this->helper(['url', 'form', 'html', 'yonlendir']);
    $this->view("users");
    yonlendir("panel/profile");
}

Şimdi bizim http://localhost/netron/profile/user url'ini çalıştırdığımız da otomatik olarak http://localhost/netron/panel/profile alanına yönlendirilmesinin yapılması gerekiyor. Çalıştırdığımız da da yönlendirmemiz başarılı bir şekilde yapıldığını görebiliyoruz. Bizi otomatik olarak panel sayfasına gönderiyor.

ekranciktisi_43.jpg
 
Helper - Autoload Yükleyicisi

Helper yardımcı fonksiyonlarımızı her seferinde her methoda tanımlamamız gerekiyordu. Bu da bir web sitesi yaptığımızda bizi çok fazlasıyla yoracak ve fazla kod yazmamıza neden olacaktı. Biz helper fonksiyonlarımızı bir autoload oluşturarak bu durumu da çözeceğiz. Şimdi config dizini içerisinde autoload.php adında bir dosya oluşturuyoruz ve içerisine aşağıdaki kodlarımızı ekliyoruz.

PHP:
<?php

/*
    * Autoload helpers
*/

$autoload = [

    'helpers' => ['url', 'form', 'html', 'yonlendir']
];

?>

Şimdi bunu her controllers sınıf dosyaları içerisinde kullanacağımız için bizim de her controllers sınıf dosyası içerisinde netron.php sınıfımız zaten Netron olarak extends edildiği için netron.php sınıf dosyamızı açıyoruz ve sınıf içerisinde en üste gelerek bir tane __construct methodu tanımlıyoruz. Örnek kodlar aşağıdaki gibi olacak.

PHP:
public function __construct()
{
    if(file_exists("../system/config/autoload.php")){

        require_once "../system/config/autoload.php";
        $helpers = $autoload["helpers"];
        $this->helper($helpers);
    }

}

Yukarıdaki bu kodu açıklayacak olursak file_exists ile böyle bir dosya var mı? kontrolü yapıyoruz ve varsa böyle bir dosya bunu dahil et diyoruz daha sonra autoload.php içerisindeki $autoload["helpers"] dizisini $helpers değişkenine depoluyoruz. Bizim netron.php dosyası içerisinde helper() fonskiyonumuz bulunmaktaydı bu fonksiyon bizden dizi istemektedir. İşte burada da $this->helper($helpers); diyerek $helpers değişkenini methodumuza göndermiş oluyoruz. Şimdi bunu test edelim; controllers dizini içerisinde profile.php dosyasını açalım ve __construct içerisine bizim netron.php içerisindeki __construct methodumuzu parent ile dahil edelim. Örnek kod aşağıdadır.


PHP:
public function __construct()
{
    parent::__construct();
    $this->user_model = $this->model('user');

}

Buradan parent nedir diye açıklayacak olursak: parent:: : Ebeveyn sınıfımda şeklinde, sınıfı işaret etmek için kullanılır ve sadece methodlara işlem yapar özellikler zaten aynı şekilde kullanılır. Bizde burada extends ettiğimiz için Ebeveyn sınıfımda __construct methodunu göstermiş oluyoruz. Zaten phpstorm kullanıyorsanız parent::__construct(); üzerine mouse ile gelin ctrl tuşuna bastıktan sonra parent:: üzerine tıklayın, sizi ait olduğu sınıf dosyasına götürecektir. Şimdi çalışıp çalışmadığını test edelim. controllers dizini içerisindeki user() methodunuz aşağıdaki method ile değiştirelim.

PHP:
public function user()
{
    $this->view("users");
    yonlendir("panel/profile");
}

Dikkat ederseniz yukarıdaki kodda artık helpers dizilerini kaldırdık, sadece yonlendir fonksiyonumuz bulunmakta ve tarayıcı üzerinden http://localhost/netron/profile/user olarak çalıştırırsak bizi yine http://localhost/netron/panel/profile alanına yönlendirecektir. Bundan sonra eğer bir helper oluşturulacaksa ilgili dosya helpers dizini içerisinde oluşturuldak sonra config dizini içerisindeki autoload.php dosyasının içerisindeki autoload dizi içerisine ekleme yapmamız yeterli olacaktır.
 
Helper - GET - POST Fonksiyonu

Bu bölümde formlar üzerinden gelen POST VE GET işlemleri için bir yardımcı fonksiyon oluşturacağız. Bunun için libraries dizini içerisindeki netron.php sınıf dosyamızı açıyoruz ve en aşağısına aşağıdaki kodları ekliyoruz.

PHP:
/*
    * Post fonksiyonu
*/

public function post($alan_isimi)
{
    if($_SERVER['REQUEST_METHOD'] == "post" || $_SERVER['REQUEST_METHOD'] == "POST"){

    return strip_tags(trim($_POST[$alan_isimi]));

}else{

    die("<div style='background-color: #f1f4f4;color:#afaaaa;border:1px dotted #afaaaa;padding: 10px; border-radius: 4px;'> <strong>". $alan_isimi ."</strong> isimli post bulunamadı</div>");

    }
}

Biliyorsunuz daha önceden views dizini içerisinde users.php dosyası içerisinde oluşturmuş olduğumuz bir formumuz vardı. Bizden isim ve adres istemekteydi. Bunun için tekrar bir form oluşturmaya gerek yok, aynı verileri aynı formdan alabiliriz. Bunun için controllers dizini içerisindeki profile.php sınıf dosyamızı açıyoruz ve submit_form() methodumuzu aşağıdaki gibi kodluyoruz.

PHP:
public function submit_form()
{
    echo $this->post('isim');
    echo $this->post('adres');
}

Şimdi http://localhost/netron/profile/user url'imizi açıyoruz ve aşağıda olduğu gibi formumuzu dolduruyoruz.

ekranciktisi_44.jpg

Butona tıkladığımız da ilgili verilerin başarıyla alındığını görebiliyoruz.

ekranciktisi_45.jpg

Şimdi benzer işlemleri GET işlemleri için yapacağız. libraries dizini içerisindeki netron.php sınıf dosyamızı açıyoruz ve en aşağısına aşağıdaki kodları ekliyoruz.


PHP:
/*
    * GET fonksiyonu
*/

public function get($alan_isimi)
{
    if($_SERVER['REQUEST_METHOD'] == "get" || $_SERVER['REQUEST_METHOD'] == "GET"){

        return strip_tags(trim($_GET[$alan_isimi]));

    }else{

        die("<div style='background-color: #f1f4f4;color:#afaaaa;border:1px dotted #afaaaa;padding: 10px; border-radius: 4px;'> <strong>". $alan_isimi ."</strong> isimli GET bulunamadı</div>");

    }
}

controllers dizini içerisindeki profile.php sınıf dosyamızı açıyoruz ve submit_form() methodumuzu aşağıdaki gibi kodluyoruz.

Şimdi views dizini içerisindeki users.php dosyamızın içerisindeki form methodunu GET olarak değiştiriyoruz ve http://localhost/netron/profile/user url'imizi açıyoruz ve aşağıda olduğu gibi formumuzu dolduruyoruz.

ekranciktisi_44.jpg


Butona tıkladığımız da ilgili verilerin başarıyla alındığını görebiliyoruz.

ekranciktisi_46.jpg
 
Helper URI Fonksiyonu

Bu fonksiyonumuz ile bir formdan gelecek olan url'in parametresini yakalayacağız. Bunun için ilk önce views dizini içerisindeki users.php içerisindeki form'un action alanına profile/submit_form/5 linkini ekleyelim libraries dizini içerisindeki netron.php dosyasını açıyoruz ve en altına aşağıdaki kodlarımızı ekliyoruz.

PHP:
 /*
    * URI Fonkisyonu
 */

public function uri($segment)
{
    if(isset($_GET['url'])){

        $url = $_GET['url'];

        /*
            * rtrim () methodu sağ taraftaki fazladan boşlukları kaldırır.
         */

        $url = rtrim($url);

        /*
            * FILTER_SANITIZE_URL kullanarak, url üzerinden gelebilecek illegal karakterleri temizliyoruz.
         */

        $url = filter_var($url, FILTER_SANITIZE_URL);

        /*
            * explode() methodu ile "/" slash karakterini baz alarak gelen url'i slash karakterinden parçalayarak dizi haline çeviriyoruz.
         */

        $url = explode("/", $url);

        /*
         * Return ile değeri gönderiyoruz. Aksi takdirde değerleri alamayız!
         */
        return $url[$segment];
    }
}

Yukarıdaki bu fonkisyonumuza bakacak olursak, libraries dizini içerisinde bulunan rout.php içerisindeki url() fonksiyonumuzdan aldığımızı görebiliriz. Sadece değişiklik olarak $segment adından bir parametre alıyor ve return olarakta return $url[$segment]; gelen parametreyi geriye döndürüyor. Şimdi controllers dizini içerisindeki submit_form() methodumuzu aşağıdaki gibi kodlayalım.

PHP:
public function submit_form()
{
    echo $this->post('isim');
    echo $this->post('adres');
    echo $this->uri(1);
}

Şimdi forumumuza tarayıcımız üzerinden http://localhost/netron/profile/user url'ini çalıştırıp foruma gidelim ve forumu doldurup butona basalım. Aşağıda görüldüğü gibi formdaki yönleneceği method ismini yakalamış olduk. Bunu $this->uri(1) dediğimiz için aldık. 1 dediğimiz de method ismini verir.

ekranciktisi_47.jpg

Şimdi de controllers dizini içerisindeki profile.php dosyası içerisindeki user() fonksiyonunda bulunan $this->uri(1) fonskiyonuna, $this->uri(2) diyerek tarayıcımız da çalıştıralım. Bu seferde parametre id değerini yakaladığımızı görebiliriz.

ekranciktisi_48.jpg

Burada dikkat edeceğimiz $this->uri(1) dediğimiz de method adını yakalıyoruz. eğer $this->uri(2) dersek id parametresini yakalamış oluyoruz.
 
Helper - Form Doğrulama (Validation) Fonksiyonu

Form doğrulama işlemleri kritik önem teşkil etmektedir. Kullanıcıların girmiş olduğu verileri bir doğrulamadan geçirmemiz yani validation işlemine tabii tutmamız gerekir. Şimdi libraries dizini içerisinde form_dogrulama.php adında bir dosya oluşturuyoruz ve içerisine aşağıdaki kodlarımızı ekliyoruz.

PHP:
<?php

trait form_dogrulama
{
    public function dogrulama()
    {
        echo "Doğrulama alanı geldi";
    }
}

?>

Yukarıdaki kodda class (sınıf) yerine trait kullandık. Trait nedir diye soracak olursanız şöyle açıklayabiliriz: trait: Sınıflar için özellik ve medhod gruplarının oluşturulması için kullanılır. Traitler'de class kuralları aynen geçerlidir. Tek farkı içerisinde const yani sabitler kullanamıyoruz. Şimdi de bu trait'i libraries dizini içerisindeki netron.php sınıf dosyamızın class içerisinde olmak şartıyla en üstüne aşağıdaki gibi ekleyelim.

PHP:
use form_dogrulama;

Yukarıda yeni bir ifade kullandık. Bu da use ifadesi. Use ifadesi nedir diye soracak olursanız şöyle açıklayabiliriz: use: Daha önceden tanımlanmış olan herhangi bir özellik ve method grubunu, ilgili sınıfa tanımlamak ya da uygulamak için kullanılır. yani biz burada bir form_dogrulama.php dosyamızı netron.php sınıfımızda kullanmak için tanımladık. netron.php sınıfımızı her controllers içerisindeki kontrol dosyalarımızda kullandığımız için bunu netron.php dosyasında tanımlamak durumundayız. Şimdi bunun tanımlı olup olmadığını görelim. Bunun için controlllers dizini içerisindeki profile.php dosyasını açıyoruz ve içerisindeki user() methodumuzu aşağıdaki gibi kodluyoruz.

PHP:
public function user()
{
    $this->dogrulama();
    $this->view("users");

}

Şimdi bunu user() methoduna eklediğimiz için tarayıcımız da http://localhost/netron/profile/user url'ini çalıştırıyoruz ve aşağıda görüldüğü gibi Doğrulama alanı geldi şeklinde uyarımızı görebiliyoruz. Bunu görüyorsak eğer, form_dogrulama trait'imiz başarıyla tanımlanmış demektir.

ekranciktisi_49.jpg

Şimdi libraries dizini içerisindeki form_dogrulama.php dosyasını açalım ve içerisindeki kodları aşağıdaki kodlarla değiştirelim.

PHP:
<?php

trait form_dogrulama
{
    public $hatalar = [];

    public function dogrulama($alan_ismi, $label_ismi, $kural)
    {
     
    }
}

?>

Yukarıdaki koda bakacak olursak, fonksiyonumuza $alan_ismi, $label_ismi, $kural isminde 3 ayrı parametre ekledik.

controllers dizini içerisindeki profile.php dosyamızı açalım ve içerisindeki submit_form() methodunu aşağıdaki gibi kodlayalım.

PHP:
public function user()
{
    $this->dogrulama('kullanic_adi', 'Kullanıcı Adı', 'gerekli|int_yok');

}

Yukarıdaki bu kodu açıklayalım. kullanic_adi alanı formdan gelen name değeridir. Kullanıcı Adı ise bizim label etiketimizin ismidir. gerekli|int_yok alanı ise, bizim gerekli ve interger bir değer girilemez alanımızdır biz bunu | dik bir çizgi ile ayırdık ileride bundan bahsedeceğiz.

Şimdi libraries dizini içerisindeki form_dogrulama.php dosyasını açalım ve içerisindeki kodları aşağıdaki kodlarla değiştirelim.

PHP:
<?php

trait form_dogrulama
{
    public $hatalar = [];

    public function dogrulama($alan_ismi, $label_ismi, $kural)
    {
       if($_SERVER["REQUEST_METHOD"] == "POST" || $_SERVER["REQUEST_METHOD"] == "post"){

           $data = trim($_POST[$alan_ismi]);

       }elseif($_SERVER["REQUEST_METHOD"] == "GET" || $_SERVER["REQUEST_METHOD"] == "get"){

           $data = trim($_GET[$alan_ismi]);
       }

       $kural = explode("|", $kural);

       if(in_array("gerekli", $kural)){

           if(empty($data)){

               return $this->hatalar[$alan_ismi] = $label_ismi . " alanı gerekli alandır!";
           }
       }
    }
}

?>

Yukarıdaki kodu açıklayalım: if ve else blogları içinde get ve post verileri gelecek dedik. $kural = explode("|", $kural); parametresinden gelen gerekli ve int_yok değerleri expolode ile | dik çizgiden parçaladık. Sonra in_array("gerekli", $kural) gerekli alan $kural dahilinde var mı diyerek in_array bunu buldurduk. Daha sonra if ile empty($data) boş ise dedik return $this->hatalar[$alan_ismi] = $label_ismi . " alanı gerekli alandır!"; uyarısı verdirdik. Tabii bu $hatalar değişkenini görüldüğü üzere trait'imizin başlangıcına public olarak tanımladık.

Şimdi libraries dizini içerisindeki form_dogrulama.php dosyasını açalım ve en altına aşağıdaki kodları ekleyelim.

PHP:
public function calistir()
{
    if(empty($this->hatalar)){

        return true;

    }else{

        return false;

    }
}

Şimdi controllers dizini içerisindeki profile.php dosyasını açalım ve submit_form() fonksiyonu aşağıdaki kodlarla değiştirelim.

PHP:
public function submit_form()
{
    $this->dogrulama('kullanici_adi', 'Kullanıcı Adı', 'gerekli|int_yok');

    if($this->calistir()){

        echo "Form alanları dolu geldi";

    }else{

        print_r($this->hatalar);
    }
}

Şimdi burada inputun sadece kullanıcı adı tarafına bir doğrulama işlemi yaptık. Tarayıcımızda test edelim. http://localhost/netron/profile/user alanına gidelim önce formda boş gönderim yapalım.

ekranciktisi_50.jpg

Sonra da sadece kullanıcı alanı dolu şekilde bir gönderim yapalım.

ekranciktisi_51.jpg

Görüldüğü gibi artık form alanını dolu veya boş şeklinde doğrulama fonksiyonumuzdan geçirebiliyoruz. Bunu daha da geliştireceğiz. Şimdi de kullanıcı adı inputuna sadece alfabetik karakterler girebilir doğrulamasını yapalım. Bunun için form_dogrulama.php dosyasını açalım. dogrulama() fonksiyonunun içindeki aşağıdaki kodu bulalım.

PHP:
$kural = explode("|", $kural);

Bunun hemen üstüne aşağıdaki desen kodumuzu ekleyelim.

PHP:
$desen = "/^[a-zA-Z ÇçÖöıİğĞşŞÜü]+$/u";

Şimdi dogrulama() fonkisyonu içerisinde bir if koşulu daha yapacağız (doğrulama) fonksiyonu içinde yapacağız burayı özellikle belirtiyorum. Kod bütününü daha sonra ekleyeceğiz. Şimdilik Aşağıdaki if kontrolünü ekleyelim.

PHP:
/*
    * değer alfabetik karakter olmalıdır
*/

if(in_array("int_yok", $kural)){

    if(!preg_match($desen, $data)){

        return $this->hatalar[$alan_ismi] = $label_ismi . " sadece alfabetik karakter içerebilir!";
    }
}

Şimdi controllers dizini içerisindeki profile.php dosyasını açalım ve submit_form() methodunu aşağıdaki method kodlarıyla değiştirelim.


PHP:
public function submit_form()
{
    $this->dogrulama('kullanici_adi', 'Kullanıcı Adı', 'gerekli|int_yok');

    if($this->calistir()){

        echo $this->post("kullanici_adi");

    }else{

        print_r($this->hatalar);
    }
}

Şimdi tarayıcımızda http://localhost/netron/profile/user url'ini çalıştırıyoruz ve adınızı girin alanına sayısal 123456 gibi sayılar girip butona basıyoruz.

ekranciktisi_52.jpg

Şimdi de sadece sayısal yani numeric içerik kabul eden inputumuzun doğrulama kodlarını yazalım. İlk önce views dizini içerisindeki users.php dosyasını açıyoruz ve aşağıdaki inputu buluyoruz.

PHP:
<?php echo form_input(['type' => 'text', 'name' => 'kullanici_adi', 'id' => 'input-id', 'class' => 'form-control', 'placeholder' => 'Kullanıcı adınızı giriniz', 'value' => '']); ?><br />

Aşağıdaki input ile değiştiriyoruz.

PHP:
<?php echo form_input(['type' => 'text', 'name' => 'numara', 'id' => 'input-id', 'class' => 'form-control', 'placeholder' => 'Numara giriniz', 'value' => '']); ?><br />

Şimdi de libraries dizini içerisindeli form_dogrulama.php dosyasını açıyoruz ve aşağıdaki kodu buluyoruz.

PHP:
$desen = "/^[a-zA-Z ÇçÖöıİğĞşŞÜü]+$/u";

Hemen altına aşağıdaki kodu ekliyoruz.

PHP:
$int_desen = "/^[0-9]+$/";

Şimdi de libraries dizini içerisindeli form_dogrulama.php dosyasını açıyoruz ve dogrulama() fonkisyonun içinde en alt kısıma aşağıdaki kodları ekliyoruz.

PHP:
if(in_array("int", $kural)){

    if(!preg_match($int_desen, $data)){

        return $this->hatalar[$alan_ismi] = $label_ismi . " sadece sayısal değer içerebilir!";

    }

}

Son olarak controllers dizini içerisindeki profile.php dosyasını açıyoruz ve submit_form() fonkisyonun içinde kodları aşağıdaki kodlarla değiştiriyoruz.

PHP:
public function submit_form()
{
    $this->dogrulama('numara', 'Numara', 'gerekli|int');

    if($this->calistir()){

        echo $this->post("numara");

    }else{

        print_r($this->hatalar);
    }
}

Şimdi tarayıcımızda http://localhost/netron/profile/user url'ini çalıştırıyoruz ve numara girin alanına alfabetik fikret veya ismini yazıp butona basıyoruz. Görüldüğü gibi bu inputumuz da artık sadece sayısal değerler kabul etmektedir. Örnek çıktı aşağıda.

ekranciktisi_53.jpg

Sıradaki işlemimiz kullanıcının minimum gireceği bir değerin doğrulamasını yapmak. Bu anlatım biraz detaylı olacak o yüzden dikkatle takip ediniz. controllers dizini içerisindeki profile.php dosyasını açıyoruz ve submit_form() fonkisyonun içinde kodları aşağıdaki kodlarla değiştiriyoruz.

PHP:
public function submit_form()
{
    $this->dogrulama('kullanici_adi', 'Kullanıcı Adı', 'int_yok|min_uzunluk|4|gerekli');

    if($this->calistir()){

        echo $this->post("kullanici_adi");

    }else{

        print_r($this->hatalar);
    }
}

Burada dikkat ederseniz 'int_yok|min_uzunluk|4|gerekli' alanına min_uzunluk ve 4 diye iki alan daha ekledik. Bunların sırası bizim için çok önemlidir. Yukarıdaki gördüğünüz sıraya dikkat edeceksiniz. Şimdi libraries dizini içerisindeki form_dogrulama.php dosyasını açıyoruz ve dogrulama() fonkisyonun içine, en alt kısıma aşağıdaki kodları ekliyoruz.

PHP:
/*
    * Minimum uzunluk kontrolü
*/

if(in_array("min_uzunluk", $kural)){

    $min_uzunluk_index = array_search("min_uzunluk", $kural);

    $min_uzunluk_degeri = $min_uzunluk_index + 1;

    $min_uzunluk_degeri = $kural[$min_uzunluk_degeri];

if(strlen($data) < $min_uzunluk_degeri){

    return $this->hatalar[$alan_ismi] = $label_ismi . " girilen karakter çok kısa en az " . $min_uzunluk_degeri . " karakter olmalıdır.";
}

}

Yukarıdaki kodu detaylı bir şekilde açıklamak istiyoruz. in_array("min_uzunluk", $kural) diyerek elamanın olup olmadığuna bakıyoruz. in_array nedir diye soracak olursanız, in_array() : Dizi içerisinde bulunan eleman veya elemanlar dahilinde, belirtilecek olan elemanın olup olmadığını kontrol etmek için kullanılır.

Elamanı in_array ile bulduğumuza göre, daha sonra $min_uzunluk_index = array_search("min_uzunluk", $kural); diyerek ilgili elemanın anahtarını buluyoruz. Peki array_search nedir diye soracak olursanız, array_search() : Dizi içerisinde bulunan eleman veya elemanlar dahilinde, belirtilecek olan elemanı aramak ve ilgili elemanın anahtarını bulmak için kullanılır.

Şimdi buraya kadar olan kodlamanın ne yaptığına bakalım.

Bizim dizi olarak verdiğimiz kurallarımız neydi? int_yok|min_uzunluk|4|gerekli

Aşağıdaki görseli inceleyelim.

ekranciktisi_54.jpg

Yukarıdaki görseli incelediğimizde verilerimizin bize dizi olarak geldiğini söylemekte. Şimdi biz $min_uzunluk_index = array_search("min_uzunluk", $kural); diyerek $min_uzunluk_index değeriyle 1 numaralı index'e sahip değeri yakaladık. index değerleri her zaman 0'dan başlar ve 1,2,3,4,5 diye sırayla gider. 1. index değerini bulduğumuza göre, görsele baktığımız da birde bize 2. index değeri lazım yani 4 rakamını tutan index değeri.

İşte $min_uzunluk_degeri = $min_uzunluk_index + 1; bununla da index değerini bir arttırarak 2. index değerine ulaşmış oluyoruz.

$min_uzunluk_degeri = $kural[$min_uzunluk_degeri]; bununla da minimum uzunluk değerini depoluyoruz.

daha sonra if(strlen($data) < $min_uzunluk_degeri) strlen ile girilen değer küçükse bizim verdiğimiz değerden diyerek, hata mesajını return ile kullanıcıya cevap olarak gönderiyoruz. strlen() nedir diye soracak olursanız, strlen() : Belirtilecek olan içeriğin karakter sayısını bularak, bulduğu değeri geriye döndürür.

Karakter kodlamasından dolayı karakter görünümünde hata alırsanız bunun için mb_strlen kullanabilirsiniz. mb_strlen() : Belirtilecek olan içeriğin, belirtilecek olan karakter kodlaması dahilinde gelişmiş olarak karakter sayısını bularak, bulduğu değeri geriye döndürmek için kullanılır. Şimdi tarayıcımızda 4 karakter den az olacak şekilde inputu doldurup gönderelim. Örnek çıktı aşağıdaki gibi olacaktır.

ekranciktisi_55.jpg

Şimdi yapacağımız kontrolün min_uzunluk kontrolünden hiç farkı yok bu seferde maksimum uzunluk girilebilir doğrulamasını yapacağız. Bunun için controllers dizini içerisindeki profile.php dosyasını açıyoruz ve içerisindeki submit_form() methodunu aşağıdaki method ile değiştiriyoruz.

PHP:
public function submit_form()
{
    $this->dogrulama('kullanici_adi', 'Kullanıcı Adı', 'int_yok|max_uzunluk|8|gerekli');

    if($this->calistir()){

        echo $this->post("kullanici_adi");

    }else{

        print_r($this->hatalar);
    }
}

Şimdi libraries dizini içerisindeki form_dogrulama.php dosyasını açıyoruz ve içerisindeki dogrulama() fonskiyonun en altına aşağıdaki kodlarımızı ekliyoruz.

PHP:
/*
    * Maximum uzunluk kontrolü
*/

 if(in_array("max_uzunluk", $kural)){

     $max_uzunluk_index = array_search("max_uzunluk", $kural);

     $max_uzunluk_degeri = $max_uzunluk_index + 1;

     $max_uzunluk_degeri = $kural[$max_uzunluk_degeri];

     if(strlen($data) > $max_uzunluk_degeri){

         return $this->hatalar[$alan_ismi] = $label_ismi . " girilen karakter çok uzun en fazla " . $max_uzunluk_degeri . " karakter olmalıdır.";
     }

 }

Şimdi tarayıcımızda 8 karakter den fazla olacak şekilde inputu doldurup gönderelim. Örnek çıktı aşağıdaki gibi olacaktır.

ekranciktisi_56.jpg

Sıradaki işlemimiz şifre alanı ve şifre tekrarı alanlarının doğrulanması. Bunun için views dizini içerisindeki users.php dosyasını açıyoruz. adres inputunun altına aşağıdaki input alanlarını ekliyoruz.

PHP:
<?php echo form_input(['type' => 'password', 'name' => 'sifre', 'id' => 'input-id', 'class' => 'form-control', 'placeholder' => 'sifre giriniz', 'value' => '']); ?><br />

<?php echo form_input(['type' => 'password', 'name' => 'sifre_tekrar', 'id' => 'input-id', 'class' => 'form-control', 'placeholder' => 'sifre tekrar giriniz', 'value' => '']); ?><br />

Şimdi controllers dizini içerisindeki profile.php dosyasını açıyoruz. submit_form() methodunu aşağıdaki method ile değiştiriyoruz.

PHP:
public function submit_form()
{
    $this->dogrulama('kullanici_adi', 'Kullanıcı Adı', 'int_yok|min_uzunluk|5|gerekli');
    $this->dogrulama('adres', 'Adres', 'int_yok|min_uzunluk|5|gerekli');
    $this->dogrulama('sifre', 'Şifre', 'min_uzunluk|5|gerekli');
    $this->dogrulama('sifre_tekrar', 'Şifre Tekrarı', 'onay_sifre|sifre|gerekli');

    if($this->calistir()){

        echo $this->post("kullanici_adi");
        echo $this->post("adres");
        echo $this->post("password");

    }else{

        print_r($this->hatalar);
    }
}

Şimdi de libraries dizini içerisindeki form_dogrulama.php dosyasını açıyoruz. dogrulama() methodunu en altına aşağıdaki kodu ekliyoruz.

PHP:
/*
    * Şifre tekrarı onayı
*/

if(in_array("onay_sifre", $kural)){

    $onay_sifre_index = array_search("onay_sifre", $kural);
    $onay_sifre_index = $onay_sifre_index + 1;
    $onay_sifre_kural = $kural[$onay_sifre_index];

    if($_SERVER["REQUEST_METHOD"] == "POST" || $_SERVER["REQUEST_METHOD"] == "post"){

        $sifre = trim($_POST[$onay_sifre_kural]);

    }elseif($_SERVER["REQUEST_METHOD"] == "GET" || $_SERVER["REQUEST_METHOD"] == "get"){

        $sifre = trim($_GET[$onay_sifre_kural]);
    }

    if($data !== $sifre){

        return $this->hatalar[$alan_ismi] = $label_ismi . " şifreleriniz uyuşmuyor";

    }
}

Şimdi tarayıcımızda iki şifre alanına da farklı şifreler girip test edelim. Örnek çıktı aşağıdaki gibi olacaktır.

ekranciktisi_57.jpg

Sıradaki işlemimiz email kontrolü, burada bizim veritabanımız da daha önce aynı email adresi ile kayıt olundu ise bunu kullanıcıya hata olarak iletmemiz gerekecek. Bunun için views dizini içerisindeki users.php dosyasını açıyoruz ve kullanıcı adı inputunun hemen altına aşağıdaki inputu ekliyoruz.

PHP:
<?php echo form_input(['type' => 'email', 'name' => 'email', 'id' => 'input-id', 'class' => 'form-control', 'placeholder' => 'Email giriniz', 'value' => '']); ?><br />

Şimdi de controllers dizini içerisindeki profile.php dosyasını açıyoruz ve submit_form() methodunu aşağıdaki method ile değiştiriyoruz.

PHP:
public function submit_form()
{
    $this->dogrulama('kullanici_adi', 'Kullanıcı Adı', 'int_yok|min_uzunluk|5|gerekli');
    $this->dogrulama('adres', 'Adres', 'int_yok|min_uzunluk|5|gerekli');
    $this->dogrulama('sifre', 'Şifre', 'min_uzunluk|5|gerekli');
    $this->dogrulama('sifre_tekrar', 'Şifre Tekrarı', 'onay_sifre|sifre|gerekli');
    $this->dogrulama('email', 'Email', 'benzersiz|users|gerekli');

    if($this->calistir()){

        echo $this->post("kullanici_adi");
        echo $this->post("adres");
        echo $this->post("password");

    }else{

        print_r($this->hatalar);
    }
}

Yukarıdaki koddaki şu alanı $this->dogrulama('email', 'Email', 'benzersiz|users|gerekli'); açıklamak istiyoruz.

benzersiz alanı emailin benzersiz mi kontrolünü yapacağımız seçenek.

users alanı ise, database alanındaki tablomuzun ismi.

Hazır tablomuzun isminden bahsetmişken, phpmyadmin alanına gidin ve users tablosuna email sütunu daha ekleyin ismi email olacak varchar 255 olması yeterli.

Şimdi de libraries dizini içerisindeki form_dogrulama.php dosyamızı açalım ve dogrulama() fonksiyonunun en altına aşağıdaki kodu ekleyelim.

PHP:
/*
* Email başka biri tarafından kullanılıyor mu yani veritabanımızda daha önce kayıtlı mı kontrolü.
*/

if(in_array("benzersiz", $kural)){

    $benzersiz_index = array_search("benzersiz", $kural);

    $tablo_index = $benzersiz_index + 1;

    $tablo_ismi = $kural[$tablo_index];

    require_once "../system/libraries/database.php";

    $db = new Database();

if($db->Select_Where($tablo_ismi, [$alan_ismi => $data])){

    if($db->satirSay() > 0){

        return $this->hatalar[$alan_ismi] = $label_ismi . " zaten kullanılıyor";

    }

}

}

Yukarıdaki kodu açıklayalım:

if(in_array("benzersiz", $kural) diyerek elamanın olup olmadığını kontrol ettik.

$benzersiz_index = array_search("benzersiz", $kural); diyerek anahtarına eriştik.

$tablo_index = $benzersiz_index + 1; diyerek tablo adına da eriştik.

$tablo_ismi = $kural[$tablo_index]; tablo adını $tablo_ismi değişkenine depoladık.

require_once "../system/libraries/database.php"; diyerek db sınıfımızı dahil ettik.

$db = new Database(); database sınıfımızı oluşturduk.

if içerisinde $db->Select_Where($tablo_ismi, [$alan_ismi => $data] diyerek sorgumuzu yazdık.

$db->satirSay() > 0 sorgudan dönen değer büyükse 0'dan o zaman bu mail kullanılıyordur diyerek return $this->hatalar[$alan_ismi] = $label_ismi . " zaten kullanılıyor"; hata mesajımızı kullanıcıya gönderdik.

Tarayıcıda çalıştırmadan önce veritabanınızda users tablosunda bir kullanıcıya mail eklemesi yapın ve daha sonra kaydettiğiniz maili form alanındaki tüm verileri doldurarak giriniz. Aşağıdaki çıktıyı alacaksınız.

ekranciktisi_58.jpg

Sıradaki işlemimiz form'daki inputların altında bir hata olduğunda hata çıktılamasını kullanıcıya göstermek. Bunun için views dizini içerisindeki users.php dosyasını açıyoruz form alanını aşağıdaki form alanı ile değiştiriyoruz.

PHP:
<?php echo form_ac("profile/submit_form", "post", ['class' => 'form']); ?>

<?php echo form_input(['type' => 'text', 'name' => 'kullanici_adi', 'id' => 'input-id', 'class' => 'form-control', 'placeholder' => 'Kullanıcı adı giriniz', 'value' => '']); ?><br />

<?php if(!empty($this->hatalar['kullanici_adi'])): ?>
    <?php echo $this->hatalar['kullanici_adi']; ?>
<?php endif; ?><br />

<?php echo form_input(['type' => 'email', 'name' => 'email', 'id' => 'input-id', 'class' => 'form-control', 'placeholder' => 'Email giriniz', 'value' => '']); ?><br />

<?php if(!empty($this->hatalar['email'])): ?>
    <?php echo $this->hatalar['email']; ?>
<?php endif; ?><br />

<?php echo form_input(['type' => 'text', 'name' => 'adres', 'id' => 'input-id', 'class' => 'form-control', 'placeholder' => 'Adres giriniz', 'value' => '']); ?><br />

<?php if(!empty($this->hatalar['adres'])): ?>
    <?php echo $this->hatalar['adres']; ?>
<?php endif; ?><br />

<?php echo form_input(['type' => 'password', 'name' => 'sifre', 'id' => 'input-id', 'class' => 'form-control', 'placeholder' => 'sifre giriniz', 'value' => '']); ?><br />

<?php if(!empty($this->hatalar['sifre'])): ?>
    <?php echo $this->hatalar['sifre']; ?>
<?php endif; ?><br />

<?php echo form_input(['type' => 'password', 'name' => 'sifre_tekrar', 'id' => 'input-id', 'class' => 'form-control', 'placeholder' => 'sifre tekrar giriniz', 'value' => '']); ?><br />

<?php if(!empty($this->hatalar['sifre_tekrar'])): ?>
    <?php echo $this->hatalar['sifre_tekrar']; ?>
<?php endif; ?><br />

<?php $data = ['name' => 'giris', 'class' => 'btn btn-default', 'id' => 'btn-id', 'value' => 'Ekle']; ?>

<?php echo form_submit($data); ?>

<?php echo form_kapat(); ?>

Yukarıdaki koda dikkat ederseniz inputların altına sadece error hata kodlarını ekledik. Eklediğimiz bu kod örneği aşağıdadır. Sadece alan_ismi alanlarına inputun name isimleri gelecek.

PHP:
<?php if(!empty($this->hatalar['alan_ismi'])): ?>
    <?php echo $this->hatalar['alan_ismi']; ?>
<?php endif; ?><br />

Şimdi controllers dizini içerisindeki profile.php dosyasını açıp submit_form() methodunu aşağıdaki method ile değiştirin.

PHP:
public function submit_form()
{
    $this->dogrulama('kullanici_adi', 'Kullanıcı Adı', 'int_yok|min_uzunluk|5|gerekli');
    $this->dogrulama('adres', 'Adres', 'int_yok|min_uzunluk|5|gerekli');
    $this->dogrulama('sifre', 'Şifre', 'min_uzunluk|5|gerekli');
    $this->dogrulama('sifre_tekrar', 'Şifre Tekrarı', 'onay_sifre|sifre|gerekli');
    $this->dogrulama('email', 'Email', 'benzersiz|users|gerekli');

    if($this->calistir()){

        echo $this->post("kullanici_adi");
        echo $this->post("adres");
        echo $this->post("password");

    }else{

        $this->view("users");
    }
}

Şimdi tarayıcınızda http://localhost/netron/profile/user url'ini çalıştırın ve tüm inputların içerisi boş olması kaydıyla buttona tıklayın. Aşağıdaki çıktıyı alacaksınız.

ekranciktisi_59.jpg


Sıradaki işlemimiz kullanıcı formu doldurduğunda eğer bir hata olursa forma girdiği veriler silinmesin (şifre alanı hariç) kullanıcı nerede hata yaptığını görsün ve düzeltsin. O halde libraries dizini içeriisndeki form_dogrulama.php dosyasını açalım ve bu sefer dosyanın en altında yeni aşağıdaki gibi bir method oluşturalım.

PHP:
/*
    * Form input degerlerini set etme
*/

public function input_verisi_set($alan_ismi)
{
    if($_SERVER["REQUEST_METHOD"] == "POST" || $_SERVER["REQUEST_METHOD"] == "post"){

        return $_POST[$alan_ismi];

    }elseif($_SERVER["REQUEST_METHOD"] == "GET" || $_SERVER["REQUEST_METHOD"] == "get"){

        return $_GET[$alan_ismi];
    }
}

Şimdi ilgili fonksiyonumuzu form alanımızdaki value alanlarına ekleyelim. views dizini içerisinde users.php dosyasını açalım ve içerisindeki formu aşağıdaki ile değiştirelim.

PHP:
<?php echo form_ac("profile/submit_form", "post", ['class' => 'form']); ?>

<?php echo form_input(['type' => 'text', 'name' => 'kullanici_adi', 'id' => 'input-id', 'class' => 'form-control', 'placeholder' => 'Kullanıcı adı giriniz', 'value' => $this->input_verisi_set('kullanici_adi')]); ?><br />

<?php if(!empty($this->hatalar['kullanici_adi'])): ?>
    <?php echo $this->hatalar['kullanici_adi']; ?>
<?php endif; ?><br />

<?php echo form_input(['type' => 'email', 'name' => 'email', 'id' => 'input-id', 'class' => 'form-control', 'placeholder' => 'Email giriniz', 'value' => $this->input_verisi_set('email')]); ?><br />

<?php if(!empty($this->hatalar['email'])): ?>
    <?php echo $this->hatalar['email']; ?>
<?php endif; ?><br />

<?php echo form_input(['type' => 'text', 'name' => 'adres', 'id' => 'input-id', 'class' => 'form-control', 'placeholder' => 'Adres giriniz', 'value' => $this->input_verisi_set('adres')]); ?><br />

<?php if(!empty($this->hatalar['adres'])): ?>
    <?php echo $this->hatalar['adres']; ?>
<?php endif; ?><br />

<?php echo form_input(['type' => 'password', 'name' => 'sifre', 'id' => 'input-id', 'class' => 'form-control', 'placeholder' => 'sifre giriniz', 'value' => '']); ?><br />

<?php if(!empty($this->hatalar['sifre'])): ?>
    <?php echo $this->hatalar['sifre']; ?>
<?php endif; ?><br />

<?php echo form_input(['type' => 'password', 'name' => 'sifre_tekrar', 'id' => 'input-id', 'class' => 'form-control', 'placeholder' => 'sifre tekrar giriniz', 'value' => '']); ?><br />

<?php if(!empty($this->hatalar['sifre_tekrar'])): ?>
    <?php echo $this->hatalar['sifre_tekrar']; ?>
<?php endif; ?><br />

<?php $data = ['name' => 'giris', 'class' => 'btn btn-default', 'id' => 'btn-id', 'value' => 'Ekle']; ?>

<?php echo form_submit($data); ?>

<?php echo form_kapat(); ?>

Şimdi tarayıcınızda http://localhost/netron/profile/user url'ini çalıştırın ve şifre alanları hariç tüm inputların içerisinin dolu olması kaydıyla buttona tıklayın. Girilen değerlerin kaldığı çıktıyı alacaksınız. Örnek çıktı aşağıdadır.

ekranciktisi_60.jpg
 

Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.