ログイン フォームを MySQL データベースに接続できません
このお問い合わせは、MySQL データベースに対して検証するユーザー ログイン機能の実装に関するものです。ユーザーはユーザー名とパスワードを入力することを期待していますが、これらはデータベースに保存されている資格情報と照合して検証される必要があります。残念ながら、フォームはエラーなしで送信されますが、目的の機能は実現されません。
この問題の根本原因は、SQL インジェクション攻撃に対する保護が欠如しており、安全でないことにあります。パスワードを平文でデータベースに保存します。これらの問題に対処するには、
Register.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>
Login.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>
これらのコード変更により、ユーザー ログインは MySQL データベースと安全にやり取りすることで適切に機能し、両方の操作が防止されるようになります。 SQL インジェクション攻撃とユーザー パスワードの侵害。
以上がログイン フォームが MySQL データベースに接続できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。