PHP 8'de kayıt formu (register formu), kullanıcıların siteye kayıt olabilmesi için gerekli bilgileri girmesini sağlayan ve bu bilgilerin sunucuda işlenerek veritabanına kaydedildiği bir formdur. Kayıt formunda genellikle kullanıcı adı, e-posta, şifre gibi bilgilerin girilmesi istenir. Bu bilgiler POST yöntemiyle sunucuya gönderilir ve PHP ile işlenir.
1. HTML Kayıt Formu Oluşturma
İlk olarak, HTML ile bir kayıt formu oluşturacağız. Kullanıcıdan gerekli bilgileri almak için bir form oluşturuyoruz.
HTML Kayıt Formu:
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<title>Kayıt Formu</title>
</head>
<body>
<h1>Kayıt Ol</h1>
<form action="register.php" method="post">
<label for="username">Kullanıcı Adı:</label>
<input type="text" id="username" name="username" required>
<br>
<br>
<label for="email">E-posta:</label>
<input type="email" id="email" name="email" required>
<br>
<br>
<label for="password">Şifre:</label>
<input type="password" id="password" name="password" required>
<br>
<br>
<label for="confirm_password">Şifre Tekrarı:</label>
<input type="password" id="confirm_password" name="confirm_password" required>
<br>
<br>
<input type="submit" value="Kayıt Ol">
</form>
</body>
</html>
Bu formda, kullanıcı adı, e-posta, şifre ve şifre tekrarı gibi alanlar bulunur. Kullanıcı formu doldurup gönderdiğinde veriler register.php
dosyasına POST yöntemiyle iletilir.
2. PHP ile Kayıt Verilerini İşleme
Form verilerini almak ve işlemek için PHP'de bir register.php
dosyası oluşturacağız. Bu dosyada aşağıdaki işlemleri yapacağız:
- Form verilerini kontrol etme (örneğin, şifrelerin eşleşip eşleşmediğini kontrol etme).
- Kullanıcı bilgilerini veritabanına kaydetme.
- Şifreyi güvenli bir şekilde hashleyerek saklama.
register.php:
<?php
// Veritabanı bağlantısı (örnek MySQL bağlantısı)
$host = 'localhost';
$dbname = 'test_db';
$username = 'root';
$password = '';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Veritabanı bağlantısı başarısız: " . $e->getMessage());
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Form verilerini al
$username = htmlspecialchars(trim($_POST['username']));
$email = htmlspecialchars(trim($_POST['email']));
$password = trim($_POST['password']);
$confirm_password = trim($_POST['confirm_password']);
// Hata mesajları için dizi
$errors = [];
// Form doğrulama
if (empty($username) || empty($email) || empty($password) || empty($confirm_password)) {
$errors[] = "Tüm alanlar doldurulmalıdır.";
}
if ($password !== $confirm_password) {
$errors[] = "Şifreler eşleşmiyor.";
}
// E-posta geçerli mi?
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = "Geçerli bir e-posta adresi giriniz.";
}
// Eğer hata yoksa veritabanına kaydet
if (count($errors) == 0) {
// Şifreyi güvenli bir şekilde hashleme
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
// Veritabanına kayıt ekleme
$sql = "INSERT INTO users (username, email, password) VALUES (:username, :email, :password)";
$stmt = $pdo->prepare($sql);
// Verileri bağla ve sorguyu çalıştır
if ($stmt->execute(['username' => $username, 'email' => $email, 'password' => $hashed_password])) {
echo "Kayıt başarılı! Şimdi giriş yapabilirsiniz.";
} else {
echo "Bir hata oluştu, lütfen tekrar deneyin.";
}
} else {
// Hataları ekrana yazdır
foreach ($errors as $error) {
echo "<p style='color:red;'>$error</p>";
}
}
}
?>
3. Kod Açıklaması
Veritabanı Bağlantısı
- Veritabanına PDO (PHP Data Objects) ile bağlanıyoruz. Bu yöntem, SQL enjeksiyon saldırılarına karşı güvenli bir yapıdır.
Form Verilerini Alma
- Formdaki tüm verileri
$_POST
ile alıyoruz vehtmlspecialchars()
vetrim()
fonksiyonlarıyla işleyerek güvenli hale getiriyoruz.
Form Doğrulama
- Boş Alan Kontrolü: Eğer kullanıcı adı, e-posta veya şifre alanlarından biri boşsa bir hata mesajı gösteriyoruz.
- Şifre Kontrolü: Girilen şifre ve şifre tekrarı eşleşmiyorsa bir hata mesajı gösteriyoruz.
-
E-posta Kontrolü:
filter_var()
ile kullanıcının girdiği e-postanın geçerli bir formatta olup olmadığını kontrol ediyoruz.
Şifre Hashleme
-
password_hash()
fonksiyonunu kullanarak şifreyi hashliyoruz. Bu fonksiyon, güvenli bir şekilde şifreyi şifreler ve veritabanına hashlenmiş bir şekilde kaydeder.
Veritabanına Kayıt
- Hazırlanmış bir SQL sorgusu ile kullanıcı verilerini veritabanına ekliyoruz. PDO'nun
prepare()
veexecute()
metodları ile güvenli bir şekilde veritabanı işlemi yapıyoruz.
4. Veritabanı Yapısı
Kullanıcı bilgilerini saklamak için bir users tablosu oluşturmanız gerekmektedir. Aşağıda basit bir SQL sorgusu ile bu tabloyu oluşturabilirsiniz:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Bu tablo:
- id: Otomatik olarak artan birincil anahtar.
- username: Kullanıcının girdiği kullanıcı adı.
- email: Kullanıcının girdiği e-posta.
- password: Hashlenmiş şifre.
- created_at: Kayıt zamanı otomatik olarak eklenir.
5. Güvenlik İpuçları
-
Şifre Hashleme: Şifrelerin düz metin olarak saklanmaması, hashlenmesi gerekir. PHP’nin
password_hash()
vepassword_verify()
fonksiyonlarını kullanmak, şifre güvenliği için en iyi yöntemdir. -
SQL Injection’a Karşı Korunma: PDO'nun hazırlanmış ifadeleri (prepared statements) kullanarak SQL enjeksiyon saldırılarına karşı koruma sağlar.
-
Veri Doğrulama ve Temizleme: Kullanıcıdan gelen her türlü veriyi mutlaka doğrulamak ve temizlemek gereklidir.
htmlspecialchars()
vetrim()
bu konuda yardımcı olur. -
SSL Kullanımı: Eğer hassas veriler (şifre, e-posta vb.) sunucuya gönderiliyorsa HTTPS kullanmak gereklidir. Bu, kullanıcı ve sunucu arasındaki veri iletimini şifreler.
6. Kayıt Sonrası Yönlendirme
Kayıt işlemi başarıyla tamamlandıktan sonra kullanıcıyı giriş sayfasına veya bir onay sayfasına yönlendirmek iyi bir uygulamadır. Bunu yapmak için PHP'nin header()
fonksiyonu kullanılabilir.
header("Location: login.php");
exit;
Bu kod parçası, kayıt işlemi tamamlandığında kullanıcıyı login.php
sayfasına yönlendirecektir.
7. Sonuç
PHP 8 ile bir kayıt formu oluşturmak, kullanıcıların verilerini güvenli bir şekilde sunucuya göndermelerini ve bu verilerin veritabanında saklanmasını sağlar. Kayıt formu oluştururken, verilerin güvenliğini sağlamak, şifreleri hashlemek ve SQL enjeksiyonlarına karşı koruma gibi güvenlik önlemleri almak çok önemlidir.