我正在为我的员工创建一个登录表单。我认为 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/