За последние 24 часа нас посетили 73848 программистов и 1650 роботов. Сейчас ищут 1086 программистов ...

Ошибка T_VARIABLE

Тема в разделе "PHP для новичков", создана пользователем Sasha55555, 25 июл 2018.

  1. Sasha55555

    Sasha55555 Новичок

    С нами с:
    18 мар 2018
    Сообщения:
    152
    Симпатии:
    0
    Код (Text):
    1.  
    2. function isUserValid()
    3.     {
    4.         $con = mysqli_connect('localhost', 'root', '', 'test');
    5.         $username = mysqli_real_escape_string($con, $this->username);
    6.         $password = mysqli_real_escape_string($con, $this->password)
    7.         $query = mysqli_query($con, "SELECT * FROM `penguins` WHERE `username` = '".$username."' AND `password` = '".md5($password)."'");
    8.         if($query)
    9.         {
    10.             while($row = mysqli_fetch_assoc($query)) {
    11.                 return true;
    12.                 die();
    13.             }
    14.         }
    15.         else {
    16.             return 2;
    17.             die();
    18.         }
    19.     }
    Parse error: syntax error, unexpected '$query' (T_VARIABLE) in login.php on line 7
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Держи точку с запятой- ;
    Поставь её в 6 строке.
    Учись читать ошибки. Они на человеческом языке написаны.
     
    Sasha55555 нравится это.
  3. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    на 6 ; есть?
    --- Добавлено ---
    @Ganzal эх не успел)
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    На 6 или на 14. В зависимости от того какой листинг у тебя в работе.
     
  5. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    А я думал это я уже такой сонный. То 15 было потом смотрю 7
     
  6. Sasha55555

    Sasha55555 Новичок

    С нами с:
    18 мар 2018
    Сообщения:
    152
    Симпатии:
    0
    @Ganzal А как можно войти, если пароль закодирован такой функцией?
    Код (Text):
    1. private function encryptPassword($password, $md5 = true) {
    2.         if($md5 !== false) {
    3.             $password = md5($password);
    4.         }
    5.      
    6.         $hash = substr($password, 16, 16) . substr($password, 0, 16);
    7.         return $hash;
    8.     }
    9.  
    10.     private function getLoginHash($password, $staticKey, $username) {      
    11.         $hash = $this->encryptPassword($password, false);
    12.         $hash .= $staticKey;
    13.         $hash .= "a1ebe00441f5aecb185d0ec178ca2305Y(02.>'H}t\":E1_root";
    14.         $hash = $this->encryptPassword($hash);
    15.         $hash = password_hash($hash, PASSWORD_DEFAULT, [ 'cost' => 12 ]);
    16.      
    17.         return $hash;
    18.     }
    Сделал так, но пишет что неверный пароль
    Код (Text):
    1. <?php
    2. class login {
    3.     public $username;
    4.     public $password;
    5.     public function __construct($u, $p) {
    6.         $this->username = $u;
    7.         $this->password = $p;
    8.     }
    9.     //Information: 2 means error. true means logging in...
    10.     private function encryptPassword($password, $md5 = true) {
    11.         if($md5 !== false) {
    12.             $password = md5($password);
    13.         }
    14.      
    15.         $hash = substr($password, 16, 16) . substr($password, 0, 16);
    16.         return $hash;
    17.     }
    18.  
    19.     private function getLoginHash($password, $staticKey, $username) {      
    20.         $hash = $this->encryptPassword($password, false);
    21.         $hash .= $staticKey;
    22.         $hash .= "a1ebe00441f5aecb185d0ec178ca2305Y(02.>'H}t\":E1_root";
    23.         $hash = $this->encryptPassword($hash);
    24.         $hash = password_hash($hash, PASSWORD_DEFAULT, [ 'cost' => 12 ]);
    25.      
    26.         return $hash;
    27.     }
    28.  
    29.     function isUserValid()
    30.     {
    31.         $con = mysqli_connect('localhost', 'root', '', 'test');
    32.         $username = mysqli_real_escape_string($con, $this->username);
    33.         $password = mysqli_real_escape_string($con, $this->password);
    34.         $hashedPassword = strtoupper(md5($password));
    35.         $staticKey = 'e4a2dbcca10a7246817a83cd';
    36.         $fancyPassword = $this->getLoginHash($hashedPassword, $staticKey, $username);
    37.         echo $fancyPassword;
    38.         $query = mysqli_query($con, "SELECT * FROM `penguins` WHERE `username` = '".$username."' AND `password` = '".$fancyPassword."'");
    39.         if($query)
    40.         {
    41.             while($row = mysqli_fetch_assoc($query)) {
    42.                 return true;
    43.                 die();
    44.             }
    45.         }
    46.         else {
    47.             return 2;
    48.             die();
    49.         }
    50.     }
    51. }
    52. ?>
     
  7. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    @Sasha55555
    0. Вижу нет обращения к Яндекс.Погоде и не готовит кофе - скорее всего поэтому и не работает. А если серьёзно - сотри к фигам этот говнокод и сделай нормально.
    1. Не надо уродовать хэш пароля сменой порядка восьмибайтных блоков. От слова вообще.
    2. Не надо никаких статических ключей, солей и сахаров.
    3. У тебя есть строка оригинального пароля. Ты её хэшируешь перед добавлением в базу и сверяешь хэш из базы с временным слепком, который тебе пхп приготовит - password_hash и password_verify. Без регистрации и СМС.
    4. Не надо искать пользователя по логину и паролю. Уникально идентифицируется кортеж в таблице - по уникальному имени, которое знает пользователь. Пароль не должен участвовать в запросе. Пароль участвует только в сравнении уже на стороне пхп.
    5. Выбирать можно не все поля (*) а только те, что нужны. Например очевидно нужен хэш пароля - для дальнейшего сравнения. Ну может быть ещё статус активности. Всё. Астериск не нужен.
     
    askanim нравится это.