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>";
//Формируем ссылки для навигации по страницам. В листинге, приведенном выше, кроме названий таблиц выводятся и действия, которые с ними можно производить. Все они будут описаны в дальнейшем. 1хБет – один из популярнейших букмекеров на территории РФ и Европы. Оператор регулярно обновляет акционные предложения для только пришедших и постоянных пользователей, предоставляя возможность заработать на беттинге. Узнайте, как воспользоваться акционным предложением, получив рабочий промокод 1xbet на сегодня бесплатно для повышенного бонуса 6500 рублей от букмекерской конторы. Согласно условиям клиенты, впервые зарегистрировавшиеся на площадке, могут получить промокод на бесплатную ставку. Коды выдаются непосредственно оператором. При создании аккаунта беттер предоставляет номер телефона.
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.0464289