Bu uygulamamız PHP, MySQL ile beni hatırla özellikli login sayfası yapımını ve kullanıcı yönetimini göreceksiniz.
Örnek uygulama ile web sitelerinizde admin panelinde veya sitenizin direk kullanımında oturum ve çerez kullanımını öğreneceksiniz. Bununla birlikte kullanıcı yönetiminin de nasıl olduğunu kavrayacaksınız. Kullanıcı ekleme, listeleme, silme ve düzenleme işlemlerini kapsayan yararlı bir uygulama olduğunu düşünüyorum.
Öncelikle login sayfası kullanacağınız yapılarda güvenliğe dikkat edeceksiniz. Güvenlik çok önemli ise beni hatırla kısmı olmadan sisteminizi oluşturunuz. Ama güvenlik çok önemli değil ise şifre girilme kısmı kullanıcıları yoracaksa beni hatırla kısmı kullanabilirsiniz.
Veri tabanı için blog adında ve içinde kullanicilar tablosu olan bir veri tabanını aşağıdaki gibi oluşturacağız.
Sonrasıda veri tabanına bağlanmak için inc/vt.php sayfasını oluşturuyoruz.
<!-- inc/vt.php--> <?php //mysql veri tabanına bağlanıyoruz //sizde kendi veri tabanına göre bilgilerinizi güncelleyin //3. parametre password bende boş sizde kendi kullanıcı bilgilerinize göre düzenleyin @$baglanti= new mysqli("localhost","root","","login"); if($baglanti->connect_error) { //hata varsa yazdırıyoruz ve sayfayı sonlandırıyor echo $baglanti->connect_error." hatası oluştu"; exit; } //türkçe karakter sorunu olmasın diye karakter setini ayarlıyoruz $baglanti->set_charset("utf8"); ?>
Login sayfasının tasarımını bootstrap ile yaptım. Burada önemli olan beni hatırla kısmında nasıl bir yapı kullanacağınızdır. Başka kaynaklarda farklı yapılar görebilirsiniz. Beni hatırla kısmında çerez (cookie) kullanmak gerekiyor. Burada bir sıkıntı ortaya çıkıyor. Çerezde ne bilgisi tutacaksınız. Çünkü çerezler kullanıcının bilgisayarında tutulmaktadır ve güvenlik riski oluşturabilir. Burada kullanıcın giriş yaptıktan sonra sistemdeki verilerinin güvenliği söz konusu oluyor. Çoğunlukla kişisel bilgisayardan giriş yapılıyorsa çerez kullanımında sıkıntı yok. Bu konuyu iyi düşünüp karar vermeniz gerekiyor.
Ben bu uygulamada kullanıcı adını alıp başına ve sonuna eklemeler yaparak md5 ile şifreleyerek çereze yazdım.
setcookie("cerez",md5("aa".$txtKadi."bb"),time()+ (60*60*24*7));
Çerezi okurken de veri tabanından kullanıcı adlarını alıp aynı işleme tabi tutup karşılaştırmasını yaptım. Login.php sayfası bu bilgiler ışığında aşağıdaki gibi olacak.
<!--Login.php--> <!doctype html> <html> <head> <meta charset="utf-8"> <link href="css/bootstrap.min.css" rel="stylesheet"/> <title>Giriş</title> <style> .kutu { margin-top: 40px } </style> </head> <body> <?php session_start(); //oturum başlattık include("inc/vt.php"); //veri tabanına bağlandık //eğer mevcut oturum varsa sayfayı yönlendiriyoruz. if (isset($_SESSION["Oturum"]) && $_SESSION["Oturum"] == "6789") { header("location:index.php"); } //eğer önceden beni hatırla işaretlenmiş ise oturum oluşturup sayfayı yönlendiriyoruz. else if (isset($_COOKIE["cerez"])) { //Kullanıcı adlarını çeken sorgumuz $sorgu = $baglanti->query("select kadi from kullanicilar"); //Kullanıcı adlarını döngü yardımı ile tek tek elde ediyoruz while ($sonuc = $sorgu->fetch_assoc()) { //eğer bizim belirlediğimiz yapıya uygun kullanıcı var mı diye bakıyoruz. if ($_COOKIE["cerez"] == md5("aa" . $sonuc['kadi'] . "bb")) { //oturum oluşturma buradaki değerleri güvenlik açısından //farklı değerler yapabilirsiniz //aynı zamanda kullanıcı adınıda burada tuttum $_SESSION["Oturum"] = "6789"; $_SESSION["kadi"] = $sonuc['kadi']; //sonrasında index sayfasına yönlendiriyorum header("location:index.php"); } } } //Giriş formu doldurulmuşsa kontrol ediyoruz if ($_POST) { $txtKadi = $_POST["txtKadi"]; //Kullanıcı adını değişkene atadık $txtParola = $_POST["txtParola"]; //Parolayı değişkene atadık } ?> <!-- Formumuzu oluşturuyoruz--> <form id="form1" method="post"> <div class="row align-content-center justify-content-center "> <div class="col-md-3 kutu"> <h3 class="text-center">Giriş Ekranı</h3> <table class="table"> <tr> <td> <!-- Kullanıcı adı form gönderildiğinde kaybolmasın diye value ya ekliyoruz--> <input type="text" ID="txtKadi" name="txtKadi" class="form-control" placeholder="Kullanıcı adı" value='<?php echo @$txtKadi ?>'/> </td> </tr> <tr> <td> <input type="password" ID="txtParola" name="txtParola" class="form-control" placeholder="Parola"/> </td> </tr> <tr> <td> <label> <input type="checkbox" ID="ckbHatirla" name="ckbHatirla"/> Beni hatırla </label> <br> <?php //Post varsa yani submit yapılmışsa veri tabanından kontrolü yapıyoruz. if ($_POST) { //sorguda kullanıcı adını alıp ona karşılık parola var mı diye bakıyoruz. $sorgu = $baglanti->query("select parola from kullanicilar where kadi='$txtKadi'"); $sonuc = $sorgu->fetch_assoc(); //parolaları md5 ile şifreledim ve başına sonuna kendimce eklemeler yaptım. if (md5("56" . $txtParola . "23") == $sonuc["parola"]) { $_SESSION["Oturum"] = "6789"; //oturum oluşturma $_SESSION["kadi"] = $txtKadi; //eğer beni hatırla seçilmiş ise cookie oluşturuyoruz. //cookie de şifreleyerek kullanıcı adından oluşturdum if (isset($_POST["ckbHatirla"])) { setcookie("cerez", md5("aa" . $txtKadi . "bb"), time() + (60 * 60 * 24 * 7)); } header("location:index.php"); //sayfa yönlendirme } else { //eğer kullanıcı adı ve parola doğru girilmemiş ise //hata mesajı verdiriyoruz echo "Kullanıcı adı veya parola yanlış!"; } } ?> </td> </tr> <tr> <td class="text-center"> <input type="submit" class="btn btn-primary btn-block" ID="btnGiris" value="Giriş"/> </td> </tr> </table> </div> </div> </form> </body> </html>
Mevcut örnekte oturum açılmış ise index.php sayfasına gidiyor. Burada mevcut kullanıcıları listeledim. Mevcut kullanıcıların düzenleme ve silme işlemleri içinde linkler yerleştirdim. Yeni kullanıcı oluşturma butonu ve çıkış butonu da koydum. index.php de şu kodlardan oluşuyor:
<!--index.php--> <!doctype html> <html> <head> <meta charset="utf-8"> <title>İndex</title> <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"> </head> <body> <?php session_start(); //oturum başlattık //oturumdaki bilgilerin doğruluğunu kontrol ediyoruz if (isset($_SESSION["Oturum"]) && $_SESSION["Oturum"] == "6789") { //eğer veriler doğru ise sayfaya girmesine izin veriyoruz $kadi = $_SESSION["kadi"]; } else { header("location:login.php"); } ?> <div class="container"> <!-- Kullanıcı adını ekrana yazıyoruz--> <h1>Merhaba <?php echo $kadi; ?></h1> <!-- Yeni kullanıcı ve çıkış linkleri--> <a href="register.php" class="btn btn-primary">Yeni Kullanıcı</a> <a href="logout.php" class="btn btn-danger">Çıkış</a> <br><br> <div class="col-md-6"> <table class="table"> <tr> <th>Kullanıcı Adı</th> <th>İşlem</th> </tr> <?php include("inc/vt.php"); //kullanıcılarımızı veri tabanından çekiyoruz $sorgu = $baglanti->query("select * from kullanicilar"); //kullanıcıları tek tek while ile alıyoruz while ($sonuc = $sorgu->fetch_assoc()) { ?> <tr> <td><?php echo $sonuc["kadi"] ?></td> <td> <!-- Düzenleme ve silme linklerini id değerlerini yollayarak oluşturuyoruz--> <a href="userEdit.php?id=<?php echo $sonuc["id"] ?>"><img src="image/duzenle.png"/></a> <a href="userDelete.php?id=<?php echo $sonuc["id"] ?>"><img src="image/sil.png"/></a> </td> </tr> <?php } ?> </table> </div> </div> </body> </html>
register.php ile yeni kullanıcı oluşturuyoruz. Login.php sayfasındaki şablonu kullanarak bu sayfayı oluşturduk. Kullanıcın girdiği verileri kontrol edip veri tabanına kaydediyoruz. Bu sayfayı aşağıdaki şekilde oluşturuyoruz. Kodların açıklamaları açıklama satırında.
<!--register.php--> <!doctype html> <html> <head> <meta charset="utf-8"> <link href="css/bootstrap.min.css" rel="stylesheet"/> <title>Giriş</title> <style> .kutu { margin-top: 40px } </style> </head> <body> <?php session_start(); //oturum başlattık include("inc/vt.php"); //veri tabanına bağlandık //eğer mevcut oturum yoksa sayfayı yönlendiriyoruz. if (!isset($_SESSION["Oturum"]) || $_SESSION["Oturum"] != "6789") { header("location:login.php"); } //Giriş formu doldurulmuşsa kontrol ediyoruz if ($_POST) { $txtKadi = $_POST["txtKadi"]; //Kullanıcı adını değişkene atadık $txtParola = $_POST["txtParola"]; //Parolayı değişkene atadık $txtParolaTekrar = $_POST["txtParolaTekrar"]; //Parolayı değişkene atadık } ?> <!-- Formumuzu oluşturuyoruz--> <form id="form1" method="post"> <div class="row align-content-center justify-content-center "> <div class="col-md-3 kutu"> <h3 class="text-center">Yeni Kullanıcı Ekle</h3> <table class="table"> <tr> <td> <!-- Kullanıcı adı form gönderildiğinde kaybolmasın diye value ya ekliyoruz--> <input type="text" ID="txtKadi" name="txtKadi" class="form-control" placeholder="Kullanıcı adı" value='<?php echo @$txtKadi ?>'/> </td> </tr> <tr> <td> <input type="password" ID="txtParola" name="txtParola" class="form-control" placeholder="Parola"/> </td> </tr> <tr> <td> <input type="password" ID="txtParolaTekrar" name="txtParolaTekrar" class="form-control" placeholder="Parola Tekrar"/> </td> </tr> <tr> <td> <?php //Post varsa yani submit yapılmışsa veri tabanından kontrolü yapıyoruz. if ($_POST) { //Verilerin düzgün girilip girilmediğini kontrol ediyoruz if ($txtParola == $txtParolaTekrar && $txtParola != '' && $txtKadi != '') { //parolayı belilirlediğimiz şekilde şifreliyip veri tabanına yazıyoruz $txtParola = md5('56' . $txtParola . '23'); if ($sorgu = $baglanti->query("INSERT INTO kullanicilar (kadi, parola) VALUES ('$txtKadi', '$txtParola')")) { header("location:index.php"); //kayıt başarılı ise sayfayı yönlendiriyoruz } else { echo 'bir hata oldu tekrar deneyin'; } } else { //eğer kullanıcı adı ve parola boş ve paralolar uyuşmuyorsa //hata mesajı verdiriyoruz echo "Alanları düzgün doldurunuz"; } } ?> </td> </tr> <tr> <td class="text-center"> <input type="submit" class="btn btn-primary btn-block" ID="btnGiris" value="Kaydet"/> </td> </tr> </table> </div> </div> </form> </body> </html>
Çıkış için ayrı bir sayfa oluşturdum. loguot.php ile tüm çerez ve oturum bilgilerini siliyoruz. Çıkış için bir tasarıma da gerek yok doğrudan login.php sayfasına yönlendirme yapıyor.
<!--Logout.php--> <?php //oturumu sonlandırıyoruz session_start(); session_destroy(); //çerezi siliyoruz setcookie("cerez", "", time()-3600); //sayfayı yönlendiriyoruz header("location:login.php"); ?>
userEdit.php sayfası ile mevcut kullanıcı bilgilerini güncellemek için kullanıyoruz. Mantık yeni kullanıcı ekle ile aynı te fark mevcut kullanıcı bilgilerini forma yansıtıp değişiklik yapıldıktan sonra veri tabanın da güncelleme sorgusu çalıştırıyoruz.
<!--userEdit.php--> <!doctype html> <html> <head> <meta charset="utf-8"> <link href="css/bootstrap.min.css" rel="stylesheet"/> <title>Giriş</title> <style> .kutu { margin-top: 40px } </style> </head> <body> <?php session_start(); //oturum başlattık include("inc/vt.php"); //veri tabanına bağlandık //eğer mevcut oturum yoksa sayfayı yönlendiriyoruz. if (!isset($_SESSION["Oturum"]) || $_SESSION["Oturum"] != "6789") { header("location:login.php"); } //güncelleme yapılacak kullanıcının verilerini alıyoruz $id = (int)$_GET["id"]; $sorgu = $baglanti->query("select * from kullanicilar where id=$id"); $sonuc = $sorgu->fetch_assoc(); ?> <!-- Formumuzu oluşturuyoruz--> <form id="form1" method="post"> <div class="row align-content-center justify-content-center "> <div class="col-md-3 kutu"> <h3 class="text-center">Kullanıcı düzenle</h3> <table class="table"> <tr> <td> <!-- Kullanıcı adını value ya ekliyoruz--> <input type="text" ID="txtKadi" name="txtKadi" class="form-control" placeholder="Kullanıcı adı" value='<?php echo $sonuc['kadi'] ?>'/> </td> </tr> <tr> <td> <input type="password" ID="txtParola" name="txtParola" class="form-control" placeholder="Parola"/> </td> </tr> <tr> <td> <input type="password" ID="txtParolaTekrar" name="txtParolaTekrar" class="form-control" placeholder="Parola Tekrar"/> </td> </tr> <tr> <td> <?php //Post varsa yani submit yapılmışsa veri tabanından kontrolü yapıyoruz. if ($_POST) { //Giriş formu doldurulmuşsa kontrol ediyoruz $txtKadi = $_POST["txtKadi"]; //Kullanıcı adını değişkene atadık $txtParola = $_POST["txtParola"]; //Parolayı değişkene atadık $txtParolaTekrar = $_POST["txtParolaTekrar"]; //Parolayı değişkene atadık //Verilerin düzgün girilip girilmediğini kontrol ediyoruz if ($txtParola == $txtParolaTekrar && $txtParola != '' && $txtKadi != '') { //şifrelemeyi yapıyoruz $txtParola = md5('56' . $txtParola . '23'); if ($sorgu2 = $baglanti->query("UPDATE kullanicilar SET kadi='$txtKadi', parola='$txtParola' WHERE id=$id")) { header("location:index.php"); //güncelleme başarılı ise sayfayı yönlendiriyoruz } else { echo 'bir hata oldu tekrar deneyin'; } } else { //eğer kullanıcı adı ve parola boş ve paralolar uyuşmuyorsa //hata mesajı verdiriyoruz echo "Alanları düzgün doldurunuz"; } } ?> </td> </tr> <tr> <td class="text-center"> <input type="submit" class="btn btn-primary btn-block" ID="btnGiris" value="Kaydet"/> </td> </tr> </table> </div> </div> </form> </body> </html>
userDelete.php sayfası ile de kullanıcı siliyoruz. Burada id değerinin get ile alıp sorguda o id yi siliyoruz.
<?php session_start(); //oturum başlattık //eğer mevcut oturum yoksa sayfayı yönlendiriyoruz. if(!isset($_SESSION["Oturum"]) || $_SESSION["Oturum"]!="6789") { header("location:login.php"); } if($_GET) { include("inc/vt.php"); $id=(int)$_GET["id"]; //silinecek id yi get ile alıyoruz //silme sorgumuzu çalıştırıyoruz $sorgu=$baglanti->query("delete from kullanicilar where id=$id"); //index.php sayfamıza geri dönüyoruz header("location:index.php"); } ?>
Kullanıcı Adı: admin
Parola: 1234
Kullanıcı bilgilerini veritabanından elle değiştirmeyin sistemden ekleyip düzenleyin!
Bu uygulama ile oturum yönetimi ve çerez kullanımını gördünüz. Kendinize göre özelleştirerek bir çok uygulamanızda kullanabilirsiniz.
Uygulama dosyaları ve veri tabanını indirmek için: login_php.zip
Merhabalar; paylaşımınız için teşekkürler. Yalnız benim bir problemim var, kullanıcı adını ve şifresini doğru girmeme rağmen sisteminiz, kullanıcı adı parola yanlış döndürüyor.
Tüm testlerini yapmıştım, örneği doğrudan alıp test edin ondan sonra sisteminize entegre edin.
Paylaşımınız için teşekkürler, bunu PDO ile nasıl yapabilirim
Zaman bulursam pdo lu şeklinide yayınlarım.
Fatal error: Uncaught Error: Call to a member function fetch_assoc() on boolean in C:\xampp\htdocs\sitem\Login.php:80 Stack trace: #0 {main} thrown in C:\xampp\htdocs\sitem\Login.php on line 80 böyle bir hata veriyor nasıl çözebilirim yardımcı olurmusunuz
Veri tabanını doğru yülediğinden emin ol ve sorguyu değiştirdiysen sorgunun doğruluğundan emin ol.
Kolay kullanıcı adı ve parola sürekli hatalı diyor panel da girsek aynısı oluyor
Veri tabanı ayarlarını doğru yaptığınıza emin olun.
Merhaba hocam içeriğin detayları için teşekkürler. Fakat bir sorunum var bağlantıları gayet düzgün yapmama rağmen kullanıcı adı ve şifre hata veriyor hiç bir şekilde giremiyorum
Tekrar kontrol ettim sorunsuz çalışıyor.
Hocam merhaba Kendi bilgisayarımda denedim gayet güzel çalıştı fakat Web e attığım zaman kullanıcı login ekranı yerine direk index sayfasına giriyor. Anlayamadım
Farklı tarayıcıda deneyiniz.
hocam herşeyi doğru yapmama rağmen /admin/ ile girince direk admin panele giriyor. parola vs sormuyor, login.php girip k.adi vs doğru giriyorum fakat giriş yapmıyor. logout.php ile çıkışyaptığımızdada. logout.php sayfasında kalıyor. sorunu bir türlü bulamadım.
Buradaki eğitim videolarını izlerseniz login kısmını nasıl yapacağınızı anlarsınız.