php不会连接到mysql并查询user/pass

bt1cpqcv  于 2023-05-16  发布在  Mysql
关注(0)|答案(3)|浏览(125)

我试图让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";
    }
?>
soat7uwm

soat7uwm1#

这段代码应该为你工作。

登录页面:

<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"); }
?>
v1uwarro

v1uwarro2#

我的想法:
您的查询可以是

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

避免“错误”。

使用session_start()管理会话

另外,尝试在数据库工具(例如:Phpmyadmin,HeidiSQL等),看看是否有结果出来。
如果是这样的话,你可以尝试使用PDO对象来创建与数据库的连接。
当提交表单或PHP转储日志时,是否会出现“访问被拒绝”?

oogrdqng

oogrdqng3#

第一步

打开错误报告以帮助调试此问题。

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

第二步

任何和所有用户输入进行消毒。由于您使用的是mysqli(),因此您将使用类似mysqli_real_escape_string()的代码。
现在有一个明显的错误直接从 bat ,作为弗雷德-ii-指出;因为你正在处理会话,你需要先示例化它。
一个例子是将类似这样的东西放在登录脚本中。

<?php 
    session_start();
?>

现在第二个错误是你把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');
}
?>

相关问题