Только эхо работает в этом коде в этом операторе if (PHP) - PullRequest
0 голосов
/ 08 сентября 2018
$con = mysqli_connect('localhost', 'login', '*mypass*', 'login');

$check = "SELECT * FROM users";

$rs = mysqli_query($con, $check);

if(isset($_POST['submit'])) {

            $username = strtolower($_POST['username']);

            $password = hash('sha512', $_POST['password']);

            if($username && $password){
                while($data = mysqli_fetch_array($rs)){
                    if($username == $data[1]){
                        if($password == $data[2]){
                            session_start();
                            $_SESSION['loggedin'] = true;
                            $_SESSION['username'] = $username;

                            $exp = time() + (60*60*24*365);
                            setcookie('user', $username, $exp);
                            echo "test";
                            header("location: dash.php");
                            exit();
                        } else {
                            error("Incorrect Password");
                        }
                    }
                }
            } else {
                error("Please insert your username and password");
            }
        }

В этом коде содержимое оператора if (if ($ password == $ data [2])) работает неправильно: работает только функция echo, а все остальные - нет!

Есть ли решение этой проблемы?

Я использую PHP 7.0

POST:

  • echo "test"; был добавлен только для целей тестирования, код не работает с ним или без него.

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Это не ответ, но кое-что, чтобы попытаться проверить, работают ли сеансы.

Поместите следующий код в отдельный файл:

<?php
session_start();
if(isset($_SESSION['test_counter'])) {
    $_SESSION['test_counter']++;
} else {
    $_SESSION['test_counter'] = 1;
}    

echo $_SESSION['test_counter'];

Сначала должно отобразиться 1, а затем при обновлении увеличивается целое число.

0 голосов
/ 09 сентября 2018

Глядя на эту часть:

 if($username && $password){
                while($data = mysqli_fetch_array($rs)){
                    if($username == $data[1]){
                        if($password == $data[2]){

Вы должны быть осторожны при чтении $data. Проще говоря, массив $data индексируется отдельно для каждой строки, начиная с 0, поэтому $data[1] и $data[2] относятся ко всем вторым и третьим строкам набора результатов, но вы на самом деле не читаете никаких полей результатов.

Правильный и чистый путь будет:

if($username && $password){
  $data = mysqli_fetch_array($rs);
  foreach ($data as $row)
  {
    $username = $row['field_name_with_username];
    $password = $row['field_name_with_password];

    ... then whatever you need to do afterwards with those variables

  }

Если вы предпочитаете держаться подальше от цикла foreach, вы можете использовать while или for, но вам нужно определить счетчик взаимодействий (то есть $i = 0; перед входом в цикл и $i++; непосредственно перед концом каждой итерации) и на каждом проходе доступ $data[$i]['field_name_with_username'] и $data[$i]['field_name_with_password']

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