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