簡體   English   中英

PHP將無法連接到MySQL並查詢用戶名/密碼

[英]php wont connect to mysql and query for user/pass

我正在嘗試使php / mysql正常工作,以便它將表單中的用戶名和密碼用於mysql表中。 如果它們在表中,則應該登錄並發送到index.php頁面(我更改了user / pass / database)

登錄頁面上的表單:

    <form action="db_connect.php" method="post">
    <input type="text" name="username" placeholder="Username" />
    <input type="password" name="password" placeholder="Password" />
    <input type="submit" value="Login" class="customButton" />
    </form>

db_connect.php:

    <?php 
    $username = $_POST['username'];
    $password = $_POST['password'];
    $con = new mysqli_connect("localhost","user","password","database");
    $query = mysqli_query($con,"SELECT * FROM members WHERE username='".$username."' AND password='".$password."'");
    if (mysqli_num_rows($query) != 0){
        $_SESSION['logged_in'] = true;
        header('Location: index.php');
    }else{
        echo "Access denied";
    }
?>

我的想法:

您的查詢可以是

$query = mysqli_query($con,"SELECT * FROM members WHERE username = '$username'");

避免錯誤。

在管理會話之前使用session_start()

另外,請嘗試在您的數據庫工具(例如Phpmyadmin,HeidiSQL等)上鍵入此查詢,然后查看是否有任何結果。

如果可以,則可以嘗試使用PDO對象創建與數據庫的連接。

提交表單或PHP轉儲日志時,是否收到“拒絕訪問”信息?

此代碼應為您工作。

登錄頁面:

<form action="db_connect.php" method="POST">
<input type="text" name="username" placeholder="Username" />
<input type="password" name="password" placeholder="Password" />
<input type="submit" value="Login" class="customButton" />
</form>

在PHP文件中,我們首先開始一個新的會話,然后報告所有錯誤(如果生成的話),然后轉義輸入字符串以避免注入,然后檢查是否設置了通過$ _POST發送的用戶名和密碼。 然后使用我們的數據庫檢查輸入值,最后將用戶重定向到他的個性化index.php

db_connect.php

<?php
session_start();
error_reporting(E_ALL); ini_set('display_errors', 1);
$con = mysqli_connect("localhost","user","password","database");
$username = $_POST['username'];
$password = $_POST['password'];
$username = mysqli_real_escape_string($con, $username);
$password = mysqli_real_escape_string($con, $password);
if(isset($username) && isset($password)){

$query = mysqli_query($con,"SELECT * FROM members WHERE username='".$username."' AND password='".$password."'");
if (mysqli_num_rows($query) > 0){
    $_SESSION['logged_in'] = $user;
    header("location: index.php");
}else{
    echo "Access denied";
} } else { header("location: login.php"); }
?>

第1步

打開錯誤報告以幫助調試此問題。

<?php 
error_reporting(E_ALL);
ini_set('display_errrors', 1);
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
?>

第2步

所有AND用戶輸入進行消毒。 由於您正在使用mysqli() ,因此將使用類似mysqli_real_escape_string()東西。

正如弗雷德-ii-所說 ,現在馬上就有一個明顯的錯誤。 由於您正在處理會話,因此需要首先實例化它。

例如,將這樣的內容放入您的登錄腳本。

<?php 
    session_start();
?>

現在第二個錯誤是您正在嘗試/嘗試將mysqli_connect()實例mysqli_connect()一個類, mysqli_connect()並非如此。 您的登錄代碼應如下所示:

<?php

session_start();

$con = mysqli_connect("localhost", "user", "password", "database") or die(mysqli_error($con));

$username = $_POST['username'];
$password = $_POST['password'];
$username = mysqli_real_escape_string($con, $username);
$password = mysqli_real_escape_string($con, $password);
if (isset($username) && isset($password)) {

    $query = mysqli_query($con, "SELECT * FROM members WHERE username='" . $username . "' AND password='" . $password . "'");
    if (mysqli_num_rows($query) > 0) {
        $_SESSION['logged_in'] = true;
        header("location: index.php");
    } else {
        echo "Access denied";
    }
}
?>

不用說,您的index.php將在其頂部需要session_start() ,以確保您可以像這樣檢查$_SESSION['logged_in']

<?php 
session_start();
if(!$_SESSION['logged_in']) {
    die('login.php');
}
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM