【问题标题】:php wont connect to mysql and query for user/passphp不会连接到mysql并查询用户/密码
【发布时间】:2014-05-26 23:08:47
【问题描述】:

我正在尝试让 php/mysql 工作,以便它从表单中获取用户名和密码并检查它们是否在 mysql 表中。如果他们在表中,它应该让您登录并将您发送到 index.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>

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

【问题讨论】:

  • 试试if (mysqli_num_rows($query) &gt; 0){
  • 另外,您还缺少关闭 &lt;/form&gt; 标记,因此这可能是问题的一部分。您以纯文本形式存储密码,不建议这样做。在开发过程中将错误报告添加到文件顶部error_reporting(E_ALL); ini_set('display_errors', 1);
  • new 关键字对于mysqli_connect() 是必需的吗?
  • @Alon 不,不需要
  • 旁注:由于您正在使用会话 $_SESSION['logged_in'] - session_start(); 未显示在您的代码中。因此,会话永远不会是true

标签: php mysql forms connect login-script


【解决方案1】:

这段代码应该适合你。

登录页面:

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

【讨论】:

  • 现在显示错误:“致命错误:调用未定义的函数 mysqli_real_escape_string()”
  • @user3677859 哦,对不起!!!检查我更新的答案。让我知道你是否能得到解决方案
  • 现在它说:“致命错误:在第 4 行的 /var/www/html/db_connect.php 中找不到类 'mysqli_connect'”
  • @user3677859 试试 $con = mysqli_connect("localhost", "your_db_username", "your_db_password", "your_db");删除 new 因为 new 是面向对象的样式用法。
  • 感谢您的帮助...它仍然给出同样的错误。 Php 似乎不想与 mysql 一起工作。一旦它到达一个 mysql 函数,它就会给出一个错误。
【解决方案2】:

我的想法:

您的查询可以是

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

避免' '错误。

在管理会话之前使用session_start()

另外,尝试在您的数据库工具(例如 Phpmyadmin、HeidiSQL 等)上输入此查询,看看是否有任何结果。

如果是这样,您可以尝试使用 PDO 对象来创建与数据库的连接。

提交表单或 PHP 转储日志时是否收到“访问被拒绝”?

【讨论】:

  • 不,我没有收到“拒绝访问”消息或任何形式的反馈。提交表单并被定向到 db_connect 页面后,它只是变成空白,没有任何反应。
  • 另外,我尝试在 mysql 中输入查询(SELECT * FROM members WHERE username="" AND password="";),结果找到了正确的行。
  • 在 mysqli_connect 对象之后使用或死亡(“错误消息”)。所以我们可以看看是不是连接
【解决方案3】:

步骤#1

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

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

步骤 #2

Sanatize any AND all 用户输入。由于您使用的是mysqli(),因此您将使用mysqli_real_escape_string() 之类的东西。

现在有一个明显的错误,就像Fred -ii- stated;由于您正在处理会话,因此您需要先实例化它。

一个例子就是为你的登录脚本添加这样的东西。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 2017-11-07
    • 1970-01-01
    • 2021-01-21
    • 2019-02-07
    相关资源
    最近更新 更多