WebScript.Ru
C:\   главная  ::   о сайте  ::  каталог скриптов  ::  гнездо  ::  форум  ::   авторам  :: Новостройки ::   ХОСТИНГ  ::

|| разделы::
|| поиск по сайту::

|| реклама::
|| новости почтой::
Рассылки Subscribe.Ru ::



Новости сайта WebScript.Ru
Популярные статьи

Hot 5 Stories

|| рекомендуем::




Работа с MySQL. Вход в БД и отображение информации о таблицах.


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


В этой статье обсуждается процесс входа в БД после создания пользовательского аккаунта и отображения ее содержимого, т.е. таблиц, если таковые существуют.

Итак,база данных создана, попытаемся войти в нее.Сразу оговорюсь-в моем случае в БД существует 3 типа пользователей:

  • Root-администратор БД, имеющий абсолютно все привилегии во всех БД.
  • Обычные пользователи, которые имеют привилегии только в своей БД, хотя root может дополнительно предоставить им привилегии в других БД.
  • И третий пользователь-это guest. Поскольку к этому скрипту открыт публичный доступ в ознакомительных целях пользователю guest предоставленны права на вход в БД test. Там он может проверить возможности скрипта.

В зависимости от типа пользователя и вход в БД будет осуществляться по-разному. Генерируем форму для входа.


print_header ();
?>
<p><h2>Login.</h2>
<p align=center><b><font size=2 color="000080">If you are registered user,enter your user name
and password.<br>
If you aren't registered and want to see demo version,please click</font>
<font size=2 color="0000ff">Guest</font> and <font size=2 color="0000ff">Enter</font></b>
<form action="
<?php echo $script ?>" name="form" method="POST"> <table align=center> <tr><td>&nbsp; <tr><td><b>
Login:</b><td><input type="text" name="login" size=20> <tr><td><b>Password:</b><td><input type="password" name="pass" size=20> <tr><td>&nbsp;&nbsp;<td><
input type="radio" name="status" value="reg" checked>Registered user <tr><td>&nbsp;&nbsp;<td>
<input type="radio" name="status" value="guest" onClick="fill()">Guest <tr><td colspan=2><input type="
hidden" name="action" value="enter"> <tr><td colspan=2><input type="
hidden" name="verify" value="1"> <tr><td colspan=2 align=center>
<input type="submit" value="Enter">&nbsp;&nbsp;
<input type="reset" value="Clear"> <tr><td>&nbsp;</table>

Если пользователь зарегистрирован в БД, он вводит свой логин и пароль и попадает в свою БД. Если нет-щелкает на Guest, и попадает в БД test. Пароль для гостя вводится автоматически.

Для соединения с БД используется функция connect (), т.к.соединяться придется не раз.


function connect ($hostname,$login,$pass,$db) {
mysql_connect($hostname,$login,$pass) OR die("Incorrect username or password");
mysql_select_db($db) OR die ("Access denied !");
}

Проверяем имя пользователя.


if ($verify) {
//Если пользователь переходит сюда с 
>другой страницы (это будет показано позже).
if ($change) { connect ($hostname,$login,$pass,$db); print_header (); } //Нормальный вход. Проверяем статус пользователя. else { $hostname="localhost"; if ($status=="reg") { //Если это пользователь БД,
>то root попадает в БД mysql, а обычный пользователь-в свою БД.
if ($login=="root") { $db="mysql"; } else { $db=$login; } } //Если это гость, его БД-test. elseif ($status=="guest") { $db="test"; $login="guest"; $pass="111"; } //После этих проверок соединяемся с БД. mysql_connect($hostname,$login,$pass) OR die("Incorrect username or password"); mysql_select_db($db) OR die ("Access denied !"); print_header (); } ?> <h2> Database:<?php echo $db ?></h2> <?php
//Вид выводимой страницы также будет разным для root и обычного пользователя. Для root показывается список всех БД, существующих на сервере, и он может переходить в любую из них, выбрав из списка. Для обычного пользователя показывается только его БД, а если ему предоставлены права на вход в другие БД, то и список этих БД.
Если это root.
if ($login=="root") {

//Cписок баз данных и подсчет их количества.
$dbs=mysql_list_dbs ();
$num=mysql_num_rows ($dbs);

//Если количество БД больше 1.
if ($num>1) {
?>
<form action="<?php echo $script ?>" method="POST">
<input type="hidden" name="action" value="enter">
<input type="hidden" name="hostname" value="<?php echo $hostname ?>">
<input type="hidden" name="login" value="
<?php echo $login ?>"> <input type="hidden" name="pass" value="
<?php echo $pass ?>"> <input type="hidden" name="verify" value="1"> <p align=right><b>Databases:</b>&nbsp;<select name="db"><option></option> <?php for ($i=0;$i<$num;$i++) { echo "<option>".mysql_db_name ($dbs,$i)."</option>"; } echo "</select>"; ?> <input type="submit" name="change" value="Go"></form><br> <table><tr><td> | <a href="<?php echo $script ?>?action=enter&ac=change_pswd&login=
<?php echo $login ?>& pass=<?php echo $pass ?> &hostname=<?php echo $hostname ?>&db=<?php echo $db ?>">Change password</a> | <a href="<?php echo $script ?>?action=enter&
>ac=drop_db&login=
<?php echo $login ?>& pass=<?php echo $pass ?> &hostname=<?php echo $hostname ?>&db=mysql">
>Drop database</a> | <a href="<?php echo $script ?>"> Exit</a> |</table> <?php } }
Как видим, root может изменять пароли всем пользователям, удалять базы данных, в то время как обычный пользователь не может удалять БД, и может изменить только свой пароль.
else {
mysql_connect("localhost","root",$rootpass) OR die("Incorrect username or password");
mysql_select_db("mysql") OR die ("Access denied !");

$query="select db from db where user='$login'";
$result=mysql_query ($query) or die (error ($script,$login,$pass,$db));
$num=mysql_num_rows ($result);
if ($num>=1) {
while ($row=mysql_fetch_array ($result)) {
$dbs[]=$row["db"];
}
}

$query="select db from tables_priv where user='$login'";
$result=mysql_query ($query) or die (error ($script,$login,$pass,$db));
$num=mysql_num_rows ($result);
if ($num>=1) {
while ($row=mysql_fetch_array ($result)) {
$dbs[]=$row["db"];
}
}

$query="select db from columns_priv where user='$login'";
$result=mysql_query ($query) or die (error ($script,$login,$pass,$db));
$num=mysql_num_rows ($result);
if ($num>=1) {
while ($row=mysql_fetch_array ($result)) {
$dbs[]=$row["db"];
}
}
?>
<form action="<?php echo $script ?>" method="POST">
<input type="hidden" name="action" value="enter">
<input type="hidden" name="hostname" value="<?php echo $hostname ?>">
<input type="hidden" name="login" value="
<?php echo $login ?>"> <input type="hidden" name="pass" value="
<?php echo $pass ?>"> <input type="hidden" name="verify" value="1"> <input type="hidden" name="change" value="1"> <p align=right><b>Databases:</b>&nbsp;<select name="db"><option></option> <?php for ($i=0;$i<count ($dbs);$i++) { echo "<option>".$dbs[$i]."</option>"; } ?> <input type="submit" value="Go"></form> <p align=right>| <a href="<?php echo $script ?>?action=enter&ac=change_pswd&login= <?php echo $login ?>&pass=<?php echo $pass ?> &hostname=<?php echo $hostname ?>&db=<?php echo $db ?>">Change password</a> | <a href="<?php echo $script ?>">Exit</a> | <?php }
Следует отметить, что для обычного пользователя выборка списка БД производится из 3-таблиц: db,tables_priv и columns_priv. Это сделано потому, что пользователю может быть предоставлен доступ к какой-нибудь одной таблице в другой БД, или даже к одной колонке какой-либо таблицы, а эта информация не показывается в таблице db.
//Дальше выводим список таблиц БД.
$list=mysql_list_tables($db);
$count=mysql_num_rows($list);

//Устанавливаем количество выводимых записей равным 40
> и вводим переменные для навигации по страницам.
if ($page=="") { $page=0; } $limit=40; $pages=ceil($count/$limit); $begin=$page*$limit; $next=$begin+$limit; if ($next>$count) { $next=$begin+($count-$begin); } //Если БД не пуста,выводим список таблиц. if ($count>0) { ?> <p><table border=1 cellspacing=0 bgcolor="e6e8fa" bordercolor="000000" width=90% align=center><tr bgcolor="bbbbbb"> <th>Table</th><th colspan=6>Actions</th><th>Records</th> <?php for ($i=$begin;$i<$next;$i++) { $tb_names[$i]=mysql_tablename($list,$i); echo "<tr><td><font color='000080'>".$tb_names[$i]."</font></td>"; ?> <td><a href="<?php echo $script ?>?action=do_table&do=browse&tb_name= <?php echo $tb_names[$i] ?>&db=<?php echo $db ?>&hostname=<?php echo $hostname ?>& login=<?php echo $login ?>&pass=<?php echo $pass ?>">Browse</a></td> <td><a href="<?php echo $script ?>?action=do_table&do=select&tb_name= <?php echo $tb_names[$i] ?>&db=<?php echo $db ?>&hostname=<?php echo $hostname ?>& login=<?php echo $login ?>&pass=<?php echo $pass ?>">Select</a></td> <td><a href="<?php echo $script ?>?action=do_table&do=insert&tb_name= <?php echo $tb_names[$i] ?>&db=<?php echo $db ?>&hostname=<?php echo $hostname ?>& login=<?php echo $login ?>&pass=<?php echo $pass ?>">Insert</a></td> <td><a href="<?php echo $script ?>?action=do_table&do=tbl_properties&tb_name= <?php echo $tb_names[$i] ?>&db=<?php echo $db ?>&hostname=<?php echo $hostname ?>& login=<?php echo $login ?>&pass=<?php echo $pass ?>">Properties</a></td> <td><a href="<?php echo $script ?>?action=do_table&do=empty&tb_name= <?php echo $tb_names[$i] ?>&db=<?php echo $db ?>&hostname=<?php echo $hostname ?>& login=<?php echo $login ?>&pass=<?php echo $pass ?>">Empty table</a></td> <td><a href="<?php echo $script ?>?action=do_table&do=drop&tb_name= <?php echo $tb_names[$i] ?>&db=<?php echo $db ?>&hostname=<?php echo $hostname ?>& login=<?php echo $login ?>&pass=<?php echo $pass ?>">Drop table</a></td> <td align=center><?php echo num_records ($db,$tb_names[$i]) ?></td></tr> <?php } echo "</table>";
//Формируем ссылки для навигации по страницам. В листинге, приведенном выше, кроме названий таблиц выводятся и действия, которые с ними можно производить. Все они будут описаны в дальнейшем.
if ($count>$limit) {
echo "<p align=right>";
for ($i=0;$i<$pages;$i++) {
$a=$i+1;
?>
<font color="0000ff">|</font><a href="<?php echo $script ?>?action=enter&
login=<?php echo $login ?>&pass=<?php echo $pass ?>
&db=<?php echo $db ?>&verify=1&page=<?php echo $i ?>"><?php echo $a ?></a>
<?php
}
}
}

//Если же БД пуста, не выводим ничего.
else {
echo "<h4>No tables found.</h4>";
}
Завершает страницу вывода еще несколько окон форм, позволяющих выполнить SQL-запрос, вставить данные из текстового файла и создать новую таблицу. Это будет описано в следующих статьях.
?>
<h4>Commit SQL-query</h4>
<p><center><form action="<?php echo $script ?>" method="POST">
<input type="hidden" name="action" value="do_table">
<input type="hidden" name="do" value="qsql">
<input type="hidden" name="hostname" value="<?php echo $hostname ?>">
<input type="hidden" name="login" value="<?php echo $login ?>">
<input type="hidden" name="pass" value="<?php echo $pass ?>">
<input type="hidden" name="db" value="<?php echo $db ?>">
<textarea name="sql_query" rows=5 cols=25 wrap="virtual"></textarea>
<p><input type="submit" value="Commit">
</form></center>

<h4>Insert data from text file.</h4>
<p><center><form action="<?php echo $script ?>" method="POST" enctype="multipart/form-data">
<input type="hidden" name="action" value="load">
<input type="hidden" name="hostname" value="<?php echo $hostname ?>">
<input type="hidden" name="login" value="<?php echo $login ?>">
<input type="hidden" name="pass" value="<?php echo $pass ?>">
<input type="hidden" name="db" value="<?php echo $db ?>">
<b>Choose text file:</b>&nbsp;<input type="file" name="file">
<p><input type="submit" value="Load">
</form></center>

<h4>Create new table.</h4>
<table align=center>
<tr><td colspan=2><form action="<?php echo $script ?>" method="GET">
<tr><td colspan=2><input type="hidden" name="action" value="do_table">
<tr><td colspan=2><input type="hidden" name="do" value="create_new">
<tr><td colspan=2><input type="hidden" name="hostname" value="<?php echo $hostname ?>">
<tr><td colspan=2><input type="hidden" name="login" value="<?php echo $login ?>">
<tr><td colspan=2><input type="hidden" name="pass" value="<?php echo $pass ?>">
<tr><td colspan=2><input type="hidden" name="db" value="<?php echo $db ?>">
<tr><td><b>Table name:</b><td><input type="text" name="new_tbl" size="20">
<tr><td><b>Number of columns:<td><input type="text" name="col_num" size="3">
<tr><td colspan=2 align=center><input type="submit" value="Create"></form></table>
<?php

Все, задача выполнена. Мы вошли в БД, вывели информацию о таблицах. В следующей статье будет рассмотрено, как изменить пароль пользователя.


Сайт: Ресурсы для web-программистов.    Written by Oleg Tryvol   2001
Повторная публикация 16.10.2001 @ 12:09



 :::::  systemRoot пишет 20.05.2003 @ 18:15 
Прекрасная тема коротко и наглядно!!!
Побольше бы таких тем!!!!
Имя:
Email:
URL

Введите сумму двух чисел девять и одинн (девять+одинн=?)
Запомнить мою информацию

* Html запрещен* Ваш E-mail опубликован не будет.

Copyright © 2000-2001 WebScript.Ru nas@webscript.ru
Design © 2001 by Parallax Design Studio (aka Spectator.ru)
Все торговые марки и авторские права на эту страницу принадлежат их соответствующим владельцам.
Сгенерировано за: 0.0134201