繁体   English   中英

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中使用的“表单操作”,它也是文档的名称,所以我的php和我的html都在同一页面上 - 没有单独的文档; 只是为了清楚起来。

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

我的phpMyAdmin数据库名称是“accounts”,表名为“users”。

我的PHP位于这里

我的HTML位于此处

再次:

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'];` 

错误报告会抛出未定义的变量通知。

错误报告添加到文件的顶部,这将有助于查找错误。

<?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注入开放的。 使用准备好的语句 ,或PDO与准备好的语句它们更安全


编辑:

根据您对弃用的评论,是时候转移到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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM