PHP、mySQL 和 xampp 登录表单问题

标签 php mysql apache xampp

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

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

问题:当我点击相当于“提交”的按钮时,我的“回显”或“错误”代码都没有通过。基本上,页面保持不变。什么都没发生。如果我故意搞砸密码,我的错误都不会发生。我停留在同一页面上,无法查看是否有任何效果。没有什么可以告诉我我所做的是否有效。

我的 phpMyAdmin 数据库名称是“accounts”,表名为“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'];` 

错误报告会引发 undefined variable 通知。

添加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 开放的.使用 prepared statements , 或 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或 PHP 5.5 的 password_hash() 功能。

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

关于PHP、mySQL 和 xampp 登录表单问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28017593/

相关文章:

php - Codeigniter 重定向 URL 问题

php - 以安全的方式传递用于过滤结果集从一个页面到另一个页面并返回的条件

php pdo csv 文件写入数据库

ruby-on-rails - 在 Centos 上安装 Redmine

apache - CodeIgniter htaccess 子文件夹问题

apache - AH02026 : Failed to acquire SSL session cache lock

php - Sublime PHP 方法签名和自动完成说明

php - Mysql将4个不同表的信息显示为一个表

mysql2 gem 无法在 OS X 上使用 Homebrew 编译 MySQL 5.6.12

mysql - 根据同一个表中的值从表中获取值