Php принимает только в первой строке базы данных в качестве правильных учетных данных - PullRequest
0 голосов
/ 01 мая 2018

Это код моего логина на форуме. Проблема в том, что он принимает в качестве правильных учетных данных только первое имя пользователя и пароль (в основном только в первой строке) любые идеи о том, как я могу его изменить?!

    <?php
      session_start();
      include_once("connect.php");
        $token = "";
        if($con->connect_error){
          die("Connection failed: ".$con->connect_error);
        }
        $sql = "SELECT * FROM authme";
        $result = mysqli_query($con, $sql) or die(mysqli_error($con));
    while(mysqli_num_rows($result)>0){
      while($row = $result->fetch_assoc()){

          if(isset($_POST['realname']))


          $username = $_POST['realname'];


        if($result->num_rows>1){






            if(mysqli_num_rows($result)>1){


            $_SESSION['uid'] = $row['id'];
            $_SESSION['realname'] = $row['realname'];


            }
            $password = '$SHA$'.substr($row['password'],5,16).'$'.hash('sha256', hash('sha256',$_POST['password']).substr($row['password'],5,16));



            if($password == $row['password'] ){

            header("Location: index.php");
            exit();
           }
          else {
            echo "INVALID INFORMATION, PLEASE RETURN!";
        //    header("location: index.php");
            session_destroy();
            exit();
          }
          }

          }
    }
         ?>

?

Я решил попытаться создать журнал на форуме, который использует базу данных, которая шифрует пароли, которые он получает через форму регистрации. Этот код принимает только правильное первое имя пользователя и пароль, которые я ввожу, и его недостаточно, как вы можете себе представить.

1 Ответ

0 голосов
/ 02 мая 2018

Добро пожаловать в программирование на PHP. Я постараюсь поделиться несколькими принципами, которые могут помочь вам решить вашу проблему.

1.) Одной из лучших функций в PHP является функция print_r (). Используя эту функцию, вы можете выводить практически все, что нужно для текста в браузере. Поэтому в этом случае вы можете захотеть вставить print_r ($ result) сразу после этой строки «$ result = mysqli_query ($ con, $ sql) или die (mysqli_error ($ con));». Это выведет результаты запроса, который получает PHP. Это может быть использовано для устранения неполадок и определения причин, по которым ваш код не работает. После устранения неполадок удалите эту строку.

2.) Кажется, у вас есть несколько проверок количества строк внутри цикла while. Я не уверен, почему у вас есть thoose, но вы можете проверить, вызывают ли они ваши проблемы, используя echo или print для отображения значений в браузере для устранения неполадок. После устранения неполадок удалите эту строку.

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

4.) Ваши стандарты кодирования могли бы быть лучше, если вы четко добавили свои утверждения в закладки, их было бы легче читать. Вы можете прочитать PSR-2 . Например, в этом коде отсутствует {}.

if(isset($_POST['realname']))
$username = $_POST['realname'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...