Здравствуйте. Хочу научится делать регистрацию на сайте, прочитала много статей на эту тему с предлагающем в них кодом и что я не побывала у меня она не выходит. Вот сама форма: PHP: <form action="verification.php" id="registerform" method="post"name="registerform"> <h1>Регистрация</h1> <p><label for="user_login">Полное имя <input class="input" id="full_name" name="full_name"size="15" type="text" value=""></label></p> <p><label for="user_pass">E-mail <input class="input" id="email" name="email" size="15"type="email" value=""></label></p> <p><label for="user_login">Логин <input class="input" id="username" name="username"size="20" type="text" value=""></label></p> <p><label for="user_pass">Пароль <input class="input" id="password" name="password"size="15" type="password" value=""></label></p> <p><label for="user_pass2">Подтвердите пароль <input class="input" id="password2" name="password2"size="10" type="password2" value=""></label></p> <p class="submit"><input class="button" id="register" name= "register" type="submit" value="Зарегистрироваться"></p> <p class="regtext">Уже зарегистрированы? <a href= "login.php">Введите имя пользователя</a>!</p> </form> Вот файл обработчик: PHP: <?php include_once("connection.php"); if (isset($_POST['submit'])){ if(empty($_POST['username'])) { echo '<br><font color="red"><img border="0" src="error.gif" alt="Введите логин"> Введите логин!</font>'; } elseif (!preg_match("/^\w{3,}$/", $_POST['username'])) { echo '<br><font color="red"><img border="0" src="error.gif" alt="В поле "Логин" введены недопустимые символы!">В поле "Логин" введены недопустимые символы! Только буквы, цифры и подчеркивание!</font>'; } elseif(empty($_POST['password'])) { echo '<br><font color="red"><img border="0" src="error.gif" alt="Введите пароль !">Введите пароль!</font>'; } elseif (!preg_match("/\A(\w){6,20}\Z/", $_POST['password'])) { echo '<br><font color="red"><img border="0" src="error.gif" alt="Пароль слишком короткий!">Пароль слишком короткий! Пароль должен быть не менее 6 символов! </font>'; } elseif(empty($_POST['password2'])) { echo '<br><font color="red"><img border="0" src="error.gif" alt="Введите подтверждение пароля!">Введите подтверждение пароля!</font>'; } elseif($_POST['password'] != $_POST['password2']) { echo '<br><font color="red"><img border="0" src="error.gif" alt="Введенные пароли не совпадают!">Введенные пароли не совпадают!</font>'; } elseif(empty($_POST['email'])) { echo '<br><font color="red"><img border="0" src="error.gif" alt="Введите E-mail!">Введите E-mail! </font>'; } elseif (!preg_match("/^[a-zA-Z0-9_\.\-]+@([a-zA-Z0-9\-]+\.)+[a-zA-Z]{2,6}$/", $_POST['email'])) { echo '<br><font color="red"><img border="0" src="error.gif" alt="E-mail имеет недопустимий формат!">E-mail имеет недопустимий формат! Например, name@gmail.com! </font>'; } else{ $username = $_POST['username']; $password = $_POST['password']; $mdPassword = md5($password); $password2 = $_POST['password2']; $email = $_POST['email']; $rdate = date("d-m-Y в H:i"); $full_name = $_POST['full_name']; $query = ("SELECT id FROM users WHERE username='$username'"); $sql = mysql_query($query) or die(mysql_error()); if (mysql_num_rows($sql) > 0) { echo '<font color="red"><img border="0" src="error.gif" alt="Пользователь с таким логином зарегистрированый!">Пользователь с таким логином зарегистрирован!</font>'; } else { $query2 = ("SELECT id FROM users WHERE email='$email'"); $sql = mysql_query($query2) or die(mysql_error()); if (mysql_num_rows($sql) > 0){ echo '<font color="red"><img border="0" src="error.gif" alt="Пользователь с таким e-mail зарегистрированый!">Пользователь с таким e-mail уже зарегистрирован!</font>'; } else{ $query = "INSERT INTO users (username, password, email, reg_date, full_name) VALUES ('$username', '$mdPassword', '$email', '$rdate', '$full_name')"; $result = mysql_query($query) or die(mysql_error());; echo '<font color="green"><img border="0" src="ok.gif" alt="Вы успешно зарегистрировались!">Вы успешно зарегистрировались!</font><br><a href="index.php">На главную</a>'; } } } } ?> Файл connection.php содержит подключение к базе данных После нажатие на кнопку "Зарегистрироваться" открывается пустой файл verification.php и не какие данные в базу не отправляются. Помогите, пожалуйста)
@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
Приведенный код странный и плохо спроектированный. И..индусский. PHP: elseif (!preg_match("/\A(\w){6,20}\Z/", $_POST['password'])) { echo '<br><font color="red"><img border="0" src="error.gif" alt="Пароль слишком короткий!">Пароль слишком короткий! Пароль должен быть не менее 6 символов! </font>'; } Измерять регуляркой длину строки - это что-то новое.
Я делала все по этой статье http://ajaxs.ru/lesson/php/38-sozdanie_registracii_polzovatelej_na_sajte.html так как только учусь
В школе и институте не дают дают статьи как основной учебный материал, так что лучше использовать книги Можно начать с этой http://www.ozon.ru/context/detail/id/137538198/ если ты разбираешься как работает сеть, понимаешь что такое администрирование операционных систем, в основном linux, и пройден школьный курс информатики
@Fell-x27 Несколько месяцев назад я тоже измерял длину строки регулярной, хотя можно сказать что и сейчас измеряю ей, но эт не так, пишу в одну строку просто и проверку символов и длину строки чтобы код был меньше. Примерно выглядит так: PHP: if (!preg_match("/^[a-z0-9][a-z0-9-_]+[a-z0-9]$/is", $login) AND (mb_strlen($login, 'UTF-8') < 3)){ $err = "не допустимые символы в логике или слишком короткий логин"; } Здесь происходит регулярка проверка символов, а потом после нее проверяю на длину. Считается такой подход идеальным?
@Dasha97 Привет, когда я начинал учить php сразу взялся с регистрации как и ты, нашел пример регистрации сделал все как было написано и все у меня получилось, и я потом подумал может теперь авторизацию сделать начал искать примеры ну нашел я их а применить не могу так как не хватало знаний их вообще не было именно по языку php хоть и учился я на программиста, но учили мы другие языки. Короче к чему я веду лучшие выучить для начала основы php а если ты их знаешь правильно пиши регистрацию) Вообще я и до сих пор по не многу улучшают регистрацию, так как узнаю что-то новое, новые функции новые возможности которые можно применить. И все эти новые возможности беру с мануала, мануал который советуют на этом форуме ребята, спасибо им.
Идеальным считается подход, когда ты не указываешь пользователю, какой у него должен быть логин. Ды пусть пишет хоть на китайском. Надо правильно работать с кодировкой и фильтрами, а не запрещать писать символы, которые человеку хочется. Меня вот всегда выбешивает, что на ряде сайтов можно использовать "-", на ряде нельзя, но можно "_", а где-то вообще нельзя спецсимволы. В итоге у меня ник то Fell-x27, то Fell_x27, то Fellx27. Уж чем прочерк людям не угодил - понятия не имею. Наверное есть что-то сакральное в том, чтобы ощущать себя эдаким боссом, застраивая людей уже с порога.
@denis01 Знаю, решил так сделать, лишним не будет) я ещё сильно в регулярках не шарю. Спасибо за совет. --- Добавлено --- @Fell-x27 Каждый программист делает для себя оптимальный вариант, если он считает что запретить надо некий символ, он это делает, т. к. считает нужным.
Если веб-разработчик делает оптимальный вариант для себя, а не для пользователя, это - плохой веб-разработчик. Вот расскажи мне, в чем для тебя оптимальный вариант в запрете кириллицы в логинах? Что это тебе дает? Чем мешает кириллица? А в чем смысл запрета спецсимволов? Почему я не могу в логине использовать символ "#", к примеру? Ты ведь обдуманно и взвешенно принимал решение об этих ограничениях? Это ведь было нужно, а не тупо ограничения ради ограничений, просто потому что ну вот потому что вот?
Для кириллицы надо писать целый класс в регулярке. Уж не представляю как выглядит китайский в регулярном выражении. А символ "-" приходится экранировать. Чем длиннее регулярка - тем больше можно в ней наделать ошибок. Вобщем, тут вопрос выгоды. Если радость пользователей от использования каких-либо символов оправдает трудозатраты, то почему бы и нет.
Для каждого тезиса в этой цитате у меня всего один вопрос: "ЗАЧЕМ?". Чтобы решить проблемы, которые сам себе напридумал? О какой регулярке речь? Проверяющей корректность логина? Я толкую о том, что ее вообще нужно выкинуть и не морочить голову ни себе, ни пользователям. У меня в проектах дохрена работы с текстом. В том числе с автогенерацией PHP и JS. Файлы на лету режутся, перебираются, в них ведется поиск, замены. И нигде нет ни одной регулярки. Единственное место, где у меня можно встретить регулярки - клиентская часть. Они нужны в паттернах полей ввода и, порой, бывают полезны в селекторах. Все. Больше нигде ни разу не пригодились. И это речь идет обо всем остальном, что есть окромя обработки логина, которая у меня упирается в то, что логин не должен быть пустым. Точка. Внимание вопрос - может просто не стоит усложнять себе жизнь?
Много таких "зачем" можно вспомнить. Зачем Microsoft? Зачем HDD? Зачем файлы? Зачем двоичная логика? Это все дико усложняет жизнь, как пользователям, так и программистам. Я, впринципе, согласен. Только пусть за пожелания пользователей будут отвечать маркетологи и иже с ними.
Не разводи демагогию, я тебя прошу. На вопрос, "Зачем ограничивать набор символов в логине" ответ так и не был дан пока что.
Причины: 1. Нечитабельные логины 2. Ненормативная лексика 3. Подделка логина (визуальная) 4. Ограничения по шрифтам
1) Такие вещи должны регулироваться правилами ресурса, а не техническими ограничениями. И на латинице можно сделать логин "gHDGSKJghdJHHDFSdsaDS". Читабельнее некуда. 2) Серьезно? Вот те ненормативка на латинице: Huj, pizda, Djigurda. Не говоря о том, что в английском свои ругательства есть. 3) И такие вещи тоже должны регулироваться на уровне правил ресурса, а не на уровне технических ограничений. 4) Лол, чо. То есть, ограничение по шрифтам у тебя логины накладывают, а не контент сайта? К.О. намекает - если у меня сайт русскоязычный, то шрифты будут поддерживать кириллицу. В том числе и в логинах. Тот же К.О. подсказывает, что если сайт не поддерживает какой-то набор символов, пользователь поймет это еще при наборе оных - они будут отображаться как квадратики. Тот же К.О. сообщает, что, если в шрифтах есть ограниченная поддержка экзотического символьного набора, и он будет отображаться не так красиво, как остальные слова на сайте, где данные символы встречаться будут с вероятностью 0%, всем будет плевать, никто и не заметит отклонения, потому что хрен его знает, как в таком шрифте должен выглядеть, например, иврит.
А для чего тогда все эти правила на форуме, баны и другие ограничения, если это не причины? Давайте и JS в сообщения разрешать вставлять, раз пользователю так хочется. Вот например: Это что? Ограничения или желание показать власть? Может просто есть у всех желание держать пользователей в рамках? Сами себе противоречите Мат в английской транскрипции не так обидно звучит, как вот это оскорбление. И кому мне жаловаться если модер не знает, что логин может быть одним шрифтом, а контент другим?
Повторяю, не разводи демагогию. Эти вот "не можешь атаковать тезис - атакуй оппонента", "доведение до абсурда" и тд. на меня не действуют. Оставь это для кого-нибудь другого. Либо начнешь ловить демагогические страйки. Ответа, обоснованного ответа я так и не получил. Хотя нет, @igordata выше его дал. Соль в том, что программист должен выставлять технические ограничения только в одном случае - если это технически обосновано. Дизайнеропроблемы и маты в никах - не техническое обоснование, а вкусовщина. Вот, к примеру, экранирование апострофов во входящих данных - техническая причина, так как это помогает предотвратить инъекцию. Конвертация исходящих символов в html-сущности - тоже техническая причина. Помогает избежать поломку страницы, если где-то в контенте встретится угловая скобочка. Не говоря уже о вредоносном коде. Эти ограничения имеют лишь одну причину - защитить систему от поломки. Матерные ники не ломают систему.
Первый демагогический страйк. --- Добавлено --- Блин, неужели так сложно откинуть это вот упрямое контрпродуктивное баранство, пораскинуть мозгами и самостоятельно дойти до того, что обсуждаемые ограничения - это бессмысленная глупая хрень? Принять свою неправоту - это не самоунижение и не оскорбление. Я тоже порой заблуждаюсь. Когда мне доходчиво, с аргументами, объясняют, почему я не прав - я всегда соглашаюсь. Это помогает расти над собой. Это значит, что одним заблуждением меньше. Это ж благо. Глупо переть против логики и здравого смысла.
тут не любят диалоги в стиле восьмилетних детей. Тезисы должны подкрепляться аргументами. а тебе еще стоит освежить в памяти значение слова "причина"