使用PHP和mySQL的HTML登录问题

使用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[

我正在使用HTML5创建一个基于web的应用程序,它连接到一个mySQL数据库。我正在尝试使用PHP将两者连接起来

我试图创建一个登录页面,检查数据库中的数字和密码,看看它是否是一个有效的登录。 硬编码号码和密码工作正常,但当尝试将其应用于数据库时,我总是收到一条“登录”消息,即使登录凭据无效。我尝试使用$u POST和$dbRow,但都没有用

<?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>";
}