Код (Text): function isUserValid() { $con = mysqli_connect('localhost', 'root', '', 'test'); $username = mysqli_real_escape_string($con, $this->username); $password = mysqli_real_escape_string($con, $this->password) $query = mysqli_query($con, "SELECT * FROM `penguins` WHERE `username` = '".$username."' AND `password` = '".md5($password)."'"); if($query) { while($row = mysqli_fetch_assoc($query)) { return true; die(); } } else { return 2; die(); } } Parse error: syntax error, unexpected '$query' (T_VARIABLE) in login.php on line 7
Держи точку с запятой- ; Поставь её в 6 строке. Учись читать ошибки. Они на человеческом языке написаны.
@Ganzal А как можно войти, если пароль закодирован такой функцией? Код (Text): private function encryptPassword($password, $md5 = true) { if($md5 !== false) { $password = md5($password); } $hash = substr($password, 16, 16) . substr($password, 0, 16); return $hash; } private function getLoginHash($password, $staticKey, $username) { $hash = $this->encryptPassword($password, false); $hash .= $staticKey; $hash .= "a1ebe00441f5aecb185d0ec178ca2305Y(02.>'H}t\":E1_root"; $hash = $this->encryptPassword($hash); $hash = password_hash($hash, PASSWORD_DEFAULT, [ 'cost' => 12 ]); return $hash; } Сделал так, но пишет что неверный пароль Код (Text): <?php class login { public $username; public $password; public function __construct($u, $p) { $this->username = $u; $this->password = $p; } //Information: 2 means error. true means logging in... private function encryptPassword($password, $md5 = true) { if($md5 !== false) { $password = md5($password); } $hash = substr($password, 16, 16) . substr($password, 0, 16); return $hash; } private function getLoginHash($password, $staticKey, $username) { $hash = $this->encryptPassword($password, false); $hash .= $staticKey; $hash .= "a1ebe00441f5aecb185d0ec178ca2305Y(02.>'H}t\":E1_root"; $hash = $this->encryptPassword($hash); $hash = password_hash($hash, PASSWORD_DEFAULT, [ 'cost' => 12 ]); return $hash; } function isUserValid() { $con = mysqli_connect('localhost', 'root', '', 'test'); $username = mysqli_real_escape_string($con, $this->username); $password = mysqli_real_escape_string($con, $this->password); $hashedPassword = strtoupper(md5($password)); $staticKey = 'e4a2dbcca10a7246817a83cd'; $fancyPassword = $this->getLoginHash($hashedPassword, $staticKey, $username); echo $fancyPassword; $query = mysqli_query($con, "SELECT * FROM `penguins` WHERE `username` = '".$username."' AND `password` = '".$fancyPassword."'"); if($query) { while($row = mysqli_fetch_assoc($query)) { return true; die(); } } else { return 2; die(); } } } ?>
@Sasha55555 0. Вижу нет обращения к Яндекс.Погоде и не готовит кофе - скорее всего поэтому и не работает. А если серьёзно - сотри к фигам этот говнокод и сделай нормально. 1. Не надо уродовать хэш пароля сменой порядка восьмибайтных блоков. От слова вообще. 2. Не надо никаких статических ключей, солей и сахаров. 3. У тебя есть строка оригинального пароля. Ты её хэшируешь перед добавлением в базу и сверяешь хэш из базы с временным слепком, который тебе пхп приготовит - password_hash и password_verify. Без регистрации и СМС. 4. Не надо искать пользователя по логину и паролю. Уникально идентифицируется кортеж в таблице - по уникальному имени, которое знает пользователь. Пароль не должен участвовать в запросе. Пароль участвует только в сравнении уже на стороне пхп. 5. Выбирать можно не все поля (*) а только те, что нужны. Например очевидно нужен хэш пароля - для дальнейшего сравнения. Ну может быть ещё статус активности. Всё. Астериск не нужен.