Не понимаю как работает php, пишет пароли не совпадают

<?
session_start();
$path=$_SERVER['DOCUMENT_ROOT'];
include "$path/system/db.php";
// подключения файла к базе данных


if(isset($_POST['send'])){
  $query =  $db->query("SELECT login FROM users WHERE login='$_POST[login]'");
 $rowCount=$query->num_rows;
 if($rowCount>0){
    echo "<br>Данный пользователь есть в базе данных";
 }
 else{
    $errors=[];
    if($_POST['login']==""){
        $errors[]="Введите логин!";
    }
    if($_POST['password']=""){
        $errors[]="Введите пароль";
    }
    if($_POST['password']!=$_POST['password2']){
        $errors[]="Пароли не совпадают";
    }
    if($errors[0]==NULL){
        $db->query("INSERT INTO users VALUES(NULL,'$_POST[login]','$_POST[password]',NULL)");  
  $_SESSION['signup']=true;
  header("Location: ../public/login.php");  
    }
else{
        echo $errors[0];
    }
   
 }
 


}
?>

1
вопрос почему когда вожу пароль одинаковый пишет пароли не совпадают?

Может не совпадают? В любой непонятной ситуации надо выводить всё или использовать отладчик (xdebug).

var_dump($_POST['password']);
var_dump($_POST['password2']);

Еще в идеале так делать не надо потому что будет уязвимость SQL инъекция. Надо экранировать или использовать prepared statement и т.п.


Странный способ, правильнее и понятнее например

if (empty($errors)) {

У меня почему то в первом пароле не чего не выводит почему так?

Так а в коде формы что?

 <form action="" method="post">
            <input type="text" name="login" id="login" required placeholder="login"><br>
            <input type="password" name="password" id="password" placeholder="password"><br>
            <input type="password" name="password2" id="password2" placeholder="password2"><br>
            <input type="submit" name="send" value="Sign Up">
            </form>

Я конечно не когда не понимала работу бэкенда так что извините если что мне тут многое не понятно.нету картинки понимания этого кода php?так же мне не ясно,если var_dump($_POST[‘password’]);не выводит пароль,тогда почему если вести один пароль в dump($_POST[‘password’]);данные прилетают в базу данных,вообщем понять такое не возможно
Если я убираю // if($_POST[‘password’]!=$_POST[‘password2’]){
// $errors[]=“Пароли не совпадают
”;
// } тогда регистрация успешна,но в базу данных попадает только логин а где пароль?

Может какая-нибудь опечатка в имени поля?
В

var_dump($_POST);

нет пароля?

array(4) { [“login”]=> string(4) “qena” [“password”]=> string(0) “” [“password2”]=> string(5) “12345” [“send”]=> string(7) “Sign Up” }
нету куда он девается то

А в теле запроса в DevTools → Network он есть?
Если да, то видимо его почему-то убирает код РНР (include "$path/system/db.php", …) или веб-сервер.
Если нет, то JS.

if($_POST[‘password’]=“”){
$errors[]=“Введите пароль”;
}
вот тут ошибка была ровно надо было поставить ==))

1 лайк

В этом коде как и во многих я не понимаю и не представляю как это работает if($rowCount>0) я так понимаю в $rowCount хранятся все логины из базы данных,
если есть совпадения в $_POST[login] то выполняется echo, но что означает больше нуля?

rowCount это количествоСтрок. В него ж присвоено $query->num_rows.
И тут речь о строках, которые вернулись в результате запроса выше (по идее их может быть 0 или 1), который ищет юзеров с этим именем.

Это я понимаю что переменная сравнивает но мне не понятно причем тут больше или ноль

Так а что должно быть?)
Это количество найденных строк. Если 0, то не найдено ничего, если не 0, то найдено.

А все я поняла это одно и тоже что если было равно true)