Работа с MySQL. Регистрация нового пользователя в БД.
На этой странице я начинаю цикл статей,посвященных работе с MySQL с помощью PHP-скриптов. Статьи, представленные здесь, покажут, как добавить пользователя в БД, как изменить пароль, удалить БД, как производить различные действия с таблицами, как извлекать и модифицировать информацию в таблицах.
Все статьи описывают фрагменты одного большого скрипта MySQL administrator.
Полный листинг скрипта можно скачать здесь.
По мере написания статьи будут добавляться.
Работа с 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 {
//
$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));
//
$query="grant all privileges on $login.* to $login identified by '$pass'";
$result=mysql_query ($query) or die (error ($script,$login,$pass,$db));
//
$query="delete from user where host='%'";
$result=mysql_query ($query) or die (error ($script,$login,$pass,$db));
//
$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
}
//
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-программистов.
Written by Oleg Tryvol 2001
Повторная публикация 15.10.2001 @ 01:51
|