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');

Yazılım Hakkında

Yazılım. Teknoloji çağı, beraberinde birçok yenilikleri getirdi. Bunların arasında en önemlilerinden olan yazılım ve programlama, insanların hayatlarını oldukça kolaylaştırmaktadır.

Teknoloji çağı, beraberinde birçok yenilikleri getirdi. Bunların arasında en önemlilerinden olan yazılım ve programlama, insanların hayatlarını oldukça kolaylaştırmaktadır. Yazılım, farklı işlevler görmek için tasarlanmış olan elektronik cihazların birbirleriyle uyum sağlamasını ve haberleşmesini sağlayan makine komutlarıdır. Yazılım, günümüzde insanların daha az emek sarf ederek daha çok iş yapmasını sağlamaktadır.

Yazılım Nasıl Yapılır?

Yazılım yapmak için üniversitede bilgisayar, yazılım ya da matematik mühendisliklerinden biri okunabilir. Ancak yazılım öğrenmek için üniversite bitirme zorunluluğu yoktur. İnternet üzerinde birçok farklı kaynakta yeterli bilgiye ulaşabilirsiniz. İşte sitemiz olan enginyenice.com da size bu hizmeti vermektedir. Sitemizde farklı programlama dillerinden örneklerle yazılım öğrenecek, daha önce öğrendiyseniz bilgilerinizi pekiştireceksiniz.


Programlama Dilleri Nelerdir?

Programlama dili, belli bir standarda uygun olarak yazılan, yazılım ve komut geliştirme imkanı veren bilgisayar dilidir. Çok sayıda programlama dili mevcuttur. Bunlar arasında en çok kullanılanlarından olan c, c#, c++, java, php, laravel gibi dilleri sitemizden faydalanarak öğrenebilirsiniz. Ayrıca sitemizde yer alan örnekler sayesinde öğrendiklerinizi pekiştirebilir, yaptığınız hataları öğrenebilirsiniz.


Yazılımcı Kimdir?

Günümüzde kullanılan neredeyse bütün teknolojik cihazların çalışması yazılım sayesinde mümkün olmaktadır. Yazılım komutları oluşturan kodlardan meydana gelir. Yazılımcı ise en basit anlamıyla bu kodları yazan kişidir. Projelerde bir yazılımcı olabileceği gibi bir grup yazılımcı beraber de çalışabilir. Masaüstü, web, mobil yazılım gibi yazılım türleri mevcuttur. Yazılımcı bunlardan sadece birinde ya da daha fazlasında uzmanlaşarak o alanda çalışabilir. 


Yazılımın Geleceği

Yazılım, geleceğin meslekleri arasında zirvede yer almaktadır. Çünkü çağımızın teknoloji çağı olması sebebiyle makineleşmeye doğru hızlı bir yönelim olmaktadır. Bunun sonucun da insanlar gerek üniversite okuyarak gerekse internet üzerinden çevrim içi dersler alarak yazılıma yönelmeye başlamışlardır. Sizler de çağın gerisinde kalmak istemiyorsanız yazılım öğrenmeye başlamalısınız. Bu konuda sitemizde yer alan içerikler size çok yardımcı olacaktır.


Neden Yazılım Öğrenilmeli?

Günümüzün en popüler çalışma alanlarından biri olmasının dışında yazılım, bir ihtiyaç haline gelmiştir. Çünkü, en basitinden bir örnekle yapmanız gereken çok uzun bir toplama işlemini yazılım sayesinde yalnızca bir kaç saniye gibi kısa bir sürede çözebilirsiniz. Aynı şekilde girilen bir sayının faktöriyeli hesaplamak için hesap makinesi kullanmanız gerekirken yazılım sayesinde hesap makinesi olmadan, kısa bir sürede çözebilirsiniz. Üniversitelerde birçok hoca, öğrencilerin notlarını hesaplamak için yazılım kullanmaktadır.

Yukarıda sayılan ve sayılmamış olan birçok program koduna enginyenice.com sitesinde ulaşabilirsiniz. Eğer yazılım konusunda kendinizi geliştirmek isterseniz enginyenice.com doğru adrestir!


Online Yazılım Kursları

Udemy: İstediğiniz her konuda videolu yazılım kursları bulabilirsiniz.

Bir Milyon İstihdam: Bir çok yazılım kursunu ücretsiz bir şekilde izleyebilir ve sertifika sahibi olabilirsiniz.

Youtube: Bir çok konuda içerik barındırdığı gibi yazılım konusunda da kaliteli içerikler barındırmaktadır.


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

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

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

Üçgenin Alanını Hesaplama

Üçgenin Alanını Hesaplama C Programlama dilini ve CodeBlocks geliştirme ortamını kullanarak üçgenin alanını hesaplayacağız.

Merhaba arkadaşlar,

Bugün ki yazımızda C Programlama dilini ve CodeBlocks geliştirme ortamını kullanarak üçgenin alanını hesaplayacağız.

Üçgenin alanını hesaplayabilmek için 2 temel değeri bilmemiz gerekiyor. Bunlar:

  • Taban alanı
  • Yükseklik

Temel iki değeri de biliyorsak, üçgenin alanını hesaplayabiliriz. Üçgenin alanını hesaplayabilmemiz için gerekli olan formül:

Üçgenin alanı = (Taban alanı * yükseklik) / 2

Formülümüzü de öğrendiğimize göre örneğimizi kodlamaya geçebiliriz.

Örneğimizde taban alanı ve yükseklik değerlerini kullanıcıdan alacağımız ve hesaplanan değeri ekrana yazdıracağımız için üç adet değişken oluşturalım. Bunlar:

  • Taban Alanı (integer tipinde “tabanAlani”)
  • Yükseklik (integer tipinde “yukseklik”)
  • Üçgenin Alanı (float tipinde “hesaplananAlan”)

Değişkenlerimizi oluşturalım ve gerekli değerleri kullanıcıdan alalım.

/*
* Engin Yenice
* enginyenice.com
*/
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int tabanAlani,yukseklik;
    float hesaplananAlan;
    printf("Taban Alani: ");
    scanf("%d",&tabanAlani);
    printf("Yukseklik: ");
    scanf("%d",&yukseklik);
    return 0;
}

Kullanıcıdan taban alanı ve yükseklik değerlerimizi aldık. Aldığımız değerleri formülde uygun bir şekilde kullanırsak üçgenimizin alanını hesaplayabiliriz.

/*
* Engin Yenice
* enginyenice.com
*/
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int tabanAlani,yukseklik;
    float hesaplananAlan;
    printf("Taban Alani: ");
    scanf("%d",&tabanAlani);
    printf("Yukseklik: ");
    scanf("%d",&yukseklik);


    hesaplananAlan = (tabanAlani * yukseklik) / 2.0;
    printf("Hesaplanan alan: %f",hesaplananAlan);

    return 0;
}

Tüm Kodlar

Üçgenin alanını hesaplama örneğinin tüm kodları

/*
* Engin Yenice
* enginyenice.com
*/
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int tabanAlani,yukseklik;
    float hesaplananAlan;
    printf("Taban Alani: ");
    scanf("%d",&tabanAlani);
    printf("Yukseklik: ");
    scanf("%d",&yukseklik);


    hesaplananAlan = (tabanAlani * yukseklik) / 2.0;
    printf("Hesaplanan alan: %f",hesaplananAlan);

    return 0;
}

Üçgenin alanını hesaplama örneğimi incelediğiniz için teşekkür ederim. Sağlıklı günler dilerim.

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

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

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