Эй, теперь у меня есть это, но когда я регистрируюсь, появляется только страница index.php. Без сообщения об успехе. Когда реестр завершен, я перенаправлен на index.php? Msg = 1, так что, на мой взгляд, правильно?
<?php
if (isset($_GET['msg'] == 1)) {
echo "You have successfully registered.";
}
require_once('connect.php');
$errors = array();
if (isset($_POST['submit'])) {
if(empty($_POST['username'])){ array_push($errors, 'You did not submit a username'); }
$old_usn = mysqli_query($connect, "SELECT id FROM users WHERE name = '".htmlentities($_POST['username'], ENT_QUOTES)."' LIMIT 1;") or die(mysqli_error());
if (mysqli_num_rows($old_usn) > 0) { array_push($errors, 'This username is already registered.'); }if (sizeof($errors) == 0) {
$username = htmlentities($_POST['username'], ENT_QUOTES);
$email = htmlentities($_POST['email'], ENT_QUOTES);
mysqli_query($connect, "INSERT INTO users (name, hashed_pw, email, joined)
VALUES ('{$username}', '{$password1}', '{$email}', NOW());") or die ($connection_error);
header('Location: index.php?msg=1');
}
}
?>
if (isset($_GET['msg'] == 1))
это не правильный способ сделать это, так как он всегда будет считаться установленным.
Вы должны разделить их на два условия.
Такие как:
if (isset($_GET['msg']) && $_GET['msg'] == 1)
Я настоятельно рекомендую вам использовать готовое заявление, хотя и password_hash()
,
То, что у вас есть сейчас, совсем не безопасно.
Если вы планируете идти по этому пути (что я надеюсь, вы делаете), то пожалуйста, внимательно прочитайте эти руководства за password_hash()
а также password_verify()
:
Примечание. Похоже, у вас установлена отсутствующая переменная для $password1
, поэтому убедитесь, что он имеет значение, иначе ваш запрос не будет выполнен.
Также, mysqli_error()
для этого требуется аргумент подключения к базе данных.
mysqli_error($connect)
Эта линия or die ($connection_error)
выдаст вам неопределенную переменную ошибку, по крайней мере, за то, что вы опубликовали в вопросе.
Вопрос здесь:
if (isset($_GET['msg'] == 1)) { // These are two different conditions, you have to separate them by using &
измените это на:
if ( isset($_GET['msg']) && $_GET['msg'] == 1 ) {
и попробуй еще раз.
Ваш код вообще не является безопасным, используйте подготовленное заявление и сохраните hash
пароль вместо простого.
isset возвращает true / false. И вы сравниваете логическое с 1.