从数据库中的表验证用户

时间:2018-07-02 09:21:33

标签: php html sql forms

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

<?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> 

2 个答案:

答案 0 :(得分:0)

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

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

哦,不使用MySQL *函数,请使用MySQLI

希望有帮助

答案 1 :(得分:0)

您正在使用$ 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";
      }
   }
?>