Tidak Dapat Menyambungkan Borang Log Masuk ke Pangkalan Data MySQL
Siasatan ini berkaitan dengan melaksanakan fungsi log masuk pengguna yang mengesahkan terhadap pangkalan data MySQL. Pengguna menjangka untuk memasukkan nama pengguna dan kata laluan, yang harus disahkan terhadap bukti kelayakan yang disimpan dalam pangkalan data. Malangnya, semasa borang diserahkan tanpa ralat, kefungsian yang diingini tidak tercapai.
Punca isu ini terletak pada kekurangan perlindungan terhadap serangan suntikan SQL dan tidak selamat penyimpanan kata laluan dalam teks biasa dalam pangkalan data. Untuk menangani kebimbangan ini, adalah disyorkan untuk:
Daftar.php:
<code class="php">// Replace previous code with the following: session_start(); if (isset($_SESSION['userid'])) { // Redirect to safe page } if (isset($_POST['register'])) { $email = $_POST['email']; $password = $_POST['password']; // Cleartext password from user // New code for password hashing $hashed_password = password_hash($password, PASSWORD_DEFAULT); // Database connection and query $host = "localhost"; $dbname = "database_name"; $user = "username"; $pass = "password"; try { $conn = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $conn->prepare("INSERT INTO user_accounts (email, password) VALUES (?, ?)"); $stmt->execute([$email, $hashed_password]); // Redirect to login page $conn = null; } catch (PDOException $e) { throw $e; } }</code>
Log Masuk.php:
<code class="php">// Replace previous code with the following: session_start(); if (isset($_SESSION['userid'])) { // Redirect to safe page } if (isset($_POST['login'])) { $email = $_POST['email']; $password = $_POST['password']; // Cleartext password from user // Database connection and query $host = "localhost"; $dbname = "database_name"; $user = "username"; $pass = "password"; try { $conn = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Get hashed password from database $stmt = $conn->prepare("SELECT password FROM user_accounts WHERE email = ?"); $stmt->execute([$email]); $hashed_db_password = $stmt->fetchColumn(); if (password_verify($password, $hashed_db_password)) { // User authenticated successfully $_SESSION['userid'] = true; // Redirect to safe page } else { // Authentication failed } $conn = null; } catch (PDOException $e) { throw $e; } }</code>
Dengan pengubahsuaian kod ini, log masuk pengguna kini seharusnya berfungsi dengan baik dengan berinteraksi dengan selamat dengan pangkalan data MySQL, menghalang kedua-duanya Serangan suntikan SQL dan kompromi kata laluan pengguna.
Atas ialah kandungan terperinci Mengapa Borang Log Masuk Saya Tidak Menyambung ke Pangkalan Data MySQL Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!