Работа с MySQL. Регистрация нового пользователя в БД.


Прислал: OlegTr [ 12.10.2001 @ 11:16 ]
Раздел:: [ Статьи по PHP ]


На этой странице я начинаю цикл статей,посвященных работе с 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>&nbsp;</td></tr>
<TR><TD><b>Login:</b><TD><INPUT TYPE="text" NAME="login" SIZE="20" maxlength="15" >&nbsp;&nbsp;
<TR><TD><b>Password:</b><TD><INPUT TYPE="password" NAME="pass" SIZE="20"
onFocus="is_ValidLogin (this.form.login.value)";return true>&nbsp;&nbsp;
<TR><TD><b>Verify password:</b><TD><INPUT TYPE="password" NAME="verpass" SIZE="20"
onFocus="is_ValidPass (this.form.pass.value)";return true>&nbsp;&nbsp;
<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>&nbsp;</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,
т.к. скрипт выполняется на нем же. 
Это удобно, т.к. не нужно вводить множество информации о пользователях если доступ к
БД происходит по сети и из различных подсетей,
не говоря уже о доступе через интернет.
$query="update db set host='localhost' where user='$login'"; $result=mysql_query ($query) or die (error ($script,$login,$pass,$db)); //И, наконец, выводим информацию на страницу. print_header (); ?> <p align=right>| <a href="<?php echo $script ?>">Enter to database</a> | <p><h2>Hi,<font size=4 color="0000ff"><?php echo $login ?></font>!</h2> <p>You were successfuly registered in database. <p>Your login:<?php echo $login ?> <br>Password:<?php echo $pass ?> <br>Database:<?php echo $login ?> <?php }

Следует еще привести листинг функций 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
color="aaaaaa">Y</font><font color="959595">S</font><font
color="7f7f7f">Q</font><font color="aaaaaa">L</font><font
color="bfbfbf">A</font><font color="aaaaaa">D</font><font
color="959595">M</font><font color="7f7f7f">I</font><font
color="aaaaaa">N</font> </font> <?php } //Функция error () используется для вывода ошибки соединения с БД. function error ($script,$login,$pass,$db) { ?> <h4>Error!</h4> <p><b><font size=3 color="0000ff">Message from MySQL received:</font><br><font color="ff0000"> <?php echo mysql_error (); ?></font> <p><center><?php echo home ($login,$pass,$db,$script) ?></center> <?php }

Вот и все. Регистрация завершена. В следующей статье будет рассмотрен вход в базу данных и отображение информации о таблицах.


Сайт: Ресурсы для web-программистов. ( http://webscript.ru///webscript.bip.ru )    Written by Oleg Tryvol( mailto:olegtr@imail.ru )   2001