SQL tablolarında birincil anahtarlar için sadece id kullanmanız genel bir uygulama olarak kabul edilir ve doğru bir şekilde tasarlandığında diğer tablolarla karışıklık yaratmaz. Ancak, bunun bazı potansiyel riskleri vardır ve dikkat edilmesi gereken noktalar şunlardır:
Potansiyel Karışıklık Durumları
- Aynı ID'lerin Farklı Tablolarda Kullanılması:
- Eğer oturumda yalnızca bir id değişkeni kontrol ediyorsanız, hangi tabloya ait olduğunu belirlemek zorlaşabilir. Örneğin:
- users tablosundaki bir id değeri ile
- orders veya products gibi diğer tablolardaki bir id değeri aynı oturum değişkeninde karışabilir.
- Yanlış veya Eksik Veritabanı İlişkileri:
- Tablo ilişkileriniz (foreign key, primary key) doğru tanımlanmadıysa veya yanlış bir şekilde sorgulanıyorsa, id sütunlarının karışıklık yaratması olasıdır.
- Footer ve Header Kodunda Kullanılan id Kontrolleri:
- Eğer birden fazla tabloda aynı isimde bir id değişkenine dayanıyorsanız ve bu değişken farklı tablolar için farklı anlamlara geliyorsa (örneğin, user_id ve product_id gibi), bu durum veri bütünlüğünü bozabilir.
Düne kadar yazılımımdaki giriş sayfası sorunsuz çalışıyordu. 3lü alt kategori sistemi v.s ekledim. Yazılımın kısa bir videosunu çekeyim dedim giriş yapmıyor ama şifre yanlış olduğunda uyarı vs atıyor kayıtda oluyor sorunu anlamadım gitti
Chatgptden destek alayım dedim beceremedi
<?php
session_start(); // PHP oturumunu başlatıyoruz
include 'connect/db.php'; // Veritabanı bağlantısı
// Hata ayıklama (geliştirme sırasında kullanın, ancak canlıda devre dışı bırakın)
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
// Giriş işlemi yapılmışsa
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// Formdan gelen verileri al
$username_or_email = $_POST['login'];
$password = $_POST['password'];
// MD5 ile şifreyi hash'le
$hashed_password = md5($password); // MD5 hash kullanılıyor
// Kullanıcı adı veya e-posta ile veritabanında sorgu yap
$stmt = $pdo->prepare("SELECT id, username, password FROM users WHERE username = ? OR email = ?");
$stmt->execute([$username_or_email, $username_or_email]);
// Kullanıcıyı bul ve şifreyi doğrula
if ($stmt->rowCount() > 0) {
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if ($hashed_password === $user['password']) {
// Giriş başarılı
$_SESSION['user_id'] = $user['id'];
$_SESSION['username'] = $user['username'];
// "Beni hatırla" seçeneği kontrolü
if (isset($_POST['remember'])) {
setcookie('user_id', $user['id'], time() + 86400 * 30, "/"); // 30 gün süreyle hatırlama
setcookie('username', $user['username'], time() + 86400 * 30, "/");
}
// Giriş başarılı mesajını oturuma kaydet
$_SESSION['login_success'] = "Giriş başarılı!";
// Yönlendirme için başarılı olduğunu belirten bir flag gönder
echo "<script>window.location.href = '?giris_basarili=true';</script>";
exit();
}
} else {
$_SESSION['login_error'] = "Kullanıcı adı veya e-posta bulunamadı.";
}
}
?>