[英]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.