Hizmetlerimiz hakkında bilgi almak için tıklayın.
Daha önce HTML yapılarını oluşturduğumuz Login form ile Register form'a PHP'de veritabanında işlem sağlamak için gerekli işlevselliği ekleyeceğiz.
Daha önce oluşturduğumuz Login Form HTML Yapısı -> Login Form
Daha önce oluşturduğumuz Register Form HTML Yapısı -> Register Form
Daha önceden HTML yapılarımızda oluşturduğumuz HTML formlarının action
bölümünde bulunan register.php
ve submit-your-login-form.php
işlevselliğini sağlayalım,
bunu sağlamak için ilk önce bilgileri saklayacağımız ve kontrol edeceğimiz bir veritabanına ihtiyacımız var.
Veritabanı Oluşturma
Öncelikle, kullanıcı bilgilerini saklamak için basit bir veritabanı yapısı gereklidir. MySQL
kullanarak users
adında bir tablo oluşturabiliriz:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
password VARCHAR(255) NOT NULL
);
Yukarıda SQL sorgularını kullanarak oluşturabileceğimiz bir users
tablo örneği verilmiştir.
Bu tablo, kullanıcının adı, e-posta adresi ve şifresini saklayacaktır. Şifre, güvenlik nedeniyle hash'lenmiş olarak saklanmalıdır.
Ardından, kullanıcıların bilgilerini burada saklayabilmek için ilk önce kayıt olma işlevselliğini sağlayalım, yani register.php
'yi oluşturalım.
Örnek HTML:
<form action="register.php" method="post">
<input type="text" name="username" placeholder="Kullanıcı Adı" required>
<input type="email" name="email" placeholder="E-posta" required>
<input type="password" name="password" placeholder="Şifre" required>
<button type="submit">Kayıt Ol
</form>
PHP register.php Kodu:
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST["username"];
$email = $_POST["email"];
$password = password_hash($_POST["password"], PASSWORD_DEFAULT); // Şifreyi hash'leme
// Veritabanı bağlantısı
$conn = new mysqli("servername", "username", "password", "database");
if ($conn->connect_error) {
die("Bağlantı hatası: " . $conn->connect_error);
}
$sql = "INSERT INTO users (username, email, password) VALUES (?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("sss", $username, $email, $password);
$stmt->execute();
if ($stmt->affected_rows > 0) {
echo "Kayıt başarılı!";
} else {
echo "Hata: " . $conn->error;
}
$stmt->close();
$conn->close();
}
?>
Bu dosya, kullanıcıların kayıt olmasını sağlar. Kullanıcı adı, e-posta ve şifre bilgilerini alır, şifreyi hash'ler ve veritabanına kaydeder.
Bu dosya üzerinde düzenlemeniz gereken bölüm aşağıda verilmiştir.
$conn = new mysqli("servername", "username", "password", "database");
Yukarıda bulunan bölümleri, kendi bilgilerinize göre düzenleyin. Kullandığınız server'in adı, kullandığınız serverin giriş bilgileri ve tablo bilgilerinden oluşur.
PHP Giriş Form
Veritabanımızda users
tablomuzu oluşturduk, kullanıcıların başarıyla kayıt olmalarını sağladık, şimdi ise kullanıcıların web sitemize giriş yapmalarını sağlamalıyız.
Örnek HTML:
<form action="submit-your-login-form.php" method="post">
<input type="text" name="username" placeholder="Kullanıcı Adı" required>
<input type="password" name="password" placeholder="Şifre" required>
<button type="submit">Giriş Yap</button>
</form>
PHP Kodu submit-your-login-form.php
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST["username"];
$password = $_POST["password"];
// Veritabanı bağlantısı
$conn = new mysqli("servername", "username", "password", "database");
if ($conn->connect_error) {
die("Bağlantı hatası: " . $conn->connect_error);
}
$sql = "SELECT id, password FROM users WHERE username = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("s", $username);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
if (password_verify($password, $row["password"])) {
echo "Giriş başarılı!";
} else {
echo "Hatalı şifre!";
}
} else {
echo "Kullanıcı bulunamadı!";
}
$stmt->close();
$conn->close();
}
?>
Bu dosya, kullanıcıların giriş yapmasını sağlar. Kullanıcı adı ve şifre kontrol edilir, doğruysa giriş başarılı bir şekilde gerçekleştirilir.
Girişler başarılı olduktan sonra, sayfalarda giriş yapmayı kontrol eden session_start()
işlevlerinin çağırıldığından emin olun.
Güvenlik Notları:
- Kullanıcı şifreleri,
password_hash
fonksiyonu ile güvenli bir şekilde hash'lenir. - Bu örnekler, temel bir anlayış için tasarlanmıştır. Gerçek bir uygulama için daha kapsamlı güvenlik önlemleri alınmalıdır.
- SQL enjeksiyonuna karşı korunmak için hazırlanmış ifadeler (
prepared statements
) kullanılır. - Gerçek bir uygulamada, HTTPS kullanarak veri iletimini şifrelemek önemlidir.