【问题标题】:Validating user from a table within a database从数据库中的表中验证用户
【发布时间】:2018-07-02 09:21:33
【问题描述】:

我有一个名为“用户”的表,其中包含“用户名”和“密码”,如果在表单中输入的用户名和密码匹配,用户将被重定向到另一个页面。但我不知道这是否是最好的方法。每当我在表单上输入正确的用户名和密码时,表单就会重置。

<?php
   class Database {
    function insert() {
        $dbhost = 'localhost:8888';
        $conn = mysql_connect($dbhost, 'lmaia', 'Luismaia22');
        if (! $conn) {
            die('Could not connect: ' . mysql_error());
        }
        else {
            echo "connected";
        }
        }   
        }


    ?>
    <?php
    session_start();
    if($_SERVER["REQUEST_METHOD"] == "POST") {
      // username and password sent from form 

      $myusername = mysqli_real_escape_string($db,$_POST['username']);
      $mypassword = mysqli_real_escape_string($db,$_POST['password']); 

      $sql = "SELECT id FROM Users WHERE username = '$myusername' and password = '$mypassword'";
      $result = mysqli_query($db,$sql);
      $row = mysqli_fetch_array($result,MYSQLI_ASSOC);
      $active = $row['active'];

      $count = mysqli_num_rows($result);

      // If result matched $myusername and $mypassword, table row must be 1 row

      if($count == 1) {
         session_register("myusername");
         $_SESSION['login_user'] = $myusername;

         header("location: Dashboard.html");
      }else {
         $error = "Your Login Name or Password is invalid";
      }
   }
?>
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
</head>
<body>
<div id="content">
<form id="login"  method="post" accept-charset="UTF-8">

    <img src="Resources/avatar.png" widht="200px" alt="Avatar" class="avatar">

  <div class="container">
    <label for="username"><b>Utilizador</b></label>
    <input type="text" placeholder="Introduzir Nome" name="username" required>

    <label for="password"><b>Password</b></label>
    <input type="password" placeholder="Introduzir Password" name="password" required>

    <button type="submit">Login</button>
  </div>
</form>
</div>
</body>
</html> 

【问题讨论】:

  • 关于你的代码有很多话要说,但我认为对你来说第一件事就是让它工作。我总是在这些情况下插入回声,以查看代码的作用。例如,在$count = mysqli_num_rows($result); 行之后,您可以放置​​echo "Count=[$count]&lt;br&gt;";。如果它为零,您可以检查几件事,例如查询本身:echo "SQL=[$sql]&lt;br&gt;";。等等……这就是所谓的“调试”。
  • 我注意到您只从用户表中选择了id,但您希望在$row 中获得更多信息,例如active。但是这不会影响您的代码,因为您不使用$active... 编码草率?
  • 我尝试使用 echo 并检查了 sql 无法获取我在表单中输入的参数。我知道它有点笨拙,但第一次使用侧服务器语言,通常我是前端开发人员
  • 嗯,好的。我认为可能是mysqli_real_escape_string($db 中的$db 未定义?
  • 是的,它未定义,但我将变量替换为 $conn,但仍然没有

标签: php html sql forms


【解决方案1】:

您正在使用 $db 变量,但它不包含任何内容,所以我相信您的 mysqli 函数只返回“false”。你也没有创建你的类的任何实例,所以它目前并没有真正为你做任何事情。

另外,您没有在 mysqli_connect() 中指定默认数据库,我不确定这样做的结果,我相信然后您可能需要在构建您的数据库时指定一个数据库查询,如果不是,它可能会失败。

由于您没有从 $row 读取任何特定值,因此您不需要:

$row = mysqli_fetch_array($result,MYSQLI_ASSOC);

但如果您希望实际读取“活动”列,那么您还需要在查询中指定它:

SELECT id,active FROM Users WHERE username = '$myusername' and password = '$mypassword'";

尝试更多类似的方法,看看它在哪里(请注意,我在 mysqli_connect 中添加了第四个参数,它可能需要也可能不需要,它是一个可选参数,但正如我上面所说 - 我是不确定如何/是否可以在连接函数和查询中省略默认数据库)

<?php
    session_start();
    $db = mysqli_connect('localhost:8888', 'lmaia', 'Luismaia22', 'database');
    if(isset($_POST["submit"])) {
      // username and password sent from form 
      $myusername = mysqli_real_escape_string($db,$_POST['username']);
      $mypassword = mysqli_real_escape_string($db,$_POST['password']); 

      $sql = "SELECT id FROM Users WHERE username = '$myusername' and password = '$mypassword'";
      $result = mysqli_query($db,$sql);
      $count = mysqli_num_rows($result);
      // If result matched $myusername and $mypassword, table row must be 1 row
      if($count == 1) {
         $_SESSION['login_user'] = $myusername;
         header("location: Dashboard.html");
      }else {
         $error = "Your Login Name or Password is invalid";
      }
   }
?>

【讨论】:

  • 谢谢我已经解决了连接和验证问题,唯一的问题是重定向到页面
  • 如果您确定不是大写/小写问题并且扩展名正确,您可以尝试重定向到另一个页面吗?最好是带有“Hello world”字符串的空白,或者可以确定问题是在登录页面上还是“仪表板”页面有问题?
  • 仍然没有进入页面。但输入“如果”。
  • 仪表板页面与登录页面在同一个文件夹中?
  • 哈哈,只是想消除所有可能的错误;)您是重定向到空白页还是 404?
【解决方案2】:

首先:在您的数据库类中,您需要在代码的 else 部分中返回 $conn

第二:你需要包含文件并创建一个类的变量 ($db = new database ()) 然后你可以使用函数 insert() 作为你的 mysqli_query($db->insert( ), $查询);

哦,顺便说一句,不要使用 MySQL* 函数使用 MySQLI

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2017-04-27
    • 2021-06-05
    • 2022-06-19
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 2018-08-29
    • 2018-12-26
    • 1970-01-01
    相关资源
    最近更新 更多