Почему в БД вставляются не те данные?

Есть форма.
<form action="register/index.php" method="POST">
            <div class="form-group">
              <label for="signup-email">Имя</label>
              <input type="text" class="form-control" id="name" name="name" placeholder="Введите имя">
            </div>
            <div class="form-group">
              <label for="signup-email">Фамилия</label>
              <input type="text" class="form-control" id="surname" name="surname" placeholder="Введите фамилию">
            </div>
            <div class="form-group">
              <label for="signup-email">Логин</label>
              <input type="text" class="form-control" id="login" name="login" placeholder="Ваш новый логин">
            </div>
            <div class="form-group">
              <label for="signup-email">Email</label>
              <input type="text" class="form-control" id="email" name="email" placeholder="Введите Email">
            </div>
            <div class="form-group">
              <label for="signup-pass">Пароль</label>
              <input type="text" class="form-control" id="password" name="password" placeholder="Введите пароль">
            </div>
            <div class="form-group">
              <label for="signup-pass-repeat">Еще раз пароль</label>
              <input type="text" class="form-control" id="password2" name="password2" placeholder="Повторите пароль">
            </div>
            <div class="checkbox">
              <label>
                <input type="checkbox">Условия прочитаны и приняты</input>
              </label>
            </div>
          </div>
          <div class="modal-footer">
            <button type="submit" class="btn btn-primary">Готово</button>
          </div>
          </form>


Она передает все в register/index.php:
<?php

    include('../scripts/db.php');
    
    $name=trim($_REQUEST['name']);
    $surname=trim($_REQUEST['name']);
    $login=trim($_REQUEST['name']);
    $email=trim($_REQUEST['name']);
    $password=trim($_REQUEST['name']);
    $password2=trim($_REQUEST['name']);
    
    $res_login = mysql_query ("SELECT * FROM `users` WHERE `login`='$login';");
    $res_email = mysql_query ("SELECT * FROM `users` WHERE `email`='$email';");
    
    if (mysql_num_rows($res_login) == 0) {
        if (mysql_num_rows($res_email) == 0) {
            if ($password == $password2) {
                include('../scripts/insert_user.php');
            }
            else {
                die ("Пароли не совпадают");
            };
        }
        else {
          die ("Email занят");  
        };
    }
    else {
        die ("Логин занят");
    };
    
    header("Location: http://site.ru/");
    exit;
?>


который исполняет вот такую строку при отсутствии ошибок:
<?php

    $insert="INSERT INTO users (login, passwd, email, name, surname, role) 
                VALUES ('{$login}', '{$passwd}', '{$email}', '{$name}', '{$surname}', 1);";
    
    mysql_query($insert)
        or die(mysql_error());
?>


При попытке регистрации в столбцы имя, фамлия и логин вставляется имя из формы регистрации. Почему?

P.S.:Знаю, что поиск ошибок реализован неправильно. Пока что цель - создать механизм регистрации.
  • Вопрос задан
  • 2350 просмотров
Решения вопроса 1
@IceJOKER
Web/Android developer
Честно не совсем понял, что вы хотите, но тут явно что-то не так:
$name=trim($_REQUEST['name']);
    $surname=trim($_REQUEST['name']);
    $login=trim($_REQUEST['name']);
    $email=trim($_REQUEST['name']);
    $password=trim($_REQUEST['name']);
    $password2=trim($_REQUEST['name']);

нафиг во все переменные записывать только ИМЯ и почему только "trim", нужные еще "резальщики" тегов и эскейп стринг от mysql для защиты от всякой херни
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
index0h
@index0h
PHP, Golang. https://github.com/index0h
Скажите, что будет, ясли я отправлю POST запрос с таким логином:
'; DROP TABLE `users`; --
Даю подсказку, вы выполните запрос:
SELECT * FROM `users` WHERE `login`=''; DROP TABLE `users`; -- ';

И еще спасибо скажите, что не
SELECT * FROM `users` WHERE `login`=''; DROP DATABASE (SELECT DATABASE()) AS `db_name`; -- ';


1. Не используйте mysql_* функции, они уже помечены, как deprecated, вместо этого лучше PDO
2. Либо подставляйте значения по плейсхолдерам, либо хотя бы экранируйте строки вручную.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы