Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
Система регистрации пользователей
Cхема регистрации (новых) пользователей:
![]()
![]()
Покупатель
Регистрационная форма может выглядеть, например, так:

Напомним, что до отправки данных на сервер нужно проверить их на стороне клиента.
Приведем здесь фрагмент серверного сценария, «регистрирующего» пользователя:
<% // Фрагмент сценария РЕГИСТРАЦИИ // Предполагается, что уже выполнено // назначение языка сценария // запрет кэширования // соединение с источником данных // Прочитаем все переменные из формы var fam=””+Request.Form("fam"); var im=””+Request. Form("im"); var addr=””+Request. Form("addr"); var mail=””+Request. Form("mail"); var login=””+Request. Form("login"); var pass=””+Request. Form("pass"); var pass2=””+Request. Form("pass2"); // “Заготовим” объект Recordset var MyRec=Server. CreateObject("ADODB. Recordset"); // “Заготовим” строку для сообщения message="”; // Создадим “индикатор” успешности регистрации success=false; // Проверим, не пустые ли поля if(fam!="" && im!="" && addr!="" && mail!="" && login!="" && pass!="" && pass2!="") { // Проверим, совпадают ли пароли if(!(pass==pass2)) { // сформируем сообщение о несовпадении паролей message="<tr><td bgcolor='#ff9999'>”; message+="<b>Поля пароля и повтора пароля не совпадают!!!</b></td></tr>"; }//end_if(!(pass==pass2)) else // поля заполнены, пароли совпадают { // проверим, нет ли такого логина в БД var strSQL="SELECT id_cust FROM customers WHERE login='"+login+"'"; MyRec. Open(strSQL, MyCon); if(!MyRec.EOF) // в БД уже есть такой логин { message="<tr><td bgcolor='#ff9999'><b>Такой логин уже существует!!! Выберите другой логин</b></td></tr>"; }//end_ if(!MyRec. EOF) else // логина нет в БД { // подготовим запрос на запись данных strSQL1="INSERT INTO customers (fam, im, addr, mail, login, pass) VALUES('"+fam+"','"+im+"','"+addr+"','"+mail+"','"+ login+"','"+pass+"')"; // запишем данные в БД MyCon.Execute(strSQL1); // сформируем сообщение об успешной регистрации message=" <tr><td bgcolor='#66cc66' align='center'> <b>Вы успешно зарегистрированы</b></td></tr> "; success=true; } //end__else // логина нет в БД } //end_else // поля заполнены, пароли совпадают } //end_if(поля не пустые) else // есть пустые поля { // сформируем сообщение о наличии пустых полей message="<tr><td bgcolor='#ff9999'>”; message+="<b>Не все поля заполнены!!!</b></td></tr>"; }//end_ else // есть пустые поля // Выведем сообщение Response.write(message); // Как завершилась регистрация? if(!success) // регистрация завершилась неуспешно { // снова сформируем форму с заполненными полями %> <!-- #include file="forma.asp" --> <% }//end_if(!success) // регистрация завершилась неуспешно |
Сценарий, создающий форму с заполненными полями (лучше оформить его в виде отдельного файла) будет выглядеть так:
<form action=”asp-сценарий” method=post name=”anketa”> <tr><td> <table border="0" width="100%" align="right" > <tr> <td>Фамилия:</td> <td><input type=text name=fam value="<%=fam %>"></td> </tr> <tr> <td>Имя:</td> <td><input type=text name=im value="<%=im%>"></td> </tr> <tr> <td>Адрес:</td> <td><input type=text name=addr value="<%=addr%>"></td> </tr> <tr> <td>E-mail: </td> <td><input type=text name=mail value="<%=mail%>"></td> </tr> <tr> <td>Пароль: </td> <td><input type=password name=pass value=”<%=pass")%>”></td> </tr> <tr> <td>Повтор пароля: </td> <td><input type=password name=pass2 value=”<%=pass2%>”></td> </tr> <tr> <td colspan=2 align=center><input type=button value="Отослать" onclick=”proverka();”> <!---Здесь proverka – это клиентская функция ----> </td> </tr> </table> </form> <script src=”js/proverka. js”></script> |
Часто форму и сценарий регистрации помещают в один документ, т. е. значением атрибута action является адрес того же файла, в котором находится (или в который включается) форма. В этом случае вводят еще одно (hidden) поле (пусть, например, оно называется type). При нажатии на кнопку клиентская функция помещает в него значение 1. Понятно, что в сценарии нужно предусмотреть чтение и анализ значения этого поля, т. е. весь рассмотренный выше код выполнять лишь в случае, если type=1. В противном случае формируем сообщение – просьбу заполнить поля формы и внедряем в документ форму. При этом поскольку значения всех переменных представляют собой пустые строки, все поля формы также будут пустыми.
Замечание 1. Начинающие разработчики серверных приложений иногда спрашивают: "Почему нельзя обойтись одним только паролем?".
Ясно, что пароль должен быть уникален, т. е. позволять идентифицировать пользователя. Предположим, что при регистрации пользователь придумал себе пароль, который уже есть в базе данных. Ясно, что мы не можем сообщить ему "Такой пароль уже есть - придумайте новый", поскольку тем самым мы открыли бы ему доступ к данным того пользователя, который прежде уже зарегистрировался с этим паролем.
Решить проблему позволяет использование login'а. Даже если придуманный пользователем login уже есть в базе данных, мы можем сообщить об этом пользователю и попросить его придумать новый login. Мы ничем не рискуем - ведь без пароля, зная только login, он все равно не получит доступа к данным. Когда же мы добьемся уникальности login'а, пароль, придуманный пользователем может быть любым - доступ к данным откроется по ключу "пароль - login".
Замечание 2. Иногда в системах регистрации данные заносятся в серверную базу в следующем порядке:
- сначала заносится вся персональная информация
- из БД извлекается значение id пользователя
- проверяется наличие в БД логина, пароля
- в случае отсутствия таковых редактируется строка для данного id
- в случае наличия логина и/или пароля в базе данных пользователю предлагается форма для ввода логина, пароля.
Этой схема имеет следующий недостаток. Может оказаться, что пользователь не доведет регистрацию до конца, оставив поля логина и пароля незаполненными. В то же время, в таблице серверной базы данных появится «ничья» строка.





