使用PHP和mySQL的HTML登录问题
我正在使用HTML5创建一个基于web的应用程序,它连接到一个mySQL数据库。我正在尝试使用PHP将两者连接起来 我试图创建一个登录页面,检查数据库中的数字和密码,看看它是否是一个有效的登录。 硬编码号码和密码工作正常,但当尝试将其应用于数据库时,我总是收到一条“登录”消息,即使登录凭据无效。我尝试使用$u POST和$dbRow,但都没有用使用PHP和mySQL的HTML登录问题,php,mysql,sql,Php,Mysql,Sql,我正在使用HTML5创建一个基于web的应用程序,它连接到一个mySQL数据库。我正在尝试使用PHP将两者连接起来 我试图创建一个登录页面,检查数据库中的数字和密码,看看它是否是一个有效的登录。 硬编码号码和密码工作正常,但当尝试将其应用于数据库时,我总是收到一条“登录”消息,即使登录凭据无效。我尝试使用$u POST和$dbRow,但都没有用 <?php session_start(); $s_number = $_POST["snumber"]; $s_pass = $_POST[
<?php
session_start();
$s_number = $_POST["snumber"];
$s_pass = $_POST["passwd"];
//$s_number = "12345";
//$s_pass = "qwerty";
//$s_permission = "manager";
include ("dbConnect.php");
$dbQuery = "SELECT * FROM staff_details WHERE staff_number='$s_number' AND password='$s_pass'";
$dbResult = mysql_query($dbQuery);
$dbRow=mysql_fetch_array($dbResult);
if ($_POST["snumber"]==$s_number) {
if ($_POST["passwd"]==$s_pass) {
echo "<p>Logged in!</p>";
} else {
echo "<p>Wrong Password</p>";
}
}
else echo "<p>Bad username and password</p>";
/*if ($dbRow["username"]==$s_number) {
if ($dbRow["password"]==$s_pass) {
echo "<p>Logged in!</p>";
}
else {
echo "<p>Wrong Password</p>";
}
} else {
echo "<p>Bad username and password</p>";
}*/
?>
您需要使用$dbRow而不是$u POST。
目前,您只是将$\u POST与$\u POST进行比较
一切都是一样的
其次,在查询和数组键中指定了不同的字段名
试试这个
<?php
session_start();
$s_number = $_POST["snumber"];
$s_pass = $_POST["passwd"];
//$s_number = "12345";
//$s_pass = "qwerty";
//$s_permission = "manager";
include ("dbConnect.php");
$dbQuery = "SELECT * FROM staff_details WHERE staff_number='$s_number' AND password='$s_pass'";
$dbResult = mysql_query($dbQuery);
$dbRow=mysql_fetch_array($dbResult);
if ($_POST["snumber"]==$dbRow['staff_number']) {
if ($_POST["passwd"]==$dbRow['password']) {
echo "<p>Logged in!</p>";
} else {
echo "<p>Wrong Password</p>";
}
}
else echo "<p>Bad username and password</p>";
/*if ($dbRow["username"]==$s_number) {
if ($dbRow["password"]==$s_pass) {
echo "<p>Logged in!</p>";
}
else {
echo "<p>Wrong Password</p>";
}
} else {
echo "<p>Bad username and password</p>";
}*/
?>
试试这个:
<?php
include ("dbConnect.php");
if(isset($_POST["snumber"]))
{
$s_number = mysql_real_escape_string($_POST["snumber"]);
$s_pass = mysql_real_escape_string($_POST["passwd"]);
$dbQuery = "SELECT * FROM staff_details WHERE staff_number='$s_number' AND password='$s_pass'";
$dbResult = mysql_query($dbQuery);
$dbRow=mysql_fetch_assoc($dbResult);
if ($dbRow["staff_number"]==$s_number && $dbRow["password"]==$s_pass) {
echo "<p>Logged in!</p>";
}
else {
echo "<p>Wrong Password</p>";
}
}
else {
echo "<p>Bad username and password</p>";
}
?>
阿德里安和罗伯特已经解决了部分问题
如果您只是在学习PHP,那么就更应该开始编写代码来使用MySQLIAPI,而不是不推荐使用的mysql函数。它们几乎是一样的——但后者将在未来某个时候消失
如果您正在编写登录页面,那么您可能会担心安全性——但是如果没有正确地转义代码,绕过控制机制是很简单的(在某些情况下,会使您的数据库面临严重的破坏/泄露问题)
此外,即使通过修复SQL注入问题,也很容易通过会话固定的身份验证
下一个错误是,您从未检查与数据库的交互是否成功
因此,这看起来像是一个复制品——尽管我没有将其标记为复制品,因为该帖子的回答/讨论质量很差
此外,由于您只从数据库中选择了与用户名/密码匹配的行,为什么还要将用户名和密码与检索到的数据进行比较
通常认为这是一种良好的安全实践,不解释为什么在某些人提供身份验证详细信息时登录失败
所以再试一次
<?php
session_start();
include ("dbConnect.php");
function auth($user, $pass)
{
$user=mysqli_real_escape_string($user);
$pass=mysqli_real_escape_string($pass);
$qry="SELECT SUM(1) AS matches
FROM YOURDB.staff_details
WHERE staff_number='$user'
AND password='$pass'";
$res=mysqli_query($qry) || die "Sorry - not available";
$r=mysql_fetch_assoc($res);
return $r['matches'];
}
if (auth($_POST["snumber"], $_POST["passwd"])) {
session_regenerate_id();
echo "<p>Logged in!</p>";
} else {
echo "<p>Sorry - invalid authentication</p>";
}
您的代码是安全的,请使用PDO,而不是您的脚本似乎容易受到SQL注入的攻击。感谢您的回复。对不起,我的无知,但我如何使用PDO?我是在帮助他的if语句,而不是mysql注入问题。你已经解决了她的问题,对吧,但是-1票赞成错误答案(不是正确答案)@AdrianCrepaz感谢你的仓促回应。我相信这已经解决了我的问题。再次感谢你!但是-1用于比较转义字符串和未转义字符串以找到匹配项。。。您可以尝试计数或mysql_num_rows来查看匹配结果是否为零……答案中有……mysqli和PDO的使用……不过还是要感谢负1;)谢谢你花时间解释。我是PHP新手,显然我们的笔记很快就会过时。我会把这件事告诉我的讲师!在我的dbConnect.php中,我检查是否成功连接到MySQL和数据库,我假设您指的是检查进一步的连接?我想将用户凭据与数据库中已有的凭据进行比较。当我应用您的更改时,我收到一个错误“Parse error:syntax error,意外的”“Sorry-not available”“(T_CONSTANT_ENCAPSED_STRING)”,来自这一行>$res=mysqli_query($qry)| | die“Sorry-not available”;还有mysqli API。。这是必须安装的还是内置的?请原谅我的无知。当你请求帮助做家庭作业时,通常认为说出来是很有礼貌的。我省略了在“die”的参数周围添加括号(这不是我通常用于处理错误的构造,但它很紧凑)。核心PHP中几乎没有什么功能,mysql|和mysqli|函数都是基础语言的扩展,与PHP捆绑在一起。这段代码:$res=mysqli|u query($qry)| die“对不起-不可用”$r=mysql_fetch_assoc($res)。。。。很有趣…你是在使用mysqli还是mysql扩展…别担心,你不会得到负1,我不像你。
<?php
session_start();
include ("dbConnect.php");
function auth($user, $pass)
{
$user=mysqli_real_escape_string($user);
$pass=mysqli_real_escape_string($pass);
$qry="SELECT SUM(1) AS matches
FROM YOURDB.staff_details
WHERE staff_number='$user'
AND password='$pass'";
$res=mysqli_query($qry) || die "Sorry - not available";
$r=mysql_fetch_assoc($res);
return $r['matches'];
}
if (auth($_POST["snumber"], $_POST["passwd"])) {
session_regenerate_id();
echo "<p>Logged in!</p>";
} else {
echo "<p>Sorry - invalid authentication</p>";
}