За последние 24 часа нас посетили 22060 программистов и 1125 роботов. Сейчас ищут 790 программистов ...

Оцените код (Простая регистрация в бд)

Тема в разделе "Беседы", создана пользователем Dasderdas, 18 окт 2022.

  1. Dasderdas

    Dasderdas Новичок

    С нами с:
    29 мар 2022
    Сообщения:
    69
    Симпатии:
    0
    PHP:
    1. // Пока класс умеет только создавать аккаунты
    2. class Crud {
    3.  
    4.     private function db_connect() { // бд коннект :\
    5.         require "items/dbconnect.php";  
    6.         return $db;
    7.     }
    8.     private function RegData() { // Получаем данные из полей
    9.         $reg_username = filter_var(trim($_POST['username']), FILTER_SANITIZE_STRING);
    10.         $reg_password = filter_var(trim($_POST['password']), FILTER_SANITIZE_STRING);
    11.         $reg_newpassword = crypt($password,'oased312GHKASJ0');
    12.         $reg_email = filter_var(trim($_POST['email']), FILTER_SANITIZE_STRING);
    13.         return [$reg_username,$reg_password,$reg_newpassword,$reg_email];
    14.     }
    15.     private function Names() { // Получаем список всех имён из бд
    16.         $db = $this -> db_connect();
    17.         $name = $db->query("SELECT `name` FROM `users`");
    18.         $name = $name->fetch_all();
    19.         foreach ($name as $key => $value) {
    20.             foreach ($value as $k => $v) {
    21.                 $names .= $v." ";
    22.             }
    23.         }
    24.         $names = strval($names);
    25.         $names = explode(" ", $names);
    26.         $db -> close();
    27.         return $names;
    28.         $name -> close();
    29.     }
    30.     private function EMails() { // Получаем список всех почт из бд
    31.         $db = $this -> db_connect();
    32.         $mail = $db -> query("SELECT `email` FROM `users`");
    33.         $mail = $mail -> fetch_all();
    34.         foreach ($mail as $key => $value) {
    35.             foreach ($value as $k => $v) {
    36.                 $emails .= $v." ";
    37.             }
    38.         }
    39.         $emails = strval($emails);
    40.         $emails = explode(" ", $emails);
    41.         $db -> close();
    42.         return $emails;
    43.         $mail -> close();
    44.     }
    45.     public function CreateAccount() { // Регистрируем пользователя в бд
    46.         $regdata = $this -> RegData();
    47.         $names = $this -> Names();
    48.         $emails = $this -> EMails();
    49.         $db = $this -> db_connect();
    50.         $username = $regdata[0];
    51.         $new_password = $regdata[2];
    52.         $email = $regdata[3];
    53.             if (isset($_POST['cont'])) {
    54.                 if ($email == '' || $new_password == '' || $username == '') {
    55.                     echo 'Заполните все поля';
    56.                 } else { if (in_array($username,$names)) {
    57.                     echo 'Такое имя уже занято';
    58.                 } else { if (in_array($email,$emails)) {
    59.                      echo "Эта почта уже занята";
    60.                     } else {
    61.                      $db -> query("INSERT INTO `users` (`name`, `password`, `email`, `balance`) VALUES ('$username','$new_password','$email','0')");
    62.                      $db -> close();
    63.                      exit();
    64.                   }
    65.                 }
    66.               }
    67.             }
    68.     }
    69. }
    70. $user = new Crud;
    71. $user -> CreateAccount();
    Рад критике, особенно в отношении ооп, у меня нет представления как сконструировать регистрацию с ооп, скорее всего шляпа вышла
     
  2. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    863
    Симпатии:
    132
    Самая великая ошибка -- дёргать окружение (в твоём случае $_POST), сможешь сделать выводы?
    остальной код не читал, если нужно, дуй в иную тему.
     
    Dasderdas нравится это.
  3. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.825
    Симпатии:
    738
    Адрес:
    Татарстан
    нда.. .еще учиться и учиться....

    1. соединение с базой устанавливается один раз, как правило в конструкторе
    2. изучите синтаксис функций, и поймите что туда можно передавать аргументы
    3. какой там ооп, у вас и с логикой то не очень - насоздавали кучу функций, в которых реализуете выборку и занесение в массив ВСЕХ записей (причем по отдельности емейлов, имен) ... а если миллионы пользователей?
    - проверка существования значения в таблице значение делается условием в запросе SQL - where email=....
    - зачем уникальность имени? если авторизация например по email?
    - прочтите что возвращает filter_var в случае неудачи и подумайте - что тогда у вас зарегистрируется
    - ООП тут вообще не пахнет

    навскидку так... ну и еще куча всего
     
    Dasderdas нравится это.
  4. Dasderdas

    Dasderdas Новичок

    С нами с:
    29 мар 2022
    Сообщения:
    69
    Симпатии:
    0
    А как тогда получить информацию из полей? И почему это плохо?
    --- Добавлено ---
    1. - Так, так всё же можно? Я пытался, ничего не получалось, зашёл на форум где у чела был вопрос как это сделать, ему посоветовали как я сделал в этом случае. Ей богу, напишите пожалуйста как нужно.
    2. - Не понимаю где их тут нужно применить.
    3. - Это да) Спасибо за подсказку. Уникальность имени, тем не менее, нужна. Самое последнее про ооп ожидал услышать, тем не менее, если это возможно, напишите конкретнее.

    Спасибо!
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.825
    Симпатии:
    738
    Адрес:
    Татарстан
    1. прочтите про __construct
    2. в том же CreateAccount($data) - а в $data массив полей по которым создать....