Работа с MySQL. Регистрация нового пользователя в БД.На этой странице я начинаю цикл статей,посвященных работе с MySQL с помощью PHP-скриптов. Статьи, представленные здесь, покажут, как добавить пользователя в БД, как изменить пароль, удалить БД, как производить различные действия с таблицами, как извлекать и модифицировать информацию в таблицах. Все статьи описывают фрагменты одного большого скрипта MySQL administrator ( http://webscript.ru///elektron.marport.net/mysqladmin.php3 ). Полный листинг скрипта можно скачать здесь ( http://webscript.ru///webscript.virtualave.net/upload/mysqladmin.zip ). По мере написания статьи будут добавляться. Работа с MySQL. Регистрация нового пользователя в БД.Рассмотрим, как добавить пользовательский аккаунт, используя PHP. Пользователь регистрируется в БД, для него создается база данных, совпадающая с его логином и он получает на нее все привилегии. Никто, кроме него (и администратора) не имеет доступа к этой базе. Итак,создадим форму для регистрации. <?php $script="register.php"; print_header2 (); ?> <p align=right>| <a href="<?php echo $script ?>">Enter to database</a> | <p><h2 align=center><font color="ff0000">Registration.</font></h2> <p><font face="serif" size=2> Please,fill in the form below. <p>You may use only english chars in your name,and name's length should be not less than 3 and not more than 15 characters. <br>Remember:all form fields are case sensitive.It means the names <font face="arial" size=2 color="0000ff">name</font> and <font face="arial" size=2 color="0000ff">Name</font> are different. <p>Password's length should be not less than 6 characters.<br> Don't forget to enter your e-mail address,you may need it if you'll forget your password. <p><FORM ACTION="<?php echo $script ?>" METHOD="POST" name="reg"> <p align=right><a href="<?php echo $script ?>">Home</a> <center><TABLE BGCOLOR="bfbfbf"> <tr><td colspan=2> </td></tr> <TR><TD><b>Login:</b><TD><INPUT TYPE="text" NAME="login" SIZE="20" maxlength="15" > <TR><TD><b>Password:</b><TD><INPUT TYPE="password" NAME="pass" SIZE="20" onFocus="is_ValidLogin (this.form.login.value)";return true> <TR><TD><b>Verify password:</b><TD><INPUT TYPE="password" NAME="verpass" SIZE="20" onFocus="is_ValidPass (this.form.pass.value)";return true> <tr><td colspan=2><input type="hidden" name="action" value="register"> <tr><td colspan=2><input type="hidden" name="script" value="<?php echo $script ?>"> <tr><td colspan=2><input type="hidden" name="submit" value="ok"> <TR><TD colspan=2><p><center><INPUT TYPE="submit" VALUE="Submit" onMouseOver="verPasswd (this.form.verpass.value)";return true></center> <tr><td colspan=2> </table> </form> Функция print_header2 (), использованная в первой строке, включает в себя заголовок страницы и Javascript, который проверяет правильность введенных данных. С этим все должно быть понятно. function print_header2 () { ?> <html><head><title>MySQL administrator</title> <script language="javascript"> <!-- function is_ValidLogin (entry1) { if (entry1.length==0 || entry1.length < 3) { alert ('You must enter login name not less than 3 characters!'); document.reg.login.focus (); } } function is_ValidPass (entry2) { if (entry2.length==0 || entry2.length < 6) { alert ('You must enter password not less than 6 characters!'); document.reg.pass.focus (); } } function verPasswd () { if (document.reg.verpass.value !=document.reg.pass.value || document.reg.verpass.value==0) { alert ("Error!This field must be the same as password field!"); document.reg.verpass.select (); document.reg.verpass.focus (); } } //--> </script> </head><style> A:link {font-family:arial;font-size:10pt;text-decoration:none;color:#000080;} A:hover {font-family:arial;font-size:10pt;text-decoration:none;color:red;}"; A:visited {font-family:arial;font-size:10pt;text-decoration:none;color:#808080;} BODY {background-color:#e6e8fa;font-family:arial;font-size:10pt;color:#333300;} TD {font-family:arial;font-size:10pt;color:#0000ff;} </style><body> <p align=right><font face="Impact" size=7> <font color="bfbfbf">F</font><font color="aaaaaa">O</font><font color="959595" >R</font><font color="7f7f7f">U</font><font color="aaaaaa">M</font> </font> <?php } Если вся информация введена правильно, то форма посылается обработчику. if ($action=="register") { if ($submit) { //Пытаемся соединиться с БД. mysql_connect("localhost","root","password") OR die("Incorrect username or password"); mysql_select_db("mysql") OR die ("Access denied !"); //Проверяем, не существует ли уже пользователь с таким именем. Если существует, выдаем ошибку. $query="select * from user where user='$login'"; $result=mysql_query ($query) or die (error ($script,$login,$pass,$db)); if (mysql_num_rows ($result)) { print_header (); ?> <h2>Error!</h2> <p>This name already exists in database. <p>Please,go back and choose another name. <p><center><a href="javascript:history.back()">Back</a></center> <?php } Следующая важная вещь, которую нужно сделать-проверить наличие в пользовательском вводе символа одинарной кавычки, т.к. это служебный символ и вносить в базу данных его недопустимо, это может быть чревато катастрофическими последствиями (например взломом БД), а также символа '%'. elseif (ereg ("%",$login) || ereg ("'",$login) || ereg ("%",$pass) || ereg ("'",$pass)) { print_header (); ?> <h2>Error!</h2> <p>Unallowed symbol in login name or password.You cannot use <b><font color="ff0000">%</font></b> or <b><font color="ff0000">'</font></b>. <p>Please,go back and choose another name. <p><center><a href="javascript:history.back()">Back</a></center> <?php } После выполнения всех этих манипуляций можно вносить информацию о пользователе в базу данных. Это выполняется в системной БД mysql, к которой имеет доступ только root. Х else { //Вставляем данные в таблицу user. $query="insert into user (host,user,password) values ('localhost','$login',password ('$pass'))"; $result=mysql_query ($query) or die (error ($script,$login,$pass,$db)); //Создаем базу данных с именем, совпадающим с логином пользователя. $query="create database $login"; $result=mysql_query ($query) or die (error ($script,$login,$pass,$db)); //Предоставляем пользователю все привилегии на эту БД. Естественно,кроме grant. $query="grant all privileges on $login.* to $login identified by '$pass'"; $result=mysql_query ($query) or die (error ($script,$login,$pass,$db)); //Теперь нужно удалить из таблицы записи, где host='%',если таковые имеются. $query="delete from user where host='%'"; $result=mysql_query ($query) or die (error ($script,$login,$pass,$db)); //И назнаначаем пользователю в качестве хоста localhost, т.к. скрипт выполняется на нем же. Следует еще привести листинг функций print_header () и error (). function print_header () { ?> <html><head><title>MySQL administrator</title> <script language="javascript"> <!-- function fill () { name="guest"; passwd="111"; document.form.login.value=name; document.form.pass.value=passwd; } //--> </script> </head><style> A:link {font-family:arial;font-size:10pt;text-decoration:none;color:#0000ff;} A:hover {font-family:arial;font-size:10pt;text-decoration:none;color:red;}"; A:visited {font-family:arial;font-size:10pt;text-decoration:underline;color:#000080;} BODY {background-color:#f6f8fa;font-family:arial;font-size:10pt;color:#333300;} TD {font-family:arial;font-size:10pt;color:#333300;} TH {font-family:arial;font-size:10pt;color:#000080;font-weight:bold;} H2 {text-align:center;color:blue;} H4 {text-align:center;color:#000080;} H5 {text-align:center;color:#000080;} </style><body> <p align=right><font face="Impact" size=7> <font color="bfbfbf">M</font><font Вот и все. Регистрация завершена. В следующей статье будет рассмотрен вход в базу данных и отображение информации о таблицах. Сайт: Ресурсы для web-программистов. ( http://webscript.ru///webscript.bip.ru )
Written by Oleg Tryvol( mailto:olegtr@imail.ru ) 2001
|