MYSQL:Урок.Доступ к данным через web-интерфейс

Продолжение, предыдущий урок — SQL для начинающих

Доступ к данным через web-интерфейс


В данной главе мы научимся подключать базу данных MySQL к нашему сайту, а также узнаем, каким образом мы можем управлять данными через web -интерфейс (то есть через браузер).

На данный момент у вас должна быть создана база данных «school», включающая таблицу «user». Таблица должна содержать пять полей:

id_user (счетчик)
    user_name (текст)
    user_login (текст)
    user_password (текст)
    user_e-mail (текст)
    user_info (текст большого объема)


В ходе занятия мы создадим php -файла, который назовем user.php. Он должен иметь следующую структуру:


  1. код для подключение к базе данных;
  2. код для удаления записи в базе данных (почему код для удаление находится до вывода мы обсудим позже);
  3. форма для ввода значений в базу данных;
  4. код для добавления записи в базе данных;
  5. код для вывода значений на экран;

Подключение базы данных


Для того, чтобы добавлять информацию в базу данных необходимо вначале страницы (например, после тега добавить следующие строчки php -кода:
<?      
   $db = mysql_connect("localhost", "root");
   mysql_select_db("school", $db); 
?>


Первая строка с помощью функции mysql _ connect () создает объектную переменную $db. Функция имеет два параметра имя «хоста» где располагается база данных, а второй имя пользователя имеющего право на соединение с базой ( root – это пользователь создаваемый системой и имеющий максимальные права). Во второй строке происходит подключение к конкретной базе данных.

Приведенные строчки будут корректно работать на локальном компьютере, если у вас установлен Denver, но при попытке перенести ваш сервис на удаленный сервер произойдет ошибка, ведь там база будет располагаться в другом месте, права пользователя также настраивает администратор и он вам не даст прав администратора, значит, эти две строки придется менять. Причем менять во всех php -файлах, использующих подключение к базе данных. Имеет смысл вынести эти четыре строчки в отдельный файл, назвать его connect.php а в основном php -файле сделать ссылку:

<? include ("connect.php");  ?>


Это не ошибка, для файла хранящего подключение к базе данных лучше использовать расширение php. Все дело в том, что если вы используете расширение .inc, браузер будет воспринимать его как текстовый файл и если злоумышленник наберет в строке адреса connect.inc он получит имя базы данных и пароли к ней. Содержимое php — файла, будет скрыто, сервер в ответ на запрос сгенерирует пустую html — страницу.

Создание формы для ввода данных


Для того, чтобы мы могли заполнять данные необходимо создать форму.
<H2>Персональная информация:</H2> 
<code><form action="user.php" method="get">    
<p>имя: <input name="name" size="50" type="text"></p>    
<p>логин: <input name="login" size="50" type="text"></p>    
<p>пароль: <input name="password" size="50" type="password"></p>    
<p>e-mail: <input name="e_mail" size="50" type="text"></p>    
<p>информация: <textarea name="info" rows="4" cols="40"></textarea></p>    
<p><input name="add" type="submit" value="добавить"><input name="b2" type="reset" value="очистить"></p>   
</form>


Как видно из кода, данные вводятся в пять полей и при нажатии на кнопку «добавить» переменные формы передаются в тот же самый файл user. php.

Добавление данных в таблицу

<?     
if (isset($_GET['add'])){         
$name = $_GET['name'];         
$login = $_GET['login'];         
$password = $_GET['password'];         
$e_mail = $_GET['name'];         
$info = $_GET['info'];          
$sql_add = "INSERT INTO users VALUES (null, '$name', '$login', '$password', '$e_mail', '$info')";         
mysql_query($sql_add);         
print("<p>Спасибо, вы зарегистрированы в базе данных</p>");     
}
?>


Переменная «add» будет передана в файл user.php вместе с другими переменными и если это произойдет, выполняется четыре действия:

  • Из формы будут извлечены все переменные (в приведенном фрагменте они передавались методом GET).
  • Создается строковая переменная $sql_add, содержащая sql-запрос. В нем вместо значений полей используются имена извлеченных переменных, в которых хранится имя пользователя, логин и т.д… Каждая переменная взята в апострофы.
  • С помощью функции mysql_query() выполняется sql-запрос. Аргументом этой функции является строка с запросом.
  • Печатается сообщение о добавлении нового пользователя.

Вывод данных из таблицы на экран


Передоложим, что мы хотим вывести на экран список зарегистрированных пользователей. При этом нам не нужно, выводить персональную информацию, логин, пароль, достаточно только имени и электронного адреса. Для вывода данных можно использовать следующий код (листинг 22).

<h2>Зарегистрированные пользователи:</h2> 
<?     
$sql_select  =  "SELECT id_user, user_name, user_email FROM user ORDER BY binary (lower(user_name))";     
$result  = mysql_query($sql_select);
$num = mysql_num_rows($result);     
print("<P>Всего пользователей: $num.</p>");
while($row = mysql_fetch_array($result)){ 
print("<p>$row[user_name] - ");
print("<a href=\"user.php?act=delete&id_user= $row[id_user] \">удалить</a>, ");
print("<a href=\"mailto:$row[user_email]\">написать письмо</a></p>");
} 
?>


Приведенный фрагмент самый сложный. Для более легкого восприятия мы разбили его на три части.

В первой части создается текстовая переменная $sql_select, в которой формируется sql-запрос на выборку данных с сортировкой по полю «user_name». Обратите внимание, в sql-запросе перечислены не все, а только три поля, которые нас интересуют в выборке. После функция mysql_query() выполняет этот запрос, и результат заносит в переменную $result. Можно представить себе, что в этой переменной хранится не одно значение, а таблица значений!


Схема извлечения данных из таблицы.

Во второй части с помощью функций mysql _ num _ rows () считается количество записей извлеченных из таблицы. Аргументом функции является переменная $result. Полученный результат выводится на экран.

В третьей части выбранные данные выводятся на экран. Для этого переменная $result разбивается на строки. Каждая строка содержит данные об одной записи таблицы. До тех пор пока такое разбиение возможно (используется цикл while) каждая срока с помощью функции mysql_fetch_array() разбивается на отдельные значения и каждое значение заносится в массив $row[] (рисунок 11).

Теперь мы можем выводить значения на экран. Обратите внимание, на два момента:

1. Для создания ссылки необходимо использовать тег
<a href="/…">…</ a>
. Но у символа кавычки внутри функции print () своя работа – ограничение текстовой строки, которую необходимо выводить на экран. Поэтому в приведенном листинге перед кавычками в теге
< a >
используется символ «обратный слеш». Он маскирует кавычки html -тега внутри текстовой строки.

2. Действия по удалению данных из таблицы находится в том же самом файле user.php. Поэтому вместе с адресом страницы в теге передается две переменных act (тип действия) и id_user (идентификатор удаляемого пользователя). Значение идентификатора берется из массива $row[id_user].

Удаление данных из таблицы


Код для удаления данных из таблицы необходимо расположить ДО кода вывода пользователей на экран. Дело в том, что когда человек нажмет ссылку «удалить», произойдет перезагрузка файла user. php и данные должны быть удалены из таблицы раньше, чем будет выполнен sql -запрос на выборку данных.

<?
   if ( isset($_GET['act']) ) {
   	$id_user = $_GET['id_user'];
      $sql_delete = "DELETE FROM user WHERE id_user= $id_user";
      mysql_query($sql_delete); 
  }
?>


Программный код выполняется в том случае, если в файл передается переменная $act. В приведенном коде формируется текстовая строка с sql -запросом. Далее этот запрос выполняется с помощью уже известной функции mysql_query().

Полученный программный код несовершенен. Перечислим главные недостатки:

  • Вы можете регистрировать одного и того же пользователя многократно, данный будут заноситься в таблицу, изменяя только поле id _ user .
  • Вы можете регистрировать пустых пользователей, ведь в программном коде нет проверки, а ввел ли человек обязательные поля.
  • Отсутствует возможность изменять введенные данные.

Все эти недостатки можно достаточно легко устранить, и это будет одним из практических заданий.

Практические задания:


  • Создайте php -файл, который может добавлять, удалять/изменять значения в базе данных «Клиенты».
  • Внесите изменения в php -код, чтобы программа проверяла, введено ли имя пользователя, его логин и только в этом случае вносила данные в таблицу.
  • (*) Создайте модифицированный php -файл, в котором исправленны исправлены перечисленные выше недостатки.

Вопросы для самоконтроля


  • Почему удобнее подключение к базе данных выводить в о внешний файл и подключать его с помощью функции include()?
  • Для чего при выводе данных используется цикл While?
  • Почему код на удаление данных нужно вставлять в начало страницы?
  • Какие новые функции вы узнали в этом уроке?

1 комментарий

Оставить комментарий

Комментировать при помощи:
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.