За последние 24 часа нас посетили 8460 программистов и 464 робота. Сейчас ищут 233 программиста ...

Регистрация пользователей

Тема в разделе "PHP для новичков", создана пользователем Reken, 31 июл 2019.

Метки:
  1. Reken

    Reken Новичок

    С нами с:
    4 июл 2019
    Сообщения:
    41
    Симпатии:
    0
    Подскажите пожалуйста, учусь создавать портал с возможностью регистрации пользователей, пытаюсь реализовать пока что простую схему, регистрация по логину и паролю.
    WEB сервер собран на FreeBSD (Apache24, PHP7, MySQL56)

    Для регистрации использую 5 файлов:
    dbconnect.php (для подключения к БД)
    header.php (для проврки введенных данных)
    form_register.php (форма регистрации)
    register.php (для обработки формы регистрации)

    dbconnect.php
    Код (Text):
    1. <?php
    2.     // Указываем кодировку
    3.     header('Content-Type: text/html; charset=utf-8');
    4.  
    5.     $server = "localhost";
    6.     $username = "имя_пользователя_бд";
    7.     $password = "пароль_пользователя_бд";
    8.     $database = "имя_базы_данных";
    9.      
    10.     // Подключение к базе данный через MySQLi
    11.     $mysqli = new mysqli($server, $username, $password, $database);
    12.  
    13.     // Проверяем, успешность соединения.
    14.     if (mysqli_connect_errno()) {
    15.         echo "<p><strong>Ошибка подключения к БД</strong>. Описание ошибки: ".mysqli_connect_error()."</p>";
    16.         exit();
    17.     }
    18.  
    19.     // Устанавливаем кодировку подключения
    20.     $mysqli->set_charset('utf8');
    21.  
    22.     //Для удобства, добавим здесь переменную, которая будет содержать название нашего сайта
    23.     $address_site = "http://testsite.local";
    24. ?>
    form_register.php
    Код (Text):
    1. <?php
    2.     //Подключение файла
    3.     require_once("header.php");
    4. ?>
    5. <!-- Блок для вывода сообщений -->
    6. <div class="block_for_messages">
    7.     <?php
    8.         //Если в сессии существуют сообщения об ошибках, то выводим их
    9.         if(isset($_SESSION["error_messages"]) && !empty($_SESSION["error_messages"])){
    10.             echo $_SESSION["error_messages"];
    11.  
    12.             //Уничтожаем чтобы не выводились заново при обновлении страницы
    13.             unset($_SESSION["error_messages"]);
    14.         }
    15.  
    16.         //Если в сессии существуют радостные сообщения, то выводим их
    17.         if(isset($_SESSION["success_messages"]) && !empty($_SESSION["success_messages"])){
    18.             echo $_SESSION["success_messages"];
    19.              
    20.             //Уничтожаем чтобы не выводились заново при обновлении страницы
    21.             unset($_SESSION["success_messages"]);
    22.         }
    23.     ?>
    24. </div>
    25.  
    26. <?php
    27.     //Проверяем, если пользователь не авторизован, то выводим форму регистрации,
    28.     //иначе выводим сообщение о том, что он уже зарегистрирован
    29.     if(!isset($_SESSION["first name"]) && !isset($_SESSION["password"])){
    30. ?>
    31.         <div id="form_register">
    32.             <h2>Форма регистрации</h2>
    33.  
    34.             <form action="register.php" method="post" name="form_register">
    35.                 <table>
    36.                     <tbody><tr>
    37.                         <td> Логин </td>
    38.                         <td>
    39.                             <input type="text" name="first_name" required="required">
    40.                         </td>
    41.                     </tr>
    42.  
    43.              
    44.                     <tr>
    45.                         <td> Пароль: </td>
    46.                         <td>
    47.                             <input type="password" name="password" placeholder="минимум 6 символов" required="required"><br>
    48.                             <span id="valid_password_message" class="mesage_error"></span>
    49.                         </td>
    50.                     </tr>
    51.                    
    52.                     <tr>
    53.                         <td colspan="2">
    54.                             <input type="submit" name="btn_submit_register" value="Зарегистрироватся!">
    55.                         </td>
    56.                     </tr>
    57.                 </tbody></table>
    58.             </form>
    59.         </div>
    60. <?php
    61.     }else{
    62. ?>
    63.         <div id="authorized">
    64.             <h2>Вы уже зарегистрированы</h2>
    65.         </div>
    66. <?php
    67.     }
    68.      
    69.    
    70. ?>
    header.php
    Код (Text):
    1. <?php
    2.     //Запускаем сессию
    3.     session_start();
    4. ?>
    5.  
    6. <!DOCTYPE html>
    7. <html>
    8.     <head>
    9. <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    10. <script type="text/javascript">
    11.     $(document).ready(function(){
    12.         "use strict";
    13.         //================ Проверка длины пароля ==================
    14.         var password = $('input[name=password]');
    15.          
    16.         password.blur(function(){
    17.             if(password.val() != ''){
    18.  
    19.                 //Если длина введенного пароля меньше шести символов, то выводим сообщение об ошибке
    20.                 if(password.val().length < 6){
    21.                     //Выводим сообщение об ошибке
    22.                     $('#valid_password_message').text('Минимальная длина пароля 6 символов');
    23.  
    24.                     // Дезактивируем кнопку отправки
    25.                     $('input[type=submit]').attr('disabled', true);
    26.                      
    27.                 }else{
    28.                     // Убираем сообщение об ошибке
    29.                     $('#valid_password_message').text('');
    30.  
    31.                     //Активируем кнопку отправки
    32.                     $('input[type=submit]').attr('disabled', false);
    33.                 }
    34.             }else{
    35.                 $('#valid_password_message').text('Введите пароль');
    36.             }
    37.         });
    38.     });
    39. </script>
    40. </head>
    41. </html>
    register.php
    Код (Text):
    1. <?php
    2.     //Запускаем сессию
    3.     session_start();
    4.  
    5.     //Добавляем файл подключения к БД
    6.     require_once("dbconnect.php");
    7.  
    8.     //Объявляем ячейку для добавления ошибок, которые могут возникнуть при обработке формы.
    9.     $_SESSION["error_messages"] = '';
    10.  
    11.     //Объявляем ячейку для добавления успешных сообщений
    12.     $_SESSION["success_messages"] = '';
    13. ?>
    14. <?php
    15.     /*
    16.         Проверяем была ли отправлена форма, то есть была ли нажата кнопка зарегистрироваться. Если да, то идём дальше, если нет, то выведем пользователю сообщение об ошибке, о том что он зашёл на эту страницу напрямую.
    17.     */
    18.     if(isset($_POST["btn_submit_register"]) && !empty($_POST["btn_submit_register"])){
    19.  
    20. /* Проверяем если в глобальном массиве $_POST существуют данные отправленные из формы и заключаем переданные данные в обычные переменные.*/
    21.  
    22. if(isset($_POST["first_name"])){
    23.      
    24.     //Обрезаем пробелы с начала и с конца строки
    25.     $first_name = trim($_POST["first_name"]);
    26.  
    27.     //Проверяем переменную на пустоту
    28.     if(!empty($first_name)){
    29.         // Для безопасности, преобразуем специальные символы в HTML-сущности
    30.         $first_name = htmlspecialchars($first_name, ENT_QUOTES);
    31.     }else{
    32.         // Сохраняем в сессию сообщение об ошибке.
    33.         $_SESSION["error_messages"] .= "<p class='mesage_error'>Укажите Ваше имя</p>";
    34.  
    35.         //Возвращаем пользователя на страницу регистрации
    36.         header("HTTP/1.1 301 Moved Permanently");
    37.         header("Location: ".$address_site."/form_register.php");
    38.  
    39.         //Останавливаем скрипт
    40.         exit();
    41.     }
    42.  
    43.      
    44. }else{
    45.     // Сохраняем в сессию сообщение об ошибке.
    46.     $_SESSION["error_messages"] .= "<p class='mesage_error'>Отсутствует поле с именем</p>";
    47.  
    48.     //Возвращаем пользователя на страницу регистрации
    49.     header("HTTP/1.1 301 Moved Permanently");
    50.     header("Location: ".$address_site."/form_register.php");
    51.  
    52.     //Останавливаем скрипт
    53.     exit();
    54. }
    55. if(isset($_POST["password"])){
    56.  
    57.     //Обрезаем пробелы с начала и с конца строки
    58.     $password = trim($_POST["password"]);
    59.  
    60.     if(!empty($password)){
    61.         $password = htmlspecialchars($password, ENT_QUOTES);
    62.  
    63.         //Шифруем папроль
    64.         $password = md5($password."top_secret");
    65.     }else{
    66.         // Сохраняем в сессию сообщение об ошибке.
    67.         $_SESSION["error_messages"] .= "<p class='mesage_error'>Укажите Ваш пароль</p>";
    68.          
    69.         //Возвращаем пользователя на страницу регистрации
    70.         header("HTTP/1.1 301 Moved Permanently");
    71.         header("Location: ".$address_site."/form_register.php");
    72.  
    73.         //Останавливаем  скрипт
    74.         exit();
    75.     }
    76.  
    77. }else{
    78.     // Сохраняем в сессию сообщение об ошибке.
    79.     $_SESSION["error_messages"] .= "<p class='mesage_error'>Отсутствует поле для ввода пароля</p>";
    80.      
    81.     //Возвращаем пользователя на страницу регистрации
    82.     header("HTTP/1.1 301 Moved Permanently");
    83.     header("Location: ".$address_site."/form_register.php");
    84.  
    85.     //Останавливаем  скрипт
    86.     exit();
    87. }
    88. //Запрос на добавления пользователя в БД
    89. $result_query_insert = $mysqli->query("INSERT INTO `users` (first_name, password) VALUES ('".$first_name."', '".$password."')");
    90.  
    91. if(!$result_query_insert){
    92.     // Сохраняем в сессию сообщение об ошибке.
    93.     $_SESSION["error_messages"] .= "<p class='mesage_error' >Ошибка запроса на добавления пользователя в БД</p>";
    94.      
    95.     //Возвращаем пользователя на страницу регистрации
    96.     header("HTTP/1.1 301 Moved Permanently");
    97.     header("Location: ".$address_site."/form_register.php");
    98.  
    99.     //Останавливаем  скрипт
    100.     exit();
    101. }else{
    102.  
    103.     $_SESSION["success_messages"] = "<p class='success_message'>Регистрация прошла успешно!!! <br />Теперь Вы можете авторизоваться используя Ваш логин и пароль.</p>";
    104.  
    105.     //Отправляем пользователя на страницу авторизации
    106.     header("HTTP/1.1 301 Moved Permanently");
    107.     header("Location: ".$address_site."/form_auth.php");
    108. }
    109.  
    110. /* Завершение запроса */
    111. $result_query_insert->close();
    112.  
    113. //Закрываем подключение к БД
    114. $mysqli->close();
    115.  
    116.      
    117.     }else{
    118.  
    119.         exit("<p><strong>Ошибка!</strong> Вы зашли на эту страницу напрямую, поэтому нет данных для обработки. Вы можете перейти на <a href=".$address_site."> главную страницу </a>.</p>");
    120.     }
    121. ?>
    Все что требуется от файлов срабатывает, кроме одного…
    Когда ввожу логин, пароль и нажимаю зарегистрироваться, выскакивает ошибка:
    Ошибка запроса на добавления пользователя в БД

    Подскажите пожалуйста, где я допустил ошибку в коде?
     
  2. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.193
    Симпатии:
    372
    Чувак это же чужой код
    еще и англоязычный был.

    Напиши сам, так хоть научишься чему нибудь.

    Создай пока один файлик

    вот тут примеры форм
    https://developer.mozilla.org/ru/docs/Web/HTML/Element/form

    После ввода имени просто выведи его для начала. А потом и с базой можно работать.
     
    #2 Artur_hopf, 31 июл 2019
    Последнее редактирование: 31 июл 2019
  3. Reken

    Reken Новичок

    С нами с:
    4 июл 2019
    Сообщения:
    41
    Симпатии:
    0
    Немного упростил себе задачу, сделал так:
    Два файла:
    test.php (создаем значения)
    script.php (записываем значения в базу)

    test.php
    Код (Text):
    1. <html>
    2. <head>
    3. <title>Zapis v BD</title>
    4. </head>
    5. <body>
    6. <form method="POST" action="script.php">
    7.   <input name="name" type="text" placeholder="Name"/>
    8.   <input name="text" type="text" placeholder="Text"/>
    9.   <input type="submit" value="Отправить"/>
    10. </form>
    11. </body>
    12. </html>
    script.php
    Код (Text):
    1. <?php
    2. if (isset($_POST['name']) && isset($_POST['text'])){
    3.  
    4.     $name = $_POST['name'];
    5.     $text = $_POST['text'];
    6.  
    7.     $db_host = "localhost";
    8.     $db_user = "portal";
    9.     $db_password = "password";
    10.     $db_base = 'portal';
    11.     $db_table = "users";
    12.  
    13.     $mysqli = new mysqli($db_host,$db_user,$db_password,$db_base);
    14.  
    15.     // Osibka podkl
    16.     if ($mysqli->connect_error) {
    17.         die('ERROR : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
    18.     }
    19.  
    20.     $result = $mysqli->query("INSERT INTO ".$db_table." (first_name,email) VALUES ('$name','$text')");
    21.  
    22.     if ($result == true){
    23.         echo "Всё хорошо";
    24.     }else{
    25.         echo "Не работает";
    26.     }
    27. }
    28. ?>
    База portal с таблицей users и полями first_name и email создана...
    Но данные из скрипта не записываются. При нажатии на кнопку "Отправить", выходит сообщение "Не работает". Где в скрипте ошибка?
     
  4. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.193
    Симпатии:
    372
    Твоя ошибка в том что не выводишь ошибки пошагово
    это вот фигня:
    PHP:
    1. if ($result == true){
    2.         echo "Всё хорошо";
    3.     }else{
    4.         echo "Не работает";
    5. }
    пример из документации:
    PHP:
    1. if (!$mysqli->query("SET @a:='this will not work'")) {
    2.         printf("Ошибка: %s\n", $mysqli->error);
    3. }
    4. $result->close();
    --- Добавлено ---
    Когда данные получится записать в таблицу, исправь свои insert по этому примеру.
    https://www.php.net/manual/ru/mysqli-stmt.bind-param.php
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    6.507
    Симпатии:
    1.034
    Адрес:
    Лень
    @Reken зачем функция и что это дает для пароля ?
     
  6. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.193
    Симпатии:
    372
    @MouseZver как я понял он уже выкинул все что было, и делает сам =)
     
  7. Reken

    Reken Новичок

    С нами с:
    4 июл 2019
    Сообщения:
    41
    Симпатии:
    0
    Да, пытаюсь сделать сам, на более простом примере
    Заменил:
    Код (Text):
    1. if ($result == true){
    2.         echo "Всё хорошо";
    3.     }else{
    4.         echo "Не работает";
    5. }
    на вот это:
    Код (Text):
    1.     if (!$mysqli->query("SET @a:='this will not work'")) {
    2.         printf("Ошибка: %s\n", $mysqli->error);
    3.     }
    4.     $result->close();
    5. }
    6.  
    7. $mysqli->close();
    В итоге, при нажатии на отправить, пустая страница...Не показывает ошибок. Что сможете подсказать?
     
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    6.507
    Симпатии:
    1.034
    Адрес:
    Лень
    оторванный кусок не синтаксического кода ничего не говорит. Тобишь у тебя пустой пост с набором букв
     
  9. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.193
    Симпатии:
    372
    Я же писал что это пример просто из документации =(

    подумай как скрестить твой код:
    PHP:
    1. <?php
    2. if (isset($_POST['name']) && isset($_POST['text'])){
    3.     $name = $_POST['name'];
    4.     $text = $_POST['text'];
    5.     $db_host = "localhost";
    6.     $db_user = "portal";
    7.     $db_password = "password";
    8.     $db_base = 'portal';
    9.     $db_table = "users";
    10.     $mysqli = new mysqli($db_host,$db_user,$db_password,$db_base);
    11.     // Osibka podkl
    12.     if ($mysqli->connect_error) {
    13.         die('ERROR : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
    14.     }
    15.     $result = $mysqli->query("INSERT INTO ".$db_table." (first_name,email) VALUES ('$name','$text')");
    16.     if ($result == true){
    17.         echo "Всё хорошо";
    18.     }else{
    19.         echo "Не работает";
    20.     }
    21. }
    22. ?>
    с этим примером:
    PHP:
    1.     if (!$mysqli->query("SET @a:='this will not work'")) {
    2.         printf("Ошибка: %s\n", $mysqli->error);
    3.     }
     
  10. Reken

    Reken Новичок

    С нами с:
    4 июл 2019
    Сообщения:
    41
    Симпатии:
    0
    Спасибо, всё получилось...
    Скрестил скрипт:
    Код (Text):
    1. <?php
    2. if (isset($_POST['name']) && isset($_POST['text'])){
    3.     $name = $_POST['name'];
    4.     $text = $_POST['text'];
    5.     $db_host = "localhost";
    6.     $db_user = "portal";
    7.     $db_password = "password";
    8.     $db_base = 'portal';
    9.     $db_table = "users";
    10.     $mysqli = new mysqli($db_host,$db_user,$db_password,$db_base);
    11.     // Osibka podkl
    12.     if ($mysqli->connect_error) {
    13.         die('ERROR : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
    14.     }
    15.     $result = $mysqli->query("INSERT INTO ".$db_table." (first_name,email) VALUES ('$name','$text')");
    16.     if ($result == true){
    17.         echo "Всё хорошо";
    18.     }else{
    19. printf("Ошибка: %s\n", $mysqli->error);}
    20. }
    21. ?>
    После этого увидел ошибку по нормальному "ERROR: Field 'UID' doesn't have a default value "
    У меня в таблице было поле "UID". В итоге я создал другую таблицу, только с полями "name" и "text"
    После этого всё получилось, данные записались в базу.
     
  11. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.193
    Симпатии:
    372
    @Reken вам все же надо создать толе id, только указать ему AUTO_INCREMENT
     
  12. Swert313

    Swert313 Новичок

    С нами с:
    16 апр 2020
    Сообщения:
    4
    Симпатии:
    0
    ребята подскажите почему этот код при нажатии на регистрация выдает ошибка 404 типо файл не найден
     
  13. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    7.696
    Симпатии:
    1.492
    Телепаты в отпуске, давай подробности
     
  14. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    6.507
    Симпатии:
    1.034
    Адрес:
    Лень
    @Swert313, аа.. нагуглил регистрацию с кодом на ладони, а придя сюда за копиПастом, опачки.... не судьба ;)
     
  15. Swert313

    Swert313 Новичок

    С нами с:
    16 апр 2020
    Сообщения:
    4
    Симпатии:
    0
    у меня свой сайт на html полностью написан т нет регистрации.. а это просто пытаюсь изучить php вот и пробую разные коды и смотрю чужие ошибки вот и этот решил проверить а он пишет что файла нет ошибка 404, хоть файл и есть
    --- Добавлено ---
    ребят а не у кого нет книг по изучению php