Работа с MySQL. Вход в БД и отображение информации о таблицах.В этой статье обсуждается процесс входа в БД после создания пользовательского аккаунта и отображения ее содержимого, т.е. таблиц, если таковые существуют. Итак,база данных создана, попытаемся войти в нее.Сразу оговорюсь-в моем случае в БД существует 3 типа пользователей:
В зависимости от типа пользователя и вход в БД будет осуществляться по-разному. Генерируем форму для входа. 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=" Если пользователь зарегистрирован в БД, он вводит свой логин и пароль и попадает в свою БД. Если нет-щелкает на 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) { //Если пользователь переходит сюда с//Вид выводимой страницы также будет разным для 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> <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="Следует отметить, что для обычного пользователя выборка списка БД производится из 3-таблиц: db,tables_priv и columns_priv. Это сделано потому, что пользователю может быть предоставлен доступ к какой-нибудь одной таблице в другой БД, или даже к одной колонке какой-либо таблицы, а эта информация не показывается в таблице db. //Дальше выводим список таблиц БД. $list=mysql_list_tables($db); $count=mysql_num_rows($list); //Устанавливаем количество выводимых записей равным 40//Формируем ссылки для навигации по страницам. В листинге, приведенном выше, кроме названий таблиц выводятся и действия, которые с ними можно производить. Все они будут описаны в дальнейшем.
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> <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
|