PHP ile Üyelik Sistemi
GİRİŞ
Bu yazıda PHP'yi kullanarak web siteniz için nasıl bir üyelik sistemi (giriş / kayıt) oluşturacağınızı öğreneceğiz.
BAŞLAMADAN ÖNCE
Bu eğiticiye başlamadan önce şunlardan emin olun:
+ PHP sürümünüzü 5.6 veya üzeri olarak ayarladınız . PHP 7.0 tavsiyemizdir.
Bunu yapmak için cPanel'e gidin ve ardından 'Ayarlar'>>
'Genel'> "Aşağı kaydır"> "PHP Versiyonu"> "5.6 '
+ Bir veritabanı oluşturduk
Bunu yapmak için, cPanel'inize gidin, Veritabanları yönet'e tıklayın, ardından
bir veritabanı oluşturun. Veritabanı kimlik bilgilerini bir yere kaydedin,
çünkü daha sonra kullanacağız.
+ Bu kod satırını .htaccess'e eklediniz.
php_flag output_buffering on
TUTARI
VERİTABANI
-
PhpMyAdmin'e gidin ve veritabanı kimlik bilgilerinizle giriş yapın.
-
Veritabanını tıklayın (örn. Id3456_cksoft), daha sonra SQL üzerine tıklayın ve aşağıdaki kodu yapıştırın
NOT EXISTS OLMADAN TABLO OLUŞTURMA
users
(
userId
int (11) NOT NULL AUTO_INCREMENT,
userName
varchar (30) NOT NULL,
userEmail
varchar (60) NOT NULL,
userPass
varchar (255) NOT NULL,
PRİMER KEY (userId
),
UNIQUE KEYuserEmail
(userEmail
)
) ENGINE = InnoDB VARSAYILAN CHARSET = utf8 AUTO_INCREMENT = 1;
Sonra GİT e tıklayın
Sonuç:
Kullanıcı bilgilerini saklamamız gereken bir tablo oluşturduk .
HTML ve PHP
Veritabanına bağlanma
Dbconnect.php adlı bir dosya oluşturun ve içine şu kodu ekleyin
<?php
error_reporting( ~E_DEPRECATED & ~E_NOTICE );
define('DBHOST', 'localhost');
define('DBUSER', 'root');
define('DBPASS', '1234');
define('DBNAME', 'dbtest');
$conn = mysqli_connect(DBHOST,DBUSER,DBPASS);
$dbcon = mysqli_select_db($conn,DBNAME);
if ( !$conn ) {
die("Connection failed : " . mysqli_error());
}
if ( !$dbcon ) {
die("Database Connection failed : " . mysqli_error());
}
?>
Şimdi şunu değiştirin:
+ DBUSER, 'cPanel'>> 'Veritabanlarını yönet' bulunan veritabanı kullanıcısı ile.
+ DBPASS ile veritabanı şifrenizi.
+ DBNAME, 'cPanel' de bulunan veritabanı adınızla>> 'Veritabanlarını yönetin'.
Giriş sayfası
Login.php adlı bir dosya oluşturun ve şu kodu ekleyin:
<?php
ob_start();
session_start();
include_once 'dbconnect.php';
if ( isset($_SESSION['user'])!="" ) {
header("Location: home.php");
exit;
}
$error = false;
if( isset($_POST['btn-login']) ) {
$email = trim($_POST['email']);
$email = strip_tags($email);
$email = htmlspecialchars($email);
$pass = trim($_POST['pass']);
$pass = strip_tags($pass);
$pass = htmlspecialchars($pass);
if(empty($email)){
$error = true;
$emailError = "Please enter your email address.";
} else if ( !filter_var($email,FILTER_VALIDATE_EMAIL) ) {
$error = true;
$emailError = "Please enter a valid email address.";
}
if(empty($pass)){
$error = true;
$passError = "Please enter your password.";
}
if (!$error) {
$password = hash('sha256', $pass);
$res=mysqli_query($conn,"SELECT userId, userName, userPass FROM users WHERE userEmail='$email'");
$row=mysqli_fetch_array($res);
$count = mysqli_num_rows($res);
if( $count == 1 && $row['userPass']==$password ) {
$_SESSION['user'] = $row['userId'];
header("Location: home.php");
} else {
$errMSG = "Incorrect Credentials, Please try again...";
}
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>000Webhost membership system</title>
</head>
<body>
<div class="container">
<div id="login-form">
<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" autocomplete="off">
<div class="col-md-12">
<div class="form-group">
<h2 class="">Sign In.</h2>
</div>
<div class="form-group">
<hr />
</div>
<?php
if ( isset($errMSG) ) {
?>
<div class="form-group">
<div class="alert alert-danger">
<span class="glyphicon glyphicon-info-sign"></span> <?php echo $errMSG; ?>
</div>
</div>
<?php
}
?>
<div class="form-group">
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-envelope"></span></span>
<input type="email" name="email" class="form-control" placeholder="Your Email" value="<?php echo $email; ?>" maxlength="40" />
</div>
<span class="text-danger"><?php echo $emailError; ?></span>
</div>
<div class="form-group">
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-lock"></span></span>
<input type="password" name="pass" class="form-control" placeholder="Your Password" maxlength="15" />
</div>
<span class="text-danger"><?php echo $passError; ?></span>
</div>
<div class="form-group">
<hr />
</div>
<div class="form-group">
<button type="submit" class="btn btn-block btn-primary" name="btn-login">Sign In</button>
</div>
<div class="form-group">
<hr />
</div>
<div class="form-group">
<a href="signup.php">Sign Up Here...</a>
</div>
</div>
</form>
</div>
</div>
</body>
</html>
<?php ob_end_flush(); ?>
Kayıt sayfası
Signup.php adlı bir dosya oluşturun ve şu kodu ekleyin:
<?php
ob_start();
session_start();
if( isset($_SESSION['user'])!="" ){
header("Location: home.php");
}
include_once 'dbconnect.php';
$error = false;
if ( isset($_POST['btn-signup']) ) {
$name = trim($_POST['name']);
$name = strip_tags($name);
$name = htmlspecialchars($name);
$email = trim($_POST['email']);
$email = strip_tags($email);
$email = htmlspecialchars($email);
$pass = trim($_POST['pass']);
$pass = strip_tags($pass);
$pass = htmlspecialchars($pass);
if (empty($name)) {
$error = true;
$nameError = "Please enter your full name.";
} else if (strlen($name) < 3) {
$error = true;
$nameError = "Name must have atleat 3 characters.";
} else if (!preg_match("/^[a-zA-Z ]+$/",$name)) {
$error = true;
$nameError = "Name must contain alphabets and space.";
}
if ( !filter_var($email,FILTER_VALIDATE_EMAIL) ) {
$error = true;
$emailError = "Please enter valid email address.";
} else {
$query = "SELECT userEmail FROM users WHERE userEmail='$email'";
$result = mysqli_query($conn,$query);
$count = mysqli_num_rows($result);
if($count!=0){
$error = true;
$emailError = "Provided Email is already in use.";
}
}
if (empty($pass)){
$error = true;
$passError = "Please enter password.";
} else if(strlen($pass) < 6) {
$error = true;
$passError = "Password must have atleast 6 characters.";
}
$password = hash('sha256', $pass);
if( !$error ) {
$query = "INSERT INTO users(userName,userEmail,userPass) VALUES('$name','$email','$password')";
$res = mysqli_query($conn,$query);
if ($res) {
$errTyp = "success";
$errMSG = "Successfully registered, you may login now";
unset($name);
unset($email);
unset($pass);
} else {
$errTyp = "danger";
$errMSG = "Something went wrong, try again later...";
}
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Sign Up - 000webhost membership system</title>
</head>
<body content="width=device-width,initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<center>
<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" autocomplete="off"> <h2 class="">Sign Up.</h2>
<hr />
<?php
if ( isset($errMSG) ) {
?>
<span class="glyphicon glyphicon-info-sign"></span> <?php echo $errMSG; ?>
</div>
</div>
<?php
}
?>
<span class="input-group-addon"><span class="glyphicon glyphicon-user"></span></span>
<input type="text" name="name" class="form-control" placeholder="Enter Name" maxlength="50" value="<?php echo $name ?>" />
<span class="text-danger"><?php echo $nameError; ?></span>
<br>
<span class="input-group-addon"><span class="glyphicon glyphicon-envelope"></span></span>
<input type="email" name="email" class="form-control" placeholder="Enter Your Email" maxlength="40" value="<?php echo $email ?>" />
<span class="text-danger"><?php echo $emailError; ?></span>
</div>
<br>
<span class="input-group-addon"><span class="glyphicon glyphicon-lock"></span></span>
<input type="password" name="pass" class="form-control" placeholder="Enter Password" maxlength="15" />
<span class="text-danger"><?php echo $passError; ?></span>
<br>
<div class="form-group">
<hr />
<button type="submit" class="btn btn-block btn-primary" name="btn-signup">Sign Up</button>
<hr />
<a href="login.php">Already have an account? Sign in !</a>
</form>
</center>
</body>
</html>
<?php ob_end_flush(); ?>
Ana sayfa
Başarılı bir oturum açtıktan sonra kullanıcı ana sayfa adı verilen bir sayfaya yönlendirilir. Home.php adlı bir dosya oluşturun ve şu kodu ekleyin:
<?php
ob_start();
session_start();
require_once 'dbconnect.php';
if( !isset($_SESSION['user']) ) {
header("Location: login.php");
exit;
}
$res=mysqli_query($conn,"SELECT * FROM users WHERE userId=".$_SESSION['user']);
$userRow=mysqli_fetch_array($res);
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Welcome - <?php echo $userRow['userName']; ?></title>
</head>
<body>
<h1>This page is only visible for logged in users<h1>
<a href="logout.php?logout">Logout</a>
</body>
</html>
<?php ob_end_flush(); ?>
Çıkış sayfası
Logout.php adlı bir dosya oluşturun ve şu kodu ekleyin:
<?php
session_start();
if (!isset($_SESSION['user'])) {
header("Location: index.php");
} else if(isset($_SESSION['user'])!="") {
header("Location: home.php");
}
if (isset($_GET['logout'])) {
unset($_SESSION['user']);
session_unset();
session_destroy();
header("Location: login.php");
exit;
}
?>
Sonuç:
5 dosyayı yarattık:
+ dbconnect.php veritabanına bağlanmak ve doğru veritabanını seçmek
+ login.php kullanıcıların oturum
açması + signup.php kullanıcıların kaydolması için
+ home.php oturum açmış kullanıcılar
+ logout.php kullanıcılardan çıkmak için
DİKKAT EDİN
Bu kod parçasını, oturum açmış kullanıcıların yalnızca erişmesini istediğiniz her sayfanın üst kısmına ekleyin
<?php
ob_start();
session_start();
require_once 'dbconnect.php';
if( !isset($_SESSION['user']) ) {
header("Location: index.php");
exit;
}
$res=mysqli_query($conn,"SELECT * FROM users WHERE userId=".$_SESSION['user']);
$userRow=mysqli_fetch_array($res);
?>
SONUNDA
Umarım bu eğitici yazımızda hoşlanırsınız.
Daha fazla yardıma ihtiyacınız olursa, burada yeni bir yorum oluşturun ve size yardımcı olmaktan memnuniyet duyarız!
hadi ilk yorum scirpti dosyasını verseydin iyi olurdu
gayet güzel anlatılmış çok teşekkürler.
hem balık tutmayı öğretmişsin hem de balık vermişsin. teşekkürler.
emeğinize sağlık fakat kodlarda hata var sanırım kayıt esnasında bişeyler ters gitti hatası veriyor ve home sayfasına yönlendirmiyor
Lise son sınıf bilgisayar bölümü öğrencisiyim, gerçekten kod hayatımı kurtardı projeme ekliyorum şu anda, teşekkürler.
cPanelim yok nasıl açarım?
Cok iyi bir anlatim olmus, tesekkurler. Session ile ilgili sorunlarim vardi ob_start hata veriyormus. Sayenizde buldum. Tesekkurler sitenizi takip edecegim.
Yeni projem için kullanacağım teşekkürler.