Проверка пользователя из таблицы в базе данных - PullRequest
0 голосов
/ 02 июля 2018

У меня есть таблица, которую я назвал «Пользователи», которая содержит «имя пользователя» и «пароль». Если имя пользователя и пароль, введенные в форму, совпадают, пользователь перенаправляется на другую страницу. Но я не знаю, является ли это лучшим способом сделать это. Всякий раз, когда я ввожу правильное имя пользователя и пароль в форму, форма сбрасывается.

<?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 голосов
/ 02 июля 2018

Вы используете переменную $ 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";
      }
   }
?>
0 голосов
/ 02 июля 2018

Первый: в вашем классе базы данных вам нужно вернуть $ conn в остальной части кода

Второе: вам нужно включить файл и создать переменную класса ($ db = new database ()), а затем вы можете использовать функцию insert () в качестве ссылки для вашего mysqli_query ($ db-> insert ( ), $ query);

Да и кстати не используйте MySQL * функции используйте MySQLI

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...