🔧 Complete Database Connection Fix
❌ הבעיות שנמצאו:
- בעיה #1:
$conn לא מוגדר ב-auth.php (שורה 23)
- בעיה #2: db.php ו-auth.php קוראים אחד לשני (circular dependency)
- בעיה #3: db.php לא צריך לקרוא ל-
requireLogin()
🔍 ניתוח מפורט
📄 auth.php - שורה 23:
$stmt = $conn->prepare(...);
הבעיה: משתמש ב-$conn אבל הוא לא קיים!
📄 db.php - בעיות:
- שורה 3:
require_once auth.php ← יוצר circular dependency
- שורה 12:
requireLogin() ← db.php לא צריך authentication!
- חסר: פונקציה שמחזירה את
$conn
💡 האסטרטגיה לפתרון
מה נעשה:
- ניצור db.php חדש - פשוט ונקי, רק חיבור למסד נתונים
- נתקן auth.php - יעשה
require_once 'db.php' ויקבל את $conn
- נסיר circular dependency - db.php לא יקרא ל-auth.php
- נוסיף getPDOConnection() - פונקציה שמחזירה חיבור
📝 הקבצים החדשים
🆕 db.php החדש (נקי ופשוט):
<?php
/**
* Database Connection - PDO
*/
require_once __DIR__ . '/../config.php';
// יצירת חיבור PDO גלובלי
try {
$conn = new PDO(
"mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=utf8mb4",
DB_USER,
DB_PASS,
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false
]
);
} catch (PDOException $e) {
error_log("DB Connection Error: " . $e->getMessage());
die("Database connection failed");
}
/**
* קבלת חיבור PDO
*/
function getPDOConnection() {
global $conn;
return $conn;
}
🔧 תיקון auth.php (תחילת הקובץ):
<?php
/**
* Authentication Functions
*/
// טעינת חיבור מסד נתונים
require_once __DIR__ . '/db.php';
// וידוא ש-session התחיל
if (session_status() === PHP_SESSION_NONE) {
session_start();
}
/**
* התחברות משתמש
*/
function login($email, $password) {
global $conn; // ← עכשיו $conn קיים!
try {
$stmt = $conn->prepare("SELECT * FROM users WHERE email = ? LIMIT 1");
// ... שאר הקוד