За последние 24 часа нас посетил 31141 программист и 1820 роботов. Сейчас ищет 1761 программист ...

Проверка логина на занятось

Тема в разделе "PHP для новичков", создана пользователем Abu-Bakir, 3 май 2018.

  1. Abu-Bakir

    Abu-Bakir Новичок

    С нами с:
    28 мар 2018
    Сообщения:
    39
    Симпатии:
    0
    Всем привет, пытаюсь проверить логин на занятость, вот код:
    PHP:
    1. if(isset($_POST['register'])){
    2.         $sel = "SELECT * FROM users WHERE login = '$login'";
    3.         $res = mysql_query($sel);
    4.         $num = mysql_num_rows($res);
    5.         if($num == 0) {
    6.         $login = $_POST['e_login'];
    7.         $name = $_POST['e_name'];
    8.         $email = $_POST['email'];
    9.         $password = $_POST['e_password'];
    10.         $r_password = $_POST['e_r_password'];
    11.         if($password == $r_password){
    12.         $password = md5($password);
    13.         $query = mysql_query("INSERT INTO users (id, name, login, email, password) VALUES ('','$name','$login', '$email','$password')")or die(mysql_error());
    14.         header("location:/index.php");
    15.         }
    16.         else{
    17.             die ('Такой логин уже используется');
    18.         }
    19.         }
    20.        
    21.     else {
    22.         die('Пароли не своподают');
    23.     }
    24.    
    25.         }
     
  2. S_t_e_e_p

    S_t_e_e_p Активный пользователь

    С нами с:
    12 июл 2012
    Сообщения:
    181
    Симпатии:
    4
    Не используй функцию mysql_* лучше PDO
     
  3. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Так а что у тебя? ошибка какаето или что? да лучше юзай PDO либо mysqli
     
  4. Abu-Bakir

    Abu-Bakir Новичок

    С нами с:
    28 мар 2018
    Сообщения:
    39
    Симпатии:
    0
    так?
    PHP:
    1. $res = $dbh->query("SELECT email FROM users WHERE login= {$login}");
    2. $l_records = $res->fetch(PDO::FETCH_ASSOC);
    3. if ($l_records)
    4.     echo "login занят!";
     
  5. S_t_e_e_p

    S_t_e_e_p Активный пользователь

    С нами с:
    12 июл 2012
    Сообщения:
    181
    Симпатии:
    4
    Пример как следует оформлять тему :)
     
  6. Abu-Bakir

    Abu-Bakir Новичок

    С нами с:
    28 мар 2018
    Сообщения:
    39
    Симпатии:
    0
    Я чайник в этом деле просто, можешь помочь?
     
  7. S_t_e_e_p

    S_t_e_e_p Активный пользователь

    С нами с:
    12 июл 2012
    Сообщения:
    181
    Симпатии:
    4
    Так ты напиши то в чем помочь именно?
     
  8. Abu-Bakir

    Abu-Bakir Новичок

    С нами с:
    28 мар 2018
    Сообщения:
    39
    Симпатии:
    0
    как мне этот PDO пихнуть к себе в код:
    PHP:
    1. if(isset($_POST['register'])){
    2.         $sel = "SELECT * FROM users WHERE login = '$login'";
    3.         $res = mysql_query($sel);
    4.         $num = mysql_num_rows($res);
    5.         if($num == 0) {
    6.         $login = $_POST['e_login'];
    7.         $name = $_POST['e_name'];
    8.         $email = $_POST['email'];
    9.         $password = $_POST['e_password'];
    10.         $r_password = $_POST['e_r_password'];
    11.         if($password == $r_password){
    12.         $password = md5($password);
    13.         $query = mysql_query("INSERT INTO users (id, name, login, email, password) VALUES ('','$name','$login', '$email','$password')")or die(mysql_error());
    14.         header("location:/index.php");
    15.         }
    16.         else{
    17.             die ('Такой логин уже используется');
    18.         }
    19.         }
    20.      
    21.     else {
    22.         die('Пароли не своподают');
    23.     }
    24.  
    25.         }
     
  9. S_t_e_e_p

    S_t_e_e_p Активный пользователь

    С нами с:
    12 июл 2012
    Сообщения:
    181
    Симпатии:
    4
    Подкюченние
    PHP:
    1. $host = '127.0.0.1';
    2.  $db = 'test';
    3.  $user = 'root';
    4.  $pass = '';
    5.  $charset = 'utf8';
    6.  
    7.  $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
    8.  $opt = [
    9.  PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    10.  PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    11.  PDO::ATTR_EMULATE_PREPARES => false,
    12.  ];
    13.  $pdo = new PDO($dsn, $user, $pass, $opt);
    И заменяешь у себя где запрос к БД ( $sel="SELECT * FROM users WHERE login = '$login'"; ) на
    PHP:
    1. $query = $pdo->prepare("SELECT * FROM users WHERE login = :login LIMIT 1");
    2. $query->bindParam(':login', $login, PDO::PARAM_STR, 12);
    3. $query->execute();
    4. $results = $query->fetch();
     
  10. Abu-Bakir

    Abu-Bakir Новичок

    С нами с:
    28 мар 2018
    Сообщения:
    39
    Симпатии:
    0
    Так должно выглядеть?
    PHP:
    1. if(isset($_POST['register'])){
    2.         $query = $pdo->prepare("SELECT * FROM users WHERE login = :login LIMIT 1");
    3.         $query->bindParam(':login', $login, PDO::PARAM_STR, 12);
    4.         $query->execute();
    5.         $results = $query->fetch();
    6.         $login = $_POST['e_login'];
    7.         $name = $_POST['e_name'];
    8.         $email = $_POST['email'];
    9.         $password = $_POST['e_password'];
    10.         $r_password = $_POST['e_r_password'];
    11.         if($password == $r_password){
    12.         $password = md5($password);
    13.         $query = mysql_query("INSERT INTO users (id, name, login, email, password) VALUES ('','$name','$login', '$email','$password')")or die(mysql_error());
    14.         header("location:/index.php");
    15.         }
    16.         else{
    17.             die ('Такой логин уже используется');
    18.         }
    19.         }
    20.        
    21.     else {
    22.         die('Пароли не своподают');
    23.     }
    24.    
    25.         }
     
  11. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
  12. S_t_e_e_p

    S_t_e_e_p Активный пользователь

    С нами с:
    12 июл 2012
    Сообщения:
    181
    Симпатии:
    4
    Проверку сделай после $results=$query->fetch();
    PHP:
    1. if(! $result) {
    2.     $login = $_POST['e_login'];
    3.     $name = $_POST['e_name'];
    4.     $email = $_POST['email'];
    5.     $password = $_POST['e_password'];
    6.     $r_password = $_POST['e_r_password'];
    7.          if($password == $r_password){
    8.              $password = md5($password);
    9.              $query = mysql_query("INSERT INTO users (id, name, login, email, password) VALUES ('','$name','$login', '$email','$password')")or die(mysql_error());
    10.              header("location:/index.php");
    11.          } else {
    12.              die("Password doesn't match")
    13.          }
    14. } else {
    15.     die('Login is using')
    16. }
    Только этот тоже замени на pdo
    PHP:
    1. $query = mysql_query("INSERT INTO users (id, name, login, email, password) VALUES ('','$name','$login', '$email','$password')")or die(mysql_error());
     
  13. Abu-Bakir

    Abu-Bakir Новичок

    С нами с:
    28 мар 2018
    Сообщения:
    39
    Симпатии:
    0
    PDO лучше?
     
  14. S_t_e_e_p

    S_t_e_e_p Активный пользователь

    С нами с:
    12 июл 2012
    Сообщения:
    181
    Симпатии:
    4
    Лучше и безопасней
     
  15. Abu-Bakir

    Abu-Bakir Новичок

    С нами с:
    28 мар 2018
    Сообщения:
    39
    Симпатии:
    0
    Вот весь код, имеются ошибки?
    PHP:
    1. <?php
    2.     $host = '127.0.0.1';
    3.     $db = 'скрыто';
    4.     $user = 'скрыто';
    5.     $pass = 'скрыто';
    6.     $charset = 'utf8';
    7.    
    8.     $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
    9.     $opt = [
    10.     PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    11.     PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    12.     PDO::ATTR_EMULATE_PREPARES => false,
    13.     ];
    14.     $pdo = new PDO($dsn, $user, $pass, $opt);
    15.  
    16. if(isset($_POST['register'])){
    17.         $query = $pdo->prepare("SELECT * FROM users WHERE login = :login LIMIT 1");
    18.         $query->bindParam(':login', $login, PDO::PARAM_STR, 12);
    19.         $query->execute();
    20.         $results = $query->fetch();
    21.         if(! $result) {
    22.         $login = $_POST['e_login'];
    23.         $name = $_POST['e_name'];
    24.         $email = $_POST['email'];
    25.         $password = $_POST['e_password'];
    26.         $r_password = $_POST['e_r_password'];
    27.         if($password == $r_password){
    28.         $password = md5($password);
    29.         $query = $link->prepare("INSERT INTO users (id, name, login, email, password) VALUES ('','$name','$login', '$email','$password')");
    30.         header("location:/index.php");
    31.         }
    32.         } else {
    33.             die('Login is using')
    34.         }
    35.         }
    36.        
    37.             else {
    38.                 die('Пароли не своподают');
    39.             }
    40.        
    41. ?>
     
  16. lastdays

    lastdays Активный пользователь

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    Имеются.
    Нет обязательной проверки, что пришли нужные данные.

    Отправив POST запрос с параметром register, можно получить уйму ошибок.

    Для себя, чтобы понять, скачайте готовый модуль регистрации и входа на сайт и посмотрите логику скрипта.
     
  17. Abu-Bakir

    Abu-Bakir Новичок

    С нами с:
    28 мар 2018
    Сообщения:
    39
    Симпатии:
    0
    А готовых модулей я не нашел, у вас имеется ссылка на готовый модуль?
     
  18. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    код жесть. говно ремонтируем на новое говно
     
  19. Abu-Bakir

    Abu-Bakir Новичок

    С нами с:
    28 мар 2018
    Сообщения:
    39
    Симпатии:
    0
    Если тебе не нравится код, так покажи нам, как нужно правильно писать его
     
  20. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    я уже одному ответил по схожему посту:
    https://php.ru/forum/threads/oshibka-v-podkljuchenij-bd.70530/#post-568503
    --- Добавлено ---
    а по делу, юзай функции:
    https://php.net/manual/ru/function.filter-input-array.php
    https://php.net/manual/ru/function.password-hash.php
    https://php.net/manual/ru/function.password-verify.php

    после функции header, всегда юзай
    https://php.net/manual/ru/function.exit.php

    это логическое де****, фильтры в помощь. Место данной строки, пропиши
    PHP:
    1. if ( $_SERVER['REQUEST_METHOD'] === 'POST' )
    или аналог ( в чем крутость куй знает ):
    PHP:
    1. if ( filter_input ( INPUT_SERVER, 'REQUEST_METHOD' ) === 'POST' )
    про уязвимость запроса при впихивании туда данных думаю бессмысленно балаболить.
    --- Добавлено ---
    теперь про говно... обратим внимание на переменную $login
    PHP:
    1. <?php
    2.  
    3. /* ... */
    4.  
    5. $query -> bindParam (':login', $login, PDO::PARAM_STR, 12 );
    6.  
    7. $query -> execute();
    8.  
    9. $results = $query -> fetch();
    10.  
    11. if ( !$result )
    12. {
    13.     $login = $_POST['e_login'];
    14.  
    15. /* ... */
    Это же гениально просто !
    Как значение в логин попадет если уже требуем чтобы запрос ИСТИНУ нам выдал ?
    А мы еще fetch юзаем не верно! Ммм... а разве у тебя не должно было вовсе ошибку выдасть call undefined fun fetch ?
    лови
    https://php.net/manual/ru/mysqli-stmt.fetch.php
    --- Добавлено ---
    Давай преть тем как юзать какую - либо функцию, будем читать по ней документацию, что и как с ней работать ?
     
    Dimon2x нравится это.
  21. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
  22. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    бл* я проглядел что там вовсе две разные переменные