Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Borang Log Masuk Saya Tidak Menyambung ke Pangkalan Data MySQL Saya?

Mengapa Borang Log Masuk Saya Tidak Menyambung ke Pangkalan Data MySQL Saya?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-25 11:13:02736semak imbas

Why is My Login Form Not Connecting to My MySQL Database?

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.

Menyelesaikan Isu

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:

  • Gunakan pernyataan yang disediakan: Parameter input pengguna untuk mengelakkan serangan suntikan SQL. Daripada membenamkan input pengguna secara langsung ke dalam pertanyaan SQL, pemegang tempat digunakan dan parameter terikat pada pemegang tempat ini.
  • Laksanakan pencincangan kata laluan yang betul: Simpan kata laluan dengan selamat menggunakan fungsi pencincangan sehala seperti bcrypt atau PBKDF2. Ini menghalang pengguna yang tidak dibenarkan daripada mengakses kata laluan teks biasa sekiranya berlaku pelanggaran data.

Penyelesaian Kod (Menggunakan Penyata Disediakan dan Pencapaian Kata Laluan)

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn