PHP、mySQL 和 xampp 登录表单问题

PHP, mySQL, and xampp login form problems

我正在为我的员工创建一个登录表单。我认为 xampp 上 mySQL 的本地主机端口存在端口问题,但我不知道。 Apache 和 mySQL 不应该是来自同一个端口的 运行 吗?但无论如何...

在 xampp 上,我的 apache 端口是 8080,所以 "localhost:8080"。我的 mySQL 端口是 3306,所以我在 php 中使用 "localhost:3306" 作为我的“$host”变量。现在,"login.php" 是我在我的 html 中使用的 "form action" 这也是文件的名称,所以我的 php 和我的 html 都在同一页 - 没有单独的文件;只是为了清除它。

问题:当我单击 "submit" 的等效项时,我的 "echoed" 或 "error" 代码的 none 通过。基本上,页面保持不变。什么都没发生。如果我故意搞砸了密码,none 我的错误就会出现。我停留在同一页面上,无法查看是否有任何效果。没有什么可以告诉我我所做的是否有效。

我的 phpMyAdmin 数据库名称是 "accounts" 并且 table 被命名为 "users".

我的 php 位于 here

我的 html 位于 here

再次:

PHP

<?php
    session_start();
    $host = "localhost:3306";
    $user = "root";
    $pass = "password";
    $db = "accounts";

    mysql_connect($host, $user, $pass);
    mysql_select_db($db);

    if (isset($_POST['user'])) {
        $username = $_POST['user'];
        $password = $_POST['pass'];
        $sql = "SELECT * FROM users WHERE User='".$user."' AND Pass='".$pass."' LIMIT 1";
        $res = mysql_query($sql);
        if (mysql_num_rows($res) == 1) {
            echo "You have successfully logged in.";
            exit();
        } else {
            echo "Invalid login information. Please return to the previous page.";
            exit();
        }
    }
?>

HTML

<form action="login.php" method="post">
<p>User</p><input type="text" name="user" size="30" />
<p>Pass</p><input type="password" name="pass" size="30" />
</br><p><submit><input type="submit" name="submit" value="Log In" /></submit></p>
</form>

请帮忙。我必须为一个半星期后的活动做好准备 运行,但我还有很多工作要做,因为这花了我太长时间。

谢谢,

您在

中使用了错误的变量
$sql = "SELECT * FROM users WHERE User='".$user."' AND Pass='".$pass."' LIMIT 1";

看看这些,这些是您应该使用的变量。

$username = $_POST['user'];
$password = $_POST['pass'];` 

错误报告会引发未定义变量通知。

error reporting 添加到文件顶部,这将有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:错误报告只能在试运行中进行,绝不能在生产中进行。

加上这个:

<submit><input type="submit" name="submit" value="Log In" /></submit>

<submit></submit> 是无效标签;删除它们。


我还想指出,您目前的代码对 SQL injection. Use prepared statements, or PDO with prepared statements 开放,它们更安全


编辑:

根据您对弃用的评论,是时候转向 mysqli_ 或 PDO 了。


这是一个 mysqli_ 基本版本和变量修复:

<?php
session_start();
$host = "localhost:3306";
$user = "root";
$pass = "password";
$db = "accounts";

$connect = mysqli_connect($host, $user, $pass, $db);

if (isset($_POST['user'])) {
    $username = $_POST['user'];
    $password = $_POST['pass'];
    $sql = "SELECT * FROM users WHERE User='".$username."' AND Pass='".$password."' LIMIT 1";
    $res = mysqli_query($connect, $sql) or die (mysqli_error($connect));
    if (mysqli_num_rows($res) == 1) {
    echo "You have successfully logged in.";
    exit();
} else {
    echo "Invalid login information. Please return to the previous page.";
    exit();
}
}
?>

我注意到您可能以纯文本形式存储密码。如果是这种情况,非常不鼓励。

我推荐你使用CRYPT_BLOWFISH or PHP 5.5's password_hash()函数。

对于 PHP < 5.5 使用 password_hash() compatibility pack