За последние 24 часа нас посетили 22868 программистов и 1232 робота. Сейчас ищут 754 программиста ...

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

Тема в разделе "PHP и базы данных", создана пользователем Dasha97, 7 июл 2017.

  1. Dasha97

    Dasha97 Новичок

    С нами с:
    17 окт 2016
    Сообщения:
    12
    Симпатии:
    0
    Здравствуйте.
    Хочу научится делать регистрацию на сайте, прочитала много статей на эту тему с предлагающем в них кодом и что я не побывала у меня она не выходит.
    Вот сама форма:
    PHP:
    1. <form action="verification.php" id="registerform" method="post"name="registerform">
    2.      <h1>Регистрация</h1>
    3. <p><label for="user_login">Полное имя
    4. <input class="input" id="full_name" name="full_name"size="15"  type="text" value=""></label></p>
    5. <p><label for="user_pass">E-mail
    6. <input class="input" id="email" name="email" size="15"type="email" value=""></label></p>
    7.     <p><label for="user_login">Логин
    8. <input class="input" id="username" name="username"size="20"
    9. type="text" value=""></label></p>
    10. <p><label for="user_pass">Пароль
    11. <input class="input" id="password" name="password"size="15"   type="password" value=""></label></p>
    12.     <p><label for="user_pass2">Подтвердите пароль
    13. <input class="input" id="password2" name="password2"size="10"   type="password2" value=""></label></p>
    14. <p class="submit"><input class="button" id="register" name= "register" type="submit" value="Зарегистрироваться"></p>
    15.       <p class="regtext">Уже зарегистрированы? <a href= "login.php">Введите имя пользователя</a>!</p>
    16. </form>
    Вот файл обработчик:
    PHP:
    1. <?php
    2. include_once("connection.php");
    3.  
    4. if (isset($_POST['submit'])){
    5.     if(empty($_POST['username']))  {
    6.     echo '<br><font color="red"><img border="0" src="error.gif" alt="Введите логин"> Введите логин!</font>';
    7. }
    8. elseif (!preg_match("/^\w{3,}$/", $_POST['username'])) {
    9. echo '<br><font color="red"><img border="0" src="error.gif" alt="В поле "Логин" введены недопустимые символы!">В поле "Логин" введены недопустимые символы! Только буквы, цифры и подчеркивание!</font>';
    10. }
    11. elseif(empty($_POST['password'])) {
    12. echo '<br><font color="red"><img border="0" src="error.gif" alt="Введите пароль !">Введите пароль!</font>';
    13. }
    14. elseif (!preg_match("/\A(\w){6,20}\Z/", $_POST['password'])) {
    15. echo '<br><font color="red"><img border="0" src="error.gif" alt="Пароль слишком короткий!">Пароль слишком короткий! Пароль должен быть не менее 6 символов! </font>';
    16. }
    17. elseif(empty($_POST['password2'])) {
    18. echo '<br><font color="red"><img border="0" src="error.gif" alt="Введите подтверждение пароля!">Введите подтверждение пароля!</font>';
    19. }
    20. elseif($_POST['password'] != $_POST['password2']) {
    21. echo '<br><font color="red"><img border="0" src="error.gif" alt="Введенные пароли не совпадают!">Введенные пароли не совпадают!</font>';
    22. }
    23. elseif(empty($_POST['email'])) {
    24. echo '<br><font color="red"><img border="0" src="error.gif" alt="Введите E-mail!">Введите E-mail! </font>';
    25. }
    26. elseif (!preg_match("/^[a-zA-Z0-9_\.\-]+@([a-zA-Z0-9\-]+\.)+[a-zA-Z]{2,6}$/", $_POST['email'])) {
    27. echo '<br><font color="red"><img border="0" src="error.gif" alt="E-mail имеет недопустимий формат!">E-mail имеет недопустимий формат! Например, name@gmail.com! </font>';
    28. }
    29.  
    30. else{
    31. $username = $_POST['username'];
    32. $password = $_POST['password'];
    33. $mdPassword = md5($password);
    34. $password2 = $_POST['password2'];
    35. $email = $_POST['email'];
    36. $rdate = date("d-m-Y в H:i");
    37. $full_name = $_POST['full_name'];
    38.  
    39.  
    40. $query = ("SELECT id FROM users WHERE username='$username'");
    41. $sql = mysql_query($query) or die(mysql_error());
    42.  
    43. if (mysql_num_rows($sql) > 0) {
    44. echo '<font color="red"><img border="0" src="error.gif" alt="Пользователь с таким логином зарегистрированый!">Пользователь с таким логином зарегистрирован!</font>';
    45. }
    46. else {
    47. $query2 = ("SELECT id FROM users WHERE email='$email'");
    48. $sql = mysql_query($query2) or die(mysql_error());
    49. if (mysql_num_rows($sql) > 0){
    50. echo '<font color="red"><img border="0" src="error.gif"  alt="Пользователь с таким e-mail зарегистрированый!">Пользователь с таким e-mail уже зарегистрирован!</font>';
    51. }
    52. else{
    53. $query = "INSERT INTO users (username, password, email, reg_date, full_name)
    54. VALUES ('$username', '$mdPassword', '$email', '$rdate', '$full_name')";
    55. $result = mysql_query($query) or die(mysql_error());;
    56. echo '<font color="green"><img border="0" src="ok.gif"  alt="Вы успешно зарегистрировались!">Вы успешно зарегистрировались!</font><br><a href="index.php">На главную</a>';
    57. }
    58. }
    59. }
    60. }
    61. ?>
    Файл connection.php содержит подключение к базе данных
    После нажатие на кнопку "Зарегистрироваться" открывается пустой файл verification.php и не какие данные в базу не отправляются. Помогите, пожалуйста)
     
  2. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    @Dasha97 по какой книге изучаешь PHP? Функции mysql_* уже удалили из PHP, похоже что у тебя старая версия или выключены сообщения, что эти функции в следующей версии PHP удалят.

    Отладку умеешь делать? Без неё сложно узнать что пошло не так.

    отладка/debug
    http://phpfaq.ru/debug
    https://netbeans.org/kb/docs/php/debugging_ru.html
    https://php.ru/forum/threads/howto-...i-po-shagam-i-s-kartinkami.58974/#post-474550
     
  3. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Приведенный код странный и плохо спроектированный. И..индусский.

    PHP:
    1. elseif (!preg_match("/\A(\w){6,20}\Z/", $_POST['password'])) {
    2. echo '<br><font color="red"><img border="0" src="error.gif" alt="Пароль слишком короткий!">Пароль слишком короткий! Пароль должен быть не менее 6 символов! </font>';
    3. }
    Измерять регуляркой длину строки - это что-то новое.
     
  4. Dasha97

    Dasha97 Новичок

    С нами с:
    17 окт 2016
    Сообщения:
    12
    Симпатии:
    0
    Я делала все по этой статье http://ajaxs.ru/lesson/php/38-sozdanie_registracii_polzovatelej_na_sajte.html так как только учусь
     
  5. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    В школе и институте не дают дают статьи как основной учебный материал, так что лучше использовать книги
    Можно начать с этой http://www.ozon.ru/context/detail/id/137538198/ если ты разбираешься как работает сеть, понимаешь что такое администрирование операционных систем, в основном linux, и пройден школьный курс информатики
     
  6. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @Fell-x27
    Несколько месяцев назад я тоже измерял длину строки регулярной, :D хотя можно сказать что и сейчас измеряю ей, но эт не так, пишу в одну строку просто и проверку символов и длину строки чтобы код был меньше.
    Примерно выглядит так:
    PHP:
    1. if (!preg_match("/^[a-z0-9][a-z0-9-_]+[a-z0-9]$/is", $login) AND (mb_strlen($login, 'UTF-8') < 3)){
    2. $err = "не допустимые символы в логике или слишком короткий логин";
    3. }
    Здесь происходит регулярка проверка символов, а потом после нее проверяю на длину.
    Считается такой подход идеальным?
     
  7. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @Dasha97
    Привет, когда я начинал учить php сразу взялся с регистрации как и ты, нашел пример регистрации сделал все как было написано и все у меня получилось, и я потом подумал может теперь авторизацию сделать начал искать примеры ну нашел я их а применить не могу так как не хватало знаний их вообще не было именно по языку php хоть и учился я на программиста, но учили мы другие языки. Короче к чему я веду лучшие выучить для начала основы php а если ты их знаешь правильно пиши регистрацию)
    Вообще я и до сих пор по не многу улучшают регистрацию, так как узнаю что-то новое, новые функции новые возможности которые можно применить. И все эти новые возможности беру с мануала, мануал который советуют на этом форуме ребята, спасибо им.
     
  8. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Можно избавиться от mb_strlen и добавить в регулярное выражение проверку длины.
     
  9. username

    username Новичок

    С нами с:
    6 июл 2017
    Сообщения:
    225
    Симпатии:
    17
  10. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Идеальным считается подход, когда ты не указываешь пользователю, какой у него должен быть логин. Ды пусть пишет хоть на китайском. Надо правильно работать с кодировкой и фильтрами, а не запрещать писать символы, которые человеку хочется. Меня вот всегда выбешивает, что на ряде сайтов можно использовать "-", на ряде нельзя, но можно "_", а где-то вообще нельзя спецсимволы. В итоге у меня ник то Fell-x27, то Fell_x27, то Fellx27. Уж чем прочерк людям не угодил - понятия не имею. Наверное есть что-то сакральное в том, чтобы ощущать себя эдаким боссом, застраивая людей уже с порога.
     
    denis01 нравится это.
  11. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @denis01
    Знаю, решил так сделать, лишним не будет) я ещё сильно в регулярках не шарю. Спасибо за совет.
    --- Добавлено ---
    @Fell-x27
    Каждый программист делает для себя оптимальный вариант, если он считает что запретить надо некий символ, он это делает, т. к. считает нужным.
     
  12. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Если веб-разработчик делает оптимальный вариант для себя, а не для пользователя, это - плохой веб-разработчик.

    Вот расскажи мне, в чем для тебя оптимальный вариант в запрете кириллицы в логинах? Что это тебе дает? Чем мешает кириллица? А в чем смысл запрета спецсимволов? Почему я не могу в логине использовать символ "#", к примеру? Ты ведь обдуманно и взвешенно принимал решение об этих ограничениях? Это ведь было нужно, а не тупо ограничения ради ограничений, просто потому что ну вот потому что вот?
     
  13. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Для кириллицы надо писать целый класс в регулярке. Уж не представляю как выглядит китайский в регулярном выражении. А символ "-" приходится экранировать. Чем длиннее регулярка - тем больше можно в ней наделать ошибок. Вобщем, тут вопрос выгоды. Если радость пользователей от использования каких-либо символов оправдает трудозатраты, то почему бы и нет. ;)
     
  14. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Maputo нравится это.
  15. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Для каждого тезиса в этой цитате у меня всего один вопрос: "ЗАЧЕМ?". Чтобы решить проблемы, которые сам себе напридумал? :)

    О какой регулярке речь? Проверяющей корректность логина? Я толкую о том, что ее вообще нужно выкинуть и не морочить голову ни себе, ни пользователям. У меня в проектах дохрена работы с текстом. В том числе с автогенерацией PHP и JS. Файлы на лету режутся, перебираются, в них ведется поиск, замены. И нигде нет ни одной регулярки.

    Единственное место, где у меня можно встретить регулярки - клиентская часть. Они нужны в паттернах полей ввода и, порой, бывают полезны в селекторах. Все. Больше нигде ни разу не пригодились. И это речь идет обо всем остальном, что есть окромя обработки логина, которая у меня упирается в то, что логин не должен быть пустым. Точка.

    Внимание вопрос - может просто не стоит усложнять себе жизнь?
     
  16. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Много таких "зачем" можно вспомнить. Зачем Microsoft? Зачем HDD? Зачем файлы? Зачем двоичная логика? Это все дико усложняет жизнь, как пользователям, так и программистам. Я, впринципе, согласен. Только пусть за пожелания пользователей будут отвечать маркетологи и иже с ними.
     
  17. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Не разводи демагогию, я тебя прошу. На вопрос, "Зачем ограничивать набор символов в логине" ответ так и не был дан пока что.
     
  18. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Причины:
    1. Нечитабельные логины
    2. Ненормативная лексика
    3. Подделка логина (визуальная)
    4. Ограничения по шрифтам
     
  19. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    нет причин, это же очевидно.
     
  20. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    1) Такие вещи должны регулироваться правилами ресурса, а не техническими ограничениями. И на латинице можно сделать логин "gHDGSKJghdJHHDFSdsaDS". Читабельнее некуда.
    2) Серьезно? Вот те ненормативка на латинице: Huj, pizda, Djigurda. Не говоря о том, что в английском свои ругательства есть.
    3) И такие вещи тоже должны регулироваться на уровне правил ресурса, а не на уровне технических ограничений.
    4) Лол, чо. То есть, ограничение по шрифтам у тебя логины накладывают, а не контент сайта?
    К.О. намекает - если у меня сайт русскоязычный, то шрифты будут поддерживать кириллицу. В том числе и в логинах.

    Тот же К.О. подсказывает, что если сайт не поддерживает какой-то набор символов, пользователь поймет это еще при наборе оных - они будут отображаться как квадратики.

    Тот же К.О. сообщает, что, если в шрифтах есть ограниченная поддержка экзотического символьного набора, и он будет отображаться не так красиво, как остальные слова на сайте, где данные символы встречаться будут с вероятностью 0%, всем будет плевать, никто и не заметит отклонения, потому что хрен его знает, как в таком шрифте должен выглядеть, например, иврит.
     
  21. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    :D
    А для чего тогда все эти правила на форуме, баны и другие ограничения, если это не причины?
    Давайте и JS в сообщения разрешать вставлять, раз пользователю так хочется.
    Вот например:
    Это что? Ограничения или желание показать власть?
    Может просто есть у всех желание держать пользователей в рамках?
    Сами себе противоречите


    Мат в английской транскрипции не так обидно звучит, как вот это оскорбление. И кому мне жаловаться если модер не знает, что логин может быть одним шрифтом, а контент другим?
     
    #21 Maputo, 8 июл 2017
    Последнее редактирование: 8 июл 2017
  22. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Повторяю, не разводи демагогию. Эти вот "не можешь атаковать тезис - атакуй оппонента", "доведение до абсурда" и тд. на меня не действуют. Оставь это для кого-нибудь другого. Либо начнешь ловить демагогические страйки.

    Ответа, обоснованного ответа я так и не получил. Хотя нет, @igordata выше его дал.

    Соль в том, что программист должен выставлять технические ограничения только в одном случае - если это технически обосновано. Дизайнеропроблемы и маты в никах - не техническое обоснование, а вкусовщина. Вот, к примеру, экранирование апострофов во входящих данных - техническая причина, так как это помогает предотвратить инъекцию. Конвертация исходящих символов в html-сущности - тоже техническая причина. Помогает избежать поломку страницы, если где-то в контенте встретится угловая скобочка. Не говоря уже о вредоносном коде.

    Эти ограничения имеют лишь одну причину - защитить систему от поломки.
    Матерные ники не ломают систему.
     
    #22 Fell-x27, 8 июл 2017
    Последнее редактирование: 8 июл 2017
  23. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Хороший ответ:D
    Лучше бы воспользовались привилегиями и очистили тему от созданного нами мусора.
     
  24. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Первый демагогический страйк.
    --- Добавлено ---
    Блин, неужели так сложно откинуть это вот упрямое контрпродуктивное баранство, пораскинуть мозгами и самостоятельно дойти до того, что обсуждаемые ограничения - это бессмысленная глупая хрень? Принять свою неправоту - это не самоунижение и не оскорбление. Я тоже порой заблуждаюсь. Когда мне доходчиво, с аргументами, объясняют, почему я не прав - я всегда соглашаюсь. Это помогает расти над собой. Это значит, что одним заблуждением меньше. Это ж благо. Глупо переть против логики и здравого смысла.
     
  25. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    тут не любят диалоги в стиле восьмилетних детей. Тезисы должны подкрепляться аргументами.

    а тебе еще стоит освежить в памяти значение слова "причина"