Kullanıcı Yönetimi

PHP ile kullanıcı yönetimi örneği yapıyoruz. Bu örnekte kayıt ol, giriş yap ve çıkış yap sayfaları bulunmaktadır.

Merhaba arkadaşlar,

Bu yazımızda kullanıcı yönetimini örnekleyen bir uygulama gerçekleştireceğiz. Bu uygulamamızda veritabanı ile iletişim kurarak içersinde:

  1. Kayıt Ol
  2. Giriş yap
  3. Çıkış Yap

özellikleri bulunan bir örnek uygulama geliştireceğiz.

Veritabanı Oluşturma

Örneğimizde veritabanı ile iletişim kuracağımız için ilk olarak bir adet veritabanı oluşturalım (Ben bu örneğimiz için demo adında bir veritabanı oluşturacağım. ).

Oluşturduğumuz veritabanına bir adet User adında tablo ekleyelim. Tablomuzda 3 adet satır bulunacaktır bu satırlar:

  1. id => integer tipinde. AUTO_INCREMENT
  2. username => varchar tipinde
  3. password => varchar tipinde
CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `username` varchar(254) COLLATE utf8_turkish_ci NOT NULL,
  `password` varchar(254) COLLATE utf8_turkish_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci;

SQL komutu ile oluşturmak isteyenler için tablonun SQL kodunu yukarıda belirttim.


Proje Klasör Yapısı

  1. includes
    1. header.php
    2. footer.php
  2. settings
    1. Database.php
    2. class.User.php
  3. index.php
  4. login.php
  5. register.php
  6. logout.php

şeklinde olacaktır. Bu sayede projemizi daha düzgün bir şekilde yönetebileceğiz.


settings/Database.php

Database.php dosyamızın içerisinde veritabanına bağlanma işlemini gerçekleştireceğiz. Bunun için Database isminde bir sınıf oluşturalım. Oluşturduğumuz sınıfın içerisinde veritabanına bağlanmamız için gerekli olacak temel değişkenleri tanımlayalım.

  • host: Veritabanı sunucumuz. (localhost)
  • db: Veritabanı adımız. (demo)
  • user: Veritabanı kullanıcı adımız. (root)
  • pass: Veritabanı şifremiz. (boş)

Değişkenlerimizi oluşturduktan sonra yapıcı metodumuz (__construct) içerisinde değişkenlere uygun değerleri değerlerimizi atayalım.

Veritabanı bağlantımız için connect adında bir metot oluşturalım ve PHP PDO özelliği ile bağlantımızı gerçekleştirelim. Oluşturduğumuz bağlantıyı metot dışarısına return (geri döndürmek) edelim.

<?php 
class Database  
{
    private $host;
    private $db;
    private $user;
    private $pass;
    public function __construct()
    {
        $this->host = "localhost";
        $this->db   = "demo";
        $this->user = "root";
        $this->pass = "";
    }
    public function connect()
    {
        $conn = new PDO("mysql:host=".$this->host.";dbname=".$this->db.";", $this->user, $this->pass);
        return $conn;
    }
}

settings/class.User.php

class.User.php dosyamızın içerisine ilk olarak veritabanımızı (Database.php) dahil edelim. Ardından User adında bir sınıf oluşturalım.

Oluşturduğumuz sınıfımızın içerisine bir adet değişken oluşturalım.

  • conn: Veritabanı nesnemizin tutulacağı değişken

Sınıfın kurucu metodunda (__construct) Database sınıfımızda yeni bir nesne oluşturalım ve bu nesnemizin connect metodunu sınıfımızın içerisinde oluşturduğumuz conn nesnesine atayalım.

Veritabanı nesnemizi de oluşturduğumuza göre sınıfımızda olacak fonksiyonları belirleyebiliriz.

  1. Register: Kullanıcı kayıt etmek için kullanılacak metot
  2. Login: Kullanıcı girişi için kullanılacak metot
  3. Logout: Kullanıcı çıkışı için kullanılacak metot

Sınıfımızı oluşturmaya ilk olarak Register metotu ile başlayalım.

settings/class.User.php Register Metodu

Register metodu ile veritabanımıza yeni bir kullanıcı ekleyeceğiz. Kullanıcı ekleyebilmek için gerekli olan verilerin neler olduğunu tespit edelim.

  1. username: Kullanıcı adı
  2. password: Şifre
  3. rePassword: Şifre tekrarı

Kullanıcıdan 3 adet değer alacağız ve bu alacağımız değerleri kontrol edeceğiz.

İlk olarak kullanıcıdan gelen bu 3 değerin en az 4 karakter olması gerektiğini belirtelim.

Şifre ile şifre tekrar değerlerinin birbirleri ile aynı olup olmadığını kontrol edelim.

Kayıt olunmak istenen kullanıcı adı ile başka bir kullanıcı kayıtlı mı kontrol edelim.

Kontrollerimizden başarıyla geçilmesi durumunda kullanıcıdan alınan şifre değerini md5() fonksiyonu ile şifreleyelim. Oluşturulan yeni şifre ve kullanıcı adı ile veritabanımıza kayıt talebinde bulunalım.

Kaydın başarılı olması durumunda kullanıcıyı login.php yönlendirelim.

Kaydın başarısız olması durumunda kullanıcıya bir hata mesajı gösterelim.


settings/class.User.php Login Metodu

Login metodu ile kullanıcının sisteme girebilmesi için gerekli olan parametreleri belirleyelim.

  1. username: Kullanıcı adı
  2. password: Kullanıcı şifre

Kullanıcıdan gelen bu değerleri belirli şartlara göre kontrol edelim.

İlk olarak kullanıcının bize göndermiş olduğu değerlerin karakter sayılarının 4 karakterden uzun olup olmadıklarını kontrol edelim.

Gönderilen şifre değerini md5() fonksiyonu ile şifreleyelim. Oluşan şifreyi ve kullanıcı adını veritabanında kayıtlı olup olmadılarını kontrol edelim. Sorgumuzdan gelen sonuç 0’dan büyük ise kullanıcı sistemde kayıtlıdır fakat gelen değer 0’a eşit ise sistemde kayıtlı değildir.

Kullanıcı sistemde kayıtlı ise username adında bir SESSION oluşturalım ve içerisine kullanıcıdan gelen kullanıcı adını aktaralım ve index.php yönlendirelim.

Kullanıcı sisteme kayıtlı deği ise kullanıcıya hata mesajı gösterelim.


settings/class.User.php Logout

Oluşturulan SESSION değerlerini temizleyelim ve index.php yönlendirelim.


settings/class.User.php Tüm Kodları

<?php
require_once 'Database.php';
class User
{
    private $conn;
    public function __construct() {
        $conn = new Database(); 
        $this->conn = $conn->connect();
    }
    public function Register($username = '',$password = '',$rePassword = '')
    {
        $RegisterMessage= "";
        if(strlen($username) < 4 || strlen($password) < 4)
        {
            $RegisterMessage = [
                "status"    => "danger",
                "message"   => "Username or password is less than 4 characters"
            ];
            return $RegisterMessage;
        }

        if($password != $rePassword){
            $RegisterMessage = [
                "status"    => "danger",
                "message"   => "Password does not match Password Repeat."
            ];
            return $RegisterMessage;
        }

        $query = "SELECT count(username) FROM User WHERE username=:username";
        $userCount = $this->conn->prepare($query);
        $userCount->execute(array(
            'username'  => $username
        ));
        $result = $userCount->fetchColumn();
        if($result > 0)
        {
            $RegisterMessage = [
                "status"    => "warning",
                "message"   => "Such a user already exists"
            ];
            return $RegisterMessage;
        }
        $md5Password = md5($password);
        $query  = "INSERT INTO User (username,password) VALUES (:username,:password);";
        $insert = $this->conn->prepare($query);
        $status = $insert->execute(array(
            "username"  => $username,
            "password"  => $md5Password
        ));
        if($status == true)
        {
            header('Location: login.php?register=success');
        }
        else
        {
            $RegisterMessage = [
                "status"    => "danger",
                "message"   => "Database error."
            ];
            return $RegisterMessage;
        }
    }
    public function Login($username= '',$password = '')
    {
        $LoginMessage= "";

        if(strlen($username) < 4 || strlen($password) < 4)
        {
            $LoginMessage = [
                "status"    => "danger",
                "message"   => "Username or password is less than 4 characters"
            ];
            return $LoginMessage;
        }
        $md5Password = md5($password);

        $query = "SELECT count(username) FROM User WHERE username=:username AND password=:password";
        $userCount = $this->conn->prepare($query);
        $userCount->execute(array(
            'username'  => $username,
            'password'  => $md5Password
        ));
        $result = $userCount->fetchColumn();
        if($result > 0){ 
            $_SESSION['username'] = $username;
            header('Location: index.php');
        } else { 
            $LoginMessage = [
                "status"    => "danger",
                "message"   => "Username or password is wrong."
            ];
            return $LoginMessage;
        }
    }
    public function Logout(){
        session_destroy();
    }
}

İncludes/header.php

İlk olarak SESSION ve Tampon değerimizi başlatım. Ardından örneğimizin güzel gözükmesi açısından Bootstrap ekleyelim.

<?php
ob_start();
session_start();
?>
<!doctype html>
<html lang="tr">
<head>

    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">
    <title>User Management</title>
</head>
<body class="mt-3">
    <div class="container">
        <h3 class="text-center">Engin Yenice</h3>

İncludes/footer.php

Eklediğimiz Bootstrap devamında bulunan scriptleri bu kısma ekleyelim.

</div>

<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" integrity="sha384-B4gt1jrGC7Jh4AgTPSdUtOBvfO8shuf57BaghqFfPlYxofvL8/KUEfYiJOMMV+rV" crossorigin="anonymous"></script>
</body>
</html>

İndex.php

Sayfamızın başına ilk olarak header.php dahil edelim. Ardından SESSION olup olmadığını kontrol edelim.

SESSION varsa eğer ekrana Hoşgeldin [Kullanıcı Adı] şeklinde bir mesaj versin ve bir çıkış butonu bulunsun.

SESSION yoksa eğer giriş yap ve kayıt ol butonları görünsün şeklinde şart koşalım.

<?php
include 'includes/header.php';
?>
    <?php
if(isset($_SESSION['username']))
{ ?>
    <div class="text-center">
        <hr>
        <h4 class=""><i>Hoşgeldin </i> <strong><?=$_SESSION['username']?></strong></h4>
        <a href="logout.php" class="btn btn-outline-danger text-center">Çıkış Yap</a>
        <hr>
    </div>
    <?php } else { ?>
    <div class="d-flex justify-content-center">
        <div class="buttons">
            <a href="login.php" class="btn btn-outline-primary">Login</a>
            <a href="register.php" class="btn btn-outline-success">Register</a>
        </div>
    </div>
    <?php
}
    ?>
<?php
include 'includes/footer.php';
?>

Login.php

Sayfamızın başına ilk olarak header.php dahil edelim. Ardından SESSION olup olmadığını kontrol edelim.

SESSION olması durumunda kullanıcıyı index.php yönlendirelim.

Kullanıcının giriş bilgilerini dolduracağı bir form oluşturalım ve ardından bu formun post edilmesi durumunda ilk olarak User sınıfını sayfaya dahil edelim ve ardından User sınıfının Login metoduna gerekli değerleri gönderelim. Bu metotdan dönen değeri statusMessage adında bir değişkene aktaralım. Ardından bu değişkendeki bilgileri kullanıcıya gösterelim.

<?php
include 'includes/header.php';
if(isset($_SESSION['username']))
{
    header('Location: index.php');
}
if(isset($_POST['login']))
{
    require_once("settings/class.User.php");
    $User = new User();
    $userName   = htmlspecialchars(trim($_POST['username']));
    $password   = htmlspecialchars(trim($_POST['password']));
    $statusMessage = $User->Login($userName,$password);
    ?>
    <div class="alert alert-<?=$statusMessage['status']?>"><?=$statusMessage['message']?></div>
<?php }
if(isset($_GET['register']) && $_GET['register'] == "success")
{ ?>
    <div class="alert alert-success">Registration Successful</div>
<?php } ?>
<h3>Login Page</h3>
<form method="post" action="" >
    <div class="form-group">
        <label>Username</label>
        <input type="text" name="username" class="form-control">
    </div>
    <div class="form-group">
        <label>Password</label>
        <input type="password" name="password" class="form-control">
    </div>
    <button type="submit" name="login" class="btn btn-primary">Login</button>
    <a href="index.php" class="btn btn-secondary">Back</a>
</form>
<?php
include 'includes/footer.php';
?>

Register.php

Sayfamızın başına ilk olarak header.php dahil edelim. Ardından SESSION olup olmadığını kontrol edelim.

SESSION olması durumunda kullanıcıyı index.php yönlendirelim.

Kullanıcının giriş bilgilerini dolduracağı bir form oluşturalım ve ardından bu formun post edilmesi durumunda ilk olarak User sınıfını sayfaya dahil edelim ve ardından User sınıfının Register metoduna gerekli değerleri gönderelim. Bu metotdan dönen değeri statusMessage adında bir değişkene aktaralım. Ardından bu değişkendeki bilgileri kullanıcıya gösterelim.

<?php
include 'includes/header.php';
if(isset($_SESSION['username']))
{
    header('Location: index.php');
}
if(isset($_POST['register']))
{
    require_once("settings/class.User.php");
    $User = new User();
    $userName   = htmlspecialchars(trim($_POST['username']));
    $password   = htmlspecialchars(trim($_POST['password']));
    $rePassword = htmlspecialchars(trim($_POST['rePassword']));
    $statusMessage = $User->Register($userName,$password,$rePassword);
    ?>
    <div class="alert alert-<?=$statusMessage['status']?>"><?=$statusMessage['message']?></div>
<?php }
?>
<h3>Register Page</h3>
<form method="post" action="" >
    <div class="form-group">
        <label>Username</label>
        <input type="text" name="username" class="form-control">
    </div>
    <div class="form-group">
        <label>Password</label>
        <input type="password" name="password" class="form-control">
    </div>
    <div class="form-group">
        <label>Re. Password</label>
        <input type="password" name="rePassword" class="form-control">
    </div>
    <button type="submit" name="register" class="btn btn-primary">Create</button>
    <a href="index.php" class="btn btn-secondary">Back</a>
</form>
<?php
include 'includes/footer.php';
?>

Logout.php

İlk olarak SESSION ve Tampon değerimizi başlatım. User sınıfını sayfaya dahil edelim ve bu sınıftan bir adet nesne oluşturalım ardından User sınıfının Logout metodunu çağıralım. Bu metot sayesinde kullanıcıya ait SESSION bilgileri silinecektir. Ardından index.php yönlendirelim.

<?php
ob_start();
session_start();
require_once("settings/class.User.php");
$User = new User();
$User->Logout();
header('Location: index.php');

Laravel Framework

Laravel Framework web geliştirme hizmetleri PHP’ye temiz ve şık bir web geliştirme çerçevesi sağlarken aynı zamanda geliştiricileri karmaşık kodlamadan kurtarır.

Laravel web geliştirme hizmetleri PHP’ye temiz ve şık bir web geliştirme çerçevesi sağlarken aynı zamanda geliştiricileri karmaşık kodlamadan kurtarır. Laravel, etkileyici ancak basit sözdizimini kullanırken harika uygulamalar geliştirmeye yardımcı olur. Laravel uyarlanabilir ve kullanımı kolaydır. Özel ihtiyaçlarınızı karşılayan çoklu modüller sunar. Laravel PHP Framework farklı web projelerinde kullanılan ortak görevleri basitleştirir. Bazı dev endüstriler tarafından kullanılır. Laravel’in yaratıcısı Taylor Otwell, “Laravel PHP ekosisteminde en güçlü olanıdır çünkü sadece modern web uygulamaları oluşturmak için gereken özellikleri içerir” demiştir. 

Laravel Framework bize etkileyici ve zarif bir sözdizimi sağlar. Laravel, gelişimi yaratıcı, keyifli ve gerçekten tatmin edici bir deneyim haline getirir. Laravel, yönlendirme, kimlik doğrulama, oturumlar ve önbellekleme gibi çoğu web projesinde kullanılan rutin görevlerinizi kolaylaştırmanıza yardımcı olacak kullanışlı bir framework. Erişilebilir olmasının yanı sıra, büyük ve sağlam uygulamalar için gereken güçlü araçları da sağlar. 


Şablon Aracı

Laravel, geliştiricilerin yoğun içerik ile olağanüstü düzenler oluşturmalarına yardımcı olan önceden yüklenmiş güçlü ve hafif bir şablon motoruna sahiptir. Laravel şablonu, sağlam CSS ve JS kodlamasıyla çeşitli sağlam widget’lar sunar. Tüm şablonlar, basit ancak işlevsel amaçlarla tasarlanmıştır. Genellikle saatlerce ve yüzlerce satırlık kod yazma gerektiren görevler, Laravel framework ile birkaç dakika içinde önceden oluşturulmuş işlevlerle gerçekleştirilebilir.


Kimlik Doğrulama ve Yetkilendirme

En iyi Laravel geliştirme şirketlerinden bazıları güvenli kimlik doğrulama ve yetkilendirme sağlar. Herhangi bir web uygulaması sahibinin güvenli kaynaklara erişen özgün ve yetkili kullanıcıların olduğundan emin olmalıdır. Hemen hemen her şey hazır olarak yapılandırıldığı için yetkilendirmenin uygulanması oldukça basittir. Laravel, iyi düzenlenmiş ve yönetilmesi çok kolay olan yetkilendirme mantığını ve kontrol erişimini sıralayan temel bir yöntemi de kolaylaştırır. 


Dahili Kütüphaneler

Laravel, önceden yüklenmiş dinamik kütüphanelere sahip tek sağlayıcı olarak size en iyi şekilde kolaylık sağlayan framework. Bu kütüphaneler, diğer PHP framework’lerinde bulunmayan Nesneye Dayalı kütüphaneleri içerir. Sorunsuz uygulama sunmanın yanı sıra, parola sıfırlama, dinamik istemcileri kontrol etme ve şifreleme gibi çeşitli özellikler içerir. 


MVC Mimari Desteği 

Model View Controller mimarisi Laravel’i web uygulama geliştirme için en iyi framework yapan faktördür. Performansı artırır, netlik sağlar ve daha iyi dokümantasyon sağlar. Şablonu ve temel kodları değiştirmeyi kolaylaştırır. Kısacası, yerleşik işlevleri genel süreci kolaylaştırır. Geliştiriciler sadece birkaç dakika içinde bir Laravel uygulaması geliştirmeye başlayabilirler. Her zaman büyük bir zaman tasarrufu sağlar. Daha hızlı ve yönetilmesi kolay olan güçlü bir web sitesi oluşturmanıza yardımcı olan ideal araçları ve hoş fikirleri kolaylaştırır.


Çok Dilde Uygulama Oluşturucu

Laravel’in geliştirme hizmetlerinin sağladığı diğer tüm avantajların yanı sıra, çok dilli uygulamaların oluşturulması da bir diğer avantajdır. Gerçekten, farklı dillere sahip farklı ülkelerde erişimini genişletmek isteyen işletmeler için doğru seçenektir. Laravel framework, web uygulamanızı farklı diller için kolay ve hızlı bir şekilde oluşturmanıza yardımcı olur. 


Laravel Bağlantı Linkleri

Anasayfa : laravel.com

Dökümantasyon : laravel.com/docs/7.x

Haberler: laravel-news.com/


Bloğumu halen incelemediniz mi ? https://enginyenice.com/

Hakkımda: https://enginyenice.com/hakkimda/

İletişim: https://enginyenice.com/iletişim/

Yazılım Nedir?

Yazılım Nedir? En basit tanımıyla ise yazılımın ne olduğuna bakacak olursak, elektronik bir aracı, belirlenmiş bir işi yapması için tasarlanmış komutların tümü diyebiliriz. Bu komutlar işlemci sayesinde işlenerek işlem gören bir olay haline dönüşür.

En basit tanımıyla ise yazılımın ne olduğuna bakacak olursak, elektronik bir aracı, belirlenmiş bir işi yapması için tasarlanmış komutların tümü diyebiliriz. Bu komutlar işlemci sayesinde işlenerek işlem gören bir olay haline dönüşür. 

Yazılıma Başlarken Dikkat Edilecek Hususlar

Bireysel ya da kurumsal olarak yaptığınız işlerde yazılım sektöründen ilerlemek için öncelikle işletim sistemini ve ya donanımı seçmelisiniz. Bir bilgisayar için yazılım yapıyor iseniz öncelikle hangi işletim sistemi üzerinde çalışacağınızı seçmelisiniz. Akabinde kullanacağınız programlama dilini seçmeniz gerekir. Sonrasında yazdığınız kodlar bir derleyici sayesinde makine diline dönüştürülür. Ayrıca kullanılan dil ve derleyici birbirleri ile uyumlu olmalıdır.

Elektronik donanım yapıyor iseniz belirlediğiniz ihtiyaçlarınıza göre fiyat performans açısından size en uygun donanım ve işlemciyi seçmelisiniz. Şuan piyasada çok fazla sayıda işlemci bulunduğundan en uygununu seçmek size ve ihtiyaçlarınıza kalmaktadır. Sonrasında işlemcinizin destekleyeceği bir dil ve derleyici bulmalısınız. Her işlemci her dile ait desteği sağlamadığından araştırmanızı iyi yapıp bu doğrultuda seçimler yapmanızda fayda var.


Yazılımın Çeşitleri

Yazılım her ne kadar insanların çoğunun ilgisi dışında kalsa da günlük hayatımızı son derece kolaylaştıran bir etmendir. Hayatımızı kolaylaştıran yazılım Uygulama ve Sistem Yazılımları olarak 2’ye ayrılır. 


Genel kullanım alanlarına göre yazılımları aşağıdaki gibi sıralayabiliriz.

  • TİCARİ YAZILIMLAR
  • UYGULAMA YAZILIMLARI
  • EĞLENCE YAZILIMLARI
  • SUNUM YAZILIMLARI
  • SİSTEM YAZILIMLARI
  • HİZMET YAZILIMLARI
  • İŞLETİM SİSTEMİ YAZILIMLARI
  • BİLGİSAYAR PROGRAMLAMA ARAÇLARI

Şeklinde daha da çoğaltabiliriz.


Yazılım Dilleri

Web sitesi oluşturmak, dosya yazmak ve ya okumak, bir arayüze sahip uygulamalar yapmak gibi faklı amaçlar neticesinde oluşturulan yazılım dilleri kullanım alanlarına göre zaman zaman komplike bir hale dönüşebiliyor.

En yaygın yazılım dillerini, CSS, JAVA, C#,C++, Python, PHP, HTML, ASP ve Visual Basic şeklinde sıralayabiliriz.

Şimdi bunları detaylı olarak inceleyelim.

HTML Nedir?

Web sitesi yapımında öğrenilmesi gereken HTML günümüzde çeşitli kaynaklardan kolayca öğrenilecek diller arasındadır. Bir internet sitesini ve ya uygulamasını kodlayabilmek için HTML ve CSS birlikte yazılması gerekmektedir. HTML Eğitimi

CSS Nedir?

Web sitelerinin oluşturulmasında HTML ile birlikte kullanılan CSS, HTML gibi kolay öğrenilebilecek diller arasındadır. CSS ve HTML ile kodlanmış bir sitenin kullanımı için bunlara ek olarak PHP kullanılmalıdır. CSS Eğitimi

PHP Nedir?

Yazılım dilleri ile kodlanmış bir web sitesinin, kullanıcılar tarafından görüntülenmesi için gerekli aracılardan birisidir. PHP.NET

ASP Nedir?

Microsoft’un geliştirdiği ASP, web sitelerindeki içeriklerin düzenlenmesi, yenilenmesi gibi işlemlerin yapılmasını sağlamaktadır. ASP.NET

Visual Basic Nedir?

Kullanıcı ara birimi olan yazılımlar oluşturmak amacıyla kullanılan bir dildir. Java ve C# dillerine göre daha basit sayıldığından başlangıç olarak önerilmektedir.  Visual Basic

Java Nedir?

Genellikle kullanıcı ara birimlerinin geliştirilmesi için kullanılır. C# gibi yazılım dillerine nazaran daha basit ve yaygın olduğu söylenebilir. Java

C# Nedir?

Kullanıcı ara birimlerinin tasarlanmasında kullanılır. Java ve Visual Basic’e göre daha zor detaylar içermektedir.  C#

C++ Nedir?

Yaygın olan programlama dillerindendir. Nesne tabanlı programlamalar için kullanılmaktadır. C yazılım dilinin eklentisidir. C++

Python Nedir?

Günümüzün en popüler yazılım dillerinden birisidir. Uygulama, web ve sistem programlama gibi çoklu kullanım alanı oluşturmasından dolayı diğer dillere ek olarak öğrenilmesi gerekir. Python


Bloğumu halen incelemediniz mi ? https://enginyenice.com/

Hakkımda: https://enginyenice.com/hakkimda/

İletişim: https://enginyenice.com/iletişim/

Laravel Veritabanı İşlemleri

Laravel Framworkü kullanarak veritabanı ile genel (ekle, düzenle, listele ve görüntümele) işlemlerinin nasıl gerçekleştirileceğini göstereceğim.

Merhabalar bugün sizlere Laravel Framwork‘ü ile veritabanı işlemlerinin nasıl yapılacağını anlatacağım. Detaylı sorgular için Laravel tarafından oluşturulmuş Database: Query Builder inceleyebilirsiniz.

1. Adım Laravel Projesi Oluşturma

Komut yöneticisini açıyoruz.(CMD & Terminal) ardından bilgisayarınızda global olarak laravel yüklü ise

laravel new crudExample

kodunu kullanabilirsiniz. Fakat bilgisayarınızda sadece composer yüklü ise

composer create-project --prefer-dist laravel/laravel crudExample

komutunu kullanarak crudExample adında bir Laravel projesi oluşturabilirsiniz. Yükleme işlemleri tamamlandıktan sonra.


2. Adım Veritabanı Oluşturma İşlemleri

Ben bu aşamada MySQL kullanacağım. İlk olarak phpmyadmin üzerinde bir adet veritabanı oluşturalım. Ben isim olarak crudexample adını veriyorum fakat siz istediğiniz herhangi bir ismi verebilirsiniz.

Artık Laravel framworküne bağlayacağımız bir veritabanımız var. Şimdi projemizin ana dizininde bulunan .env dosyasını açalım ve gerekli düzenlemeleri yapalım.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=veritabanınızın adı (Örn: crudexample)
DB_USERNAME=veritabanınızın kullanıcı adı (Örn: root)
DB_PASSWORD=veritabanınızın şifresi (Örn: 123)

Laravel ile veritabanı bağlantımızı başarıyla yaptık.


3. Adım Tablo Oluşturma (Migration Oluşturma)

Artık veritabanı bağlantımızı da yaptığımıza göre tablolarımızı oluşturabiliriz. Laravel 7 ile birlikte komut satırına (CMD & Terminal ) komutlarımızı yazarak model oluşturabiliriz.

php artisan make:migration create_articles_table --create=articles

create_articles_table adında migration bilgilerimizin tutulacağı bir php dosyası oluşturacaktır.

–create=articles komutu ise bize hazır bir şablon vermektedir. Burada geçen articles ismi ise tablomuzun adını belitmektedir. create_articles_table dosyasına ulaşmak için “database/migrations” yolunu takip edebilirsiniz.

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateArticlesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('articles', function (Blueprint $table) {
            $table->id();            // UNIQ ID
            $table->string('title'); // Yazı başlığı.
            $table->text('article'); // Yazımız
            $table->timestamps();    // Oluşturma ve Düzenleme tarihleri
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('articles');
    }
}

İçeriğinde başlık ve yazımızın bulunduğu bir tablonun temellerini hazırladık. Artık kodumuzu çalıştırarak tablomuzu veritabanına kayıt edebiliriz. Bu işlem için komut satırına (CMD & Terminal)

php artisan migrate

komutunu yazıp çalıştıralım. Veritabanımıza gidip baktığımızda 2 adet tablo oluştuğunu göreceksiniz.

migrations : Migrasyon verilerinin tutulduğu tablo.

articles : Bizim oluşturduğumuz. Yazılarımızın tutulacağı tablo.


4. Adım Route Oluşturma

Laravel’in genel veritabanı işlemlerinin yapıldığı hazır bir route inşa edebiliyor. Bunun için “route/web.php” dosyasının içerisine

Route::resource('articles','ArticleController');

Komutunu eklemeniz yeterlidir. Bu sayede oluşturacağımız Controller’ın routelarını tek bir komut ile tanımlamış olduk.


5. Adım Controller ve Model Oluşturma

Bu işlemi hızlıca yapabilmek için tekrar Komut satırını (CMD & Terminal) kullanacağız.

php artisan make:controller ArticleController --resource --model=Article

Bu komut ile bir AritcleController adında bir Controller ve Article adında bir Model oluşturuyoruz. Oluştururken bize model oluşturmak isteyip istemediğimiz hakkında soru soruyor bu soruya yes cevabını vererek Modelimizide oluşturmuş oluyoruz.

Peki bu –resource nedir ?

–resource komutu ile hazır kaynak kodlarımızı Controller’a dahil etmiş oluyoruz. Bu kaynak kodlarının içerisinde:

  • index() : Verilerimizin listeleneceği method
  • create(): Veri ekleme sayfamızın görüntüleneceği method
  • store(): Veri ekleme işlemimizin gerçekleşeceği method
  • show(): Tek bir verimizin detaylı listeleneceği method
  • edit(): Veri düzenleme sayfamızın görüntüleneceği method
  • update(): Veri güncelleme işleminin gerçekleşeceği method
  • destroy(): Veri silme işleminin gerçekleşeceği method

şeklinde bizlere hazır methodlar sağlamaktadır. Bu methodları Controllarınız üzerinden görmek isterseniz “app/http/Controllers/ArticleController.php” dosya yoluna gidip inceleyebilirsiniz.

<?php

namespace App\Http\Controllers;

use App\Article;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class ArticleController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $articles = Article::get();
        return view("articles.list",['articles' => $articles]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view("articles.create");
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $request->validate([
            'title'     => 'required',
            'article'   => 'required',
        ]);

        Article::create($request->all());
        return redirect()->route('articles.index')
                        ->with('success','Kayıt başarıyla yapıldı.');
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Article  $article
     * @return \Illuminate\Http\Response
     */
    public function show(Article $article)
    {
        return view("articles.show",['article'  => $article]);
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Article  $article
     * @return \Illuminate\Http\Response
     */
    public function edit(Article $article)
    {
        return view("articles.edit",['article'  => $article]);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Article  $article
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Article $article)
    {
        $request->validate([
            'title'     => 'required',
            'article'   => 'required',
        ]);

        $article->update($request->all());

        return redirect()->route('articles.index')
                        ->with('success','Kayıt başarıyla güncellendi.');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Article  $article
     * @return \Illuminate\Http\Response
     */
    public function destroy(Article $article)
    {
        $article->delete();
        return redirect()->route('articles.index')
                        ->with('success','Kayıt başarıyla silindi.');
    }
}

Evet gerekli veritabanı işlemlerini yapacak şekilde Controllerimizi düzenledik. Artık modelimizi düzenleyebiliriz.


6. Adım Model Düzenleme

“app/Article” model dosyamıza müdahale edeceğimiz verilerimizi tanımlıyoruz.

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Article extends Model
{
    protected $fillable = [
        'title', 'article'
    ];
}

7. Adım Sayfaların Oluşturulması

“resources/view” klasörünün içerisine 2 adet klasör oluşturalım.

  1. Klasör: shared
  2. Klasör: articles

shared: Bu klasörün içerisinde tüm sayfalarda olmasını istediğimiz parçaları bulunduracağız. Bir sade bir işlem yaptığımız için içersinde sadece “layout.blade.php” oluşturacağız.

shared/layout.php

<!DOCTYPE html>
<html>
<head>
    <title>Laravel 7 Veritabanı İşlemleri</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
</head>
<body>

<div class="container mt-3">
    @yield('content')
</div>

<!-- Footer -->
<footer class="page-footer font-small blue fixed-bottom">

    <!-- Copyright -->
    <div class="footer-copyright text-center py-3">© 2020 Copyright:
      <a href="https://enginyenice.com/"> enginyenice.com</a>
    </div>
    <!-- Copyright -->

  </footer>
  <!-- Footer -->

</body>
</html>

2. Klasörümüz olan articles klasörünün içerisine

  • list.blade.php (Yazılarımızın listelendiği sayfa)
  • show.blade.php (Yazı detaylı gösterme sayfamız.)
  • create.blade.php (Yazı ekleme sayfamız)
  • edit.blade.php (Yazı düzenleme sayfamız)

articles/list.blade.php

@extends('shared.layout')

@section('content')
<div class="row">
    <div class="container">


        @if ($message = Session::get('success'))
        <div class="alert alert-success">
            <p>{{ $message }}</p>
        </div>
        @endif
        <a href="{{ route('articles.create')}}" class="btn btn-sm btn-success mt-2">Ekle</a>
        <table class="table table-bordered mt-2">
            <thead>
                <tr>
                    <th width="5%">ID</th>
                    <th width="15%">Başlık</th>
                    <th width="30%">Yazı</th>
                    <th width="20%">Göster</th>
                    <th width="20%">Düzenle</th>
                    <th width="10%">Sil</th>
                </tr>
            <thead>
            <tbody>
                @foreach ($articles as $article)
                <tr>
                    <td>{{ $article->id}}</td>
                    <td>{{ $article->title}}</td>
                    <td>{{ $article->article}}</td>
                    <td><a class="btn btn-sm btn-primary" href="{{ route('articles.show',$article->id) }}">Göster</a></td>
                    <td><a class="btn btn-sm btn-info" href="{{ route('articles.edit',$article->id) }}">Düzenle</a></td>
                    <td>
                    <form action="{{ route('articles.destroy', $article->id)}}" method="POST">
                            @csrf
                        @method('DELETE')
                        <button type="submit" class="btn btn-danger">Sil</button>
                        </form>
                    </td>
                </tr>
                @endforeach
            </tbody>


                <tfoot>
                    <tr>
                        <th width="5%">ID</th>
                        <th width="15%">Başlık</th>
                        <th width="30%">Yazı</th>
                        <th width="20%">Göster</th>
                        <th width="20%">Düzenle</th>
                        <th width="10%">Sil</th>
                    </tr>
                <tfoot>
        </table>
    </div>

</div>
@endsection

articles/show.blade.php sayfamız

@extends('shared.layout')

@section('content')
<div class="row">
    <div class="container">
    @if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
    @endif
    <form action="{{ route('articles.update',$article->id)}}" method="POST">
        @csrf
        @method('PUT')
        <div class="form-group row">
        <h1>Başlık: <strong>{{ $article->title }}</strong></h1>
        </div>

        <div class="form-group row">
            <p>Oluşturma Tarihi: <strong>{{ $article->created_at }}</strong></p>
        </div>

        <div class="form-group row">
            <p>Düzenlenme Tarihi: <strong>{{ $article->updated_at }}</strong></p>
        </div>

        <div class="form-group row">
            <p>Yazı: {{ $article->article }}</p>
        </div>
        <div class="form-group row">

        <a href="{{ route('articles.index') }}" class="btn btn-primary">Geri Git</a>
        </div>
    </form>
    </div>
</div>
@endsection

articles/create.blade.php

@extends('shared.layout')

@section('content')
<div class="row">
    <div class="container">
    @if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
    @endif
    <form action="{{ route('articles.store')}}" method="POST">
        @csrf
        <div class="form-group row">
            <label class="form-input col-sm-1 mt-1">Başlık</label>
            <input type="text" class="col-sm-11" name="title">
        </div>

        <div class="form-group row">
            <label class="form-input col-sm-1 mt-1">Yazı</label>
            <textarea name="article" class="col col-sm-11"></textarea>
        </div>
        <div class="form-group row">

            <button type="submit" class="btn btn-success d-inline-block col-sm-12">Ekle</button>
        </div>
    </form>
    <div class="form-group row text-center">
        <a href="{{ route('articles.index') }}" class="btn btn-secondary d-inline-block col-sm-12">Geri Git</a>
    </div>
    </div>
</div>
@endsection

articles/edit.blade.php

@extends('shared.layout')

@section('content')
<div class="row">
    <div class="container">
    @if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>

    @endif

    <form action="{{ route('articles.update',$article->id)}}" method="POST">
        @csrf
        @method('PUT')
        <div class="form-group row">
            <label class="form-input col-sm-1 mt-1">Başlık</label>
        <input type="text" class="col-sm-11" name="title" value="{{ $article->title }}">
        </div>

        <div class="form-group row">
            <label class="form-input col-sm-1 mt-1">Yazı</label>
            <textarea name="article" class="col col-sm-11">{{ $article->article }}</textarea>
        </div>
        <div class="form-group row">

            <button type="submit" class="btn btn-success d-inline-block col-sm-12">Güncelle</button>
        </div>
    </form>
    <div class="form-group row text-center">
        <a href="{{ route('articles.index') }}" class="btn btn-secondary d-inline-block col-sm-12">Geri Git</a>
    </div>
    </div>
</div>
@endsection

Artık oluşturduğumuz sayfaları ziyaret edebiliriz. Tarayıcımızda http://localhost:8000/articles adresini ziyaret ederek sayfalarımıza ulaşabiliriz.


Bloğumu halen incelemediniz mi ? https://enginyenice.com/

Hakkımda: https://enginyenice.com/hakkimda/

İletişim : https://enginyenice.com/iletisim/