Введение в PHP
Базы данных MySQL, язык запросов
Отображение данных
Модификация данных
Способы авторизации пользователя

26 мая 2004

Я работаю преподавателем в одной фирме, проводящей курсы по PHP. Может быть кому-нибудь пригодится написанная мной методичка. Буду рад прочитать ваши отзывы.

написать автору

3 Модификация данных.

 

Добавление записей.

 

Добавление записи в таблицу осуществляется с помощью запроса INSERT. Синтаксис запроса достаточно прост и был рассмотрен выше в теме Язык MySQL. Давайте рассмотрим применение этого запроса в программе. Сделаем это на примере страницы, позволяющей добавлять записи в таблицу товаров. Для ввода данных будем использовать поля формы (аналогично примеру с поиском товара по наименованию). Особенность будет заключаться в следующем: как мы знаем, для составления запроса необходимо будет заполнить все поля, в том числе и поле id_proizv с номером производителя. Но запоминать требуемое число и вводить его в форме ввода не удобно. Поэтому мы применим для этого список значений, который будем брать из таблицы производителей. Кроме того, будет использован метод передачи параметров POST.

 

Листинг 9 (page8.php)

 

 

1.      <?php

2.      include('connect.php');

3.      if (isset($_POST['submit']))

4.      {

5.      $query_str_tovar_insert="INSERT INTO tovar

  (tovar_name, tovar_info, tovar_price, id_proizv)

  VALUES ('".$_POST['tovar_name']."', '".$_POST['tovar_info']."',

  ".$_POST['tovar_price'].", ".$_POST['id_proizv'].")";

6.      mysql_query($query_str_tovar_insert,$connect);

7.      };

8.      $query_str_proizv="select * from  proizv";

9.      $query_proizv=mysql_query($query_str_proizv,$connect);

10.      $count_proizv=mysql_num_rows($query_proizv);

11.      ?>

12.      <html>

13.      <body>

14.      <form name="form1" method="post" action="">

15.      Название товара

16.      <input type="text" name="tovar_name">

17.      Цена товара

18.      <input type="text" name="tovar_price">

19.      Информация о товаре

20.      <textarea name="tovar_info"></textarea>

21.      Производитель

22.      <select name="id_proizv">

23.      <?php

24.      for ($i=1;$i<=$count_proizv;$i++)

25.      {

26.      $row_proizv=mysql_fetch_assoc($query_proizv);

27.      echo "<option value='".$row_proizv['id']."' >".$row_proizv['proizv_name']."</option>";

28.      };

29.      ?>

30.      </select>

31.      <input type="submit" name="submit" value="Отправить">

32.      </form>

33.      </body>

34.      </html>

 

Рассмотрим данный код:

Строки 3-7 условие для проверки того, была ли нажата кнопка SUBMIT. Заметьте, что используется метод POST. Если условие выполняется (была нажата кнопка SUBMIT), то создается строка запроса $query_str_tovar_insert, сначала указывается имя таблицы, затем в скобках, через запятую перечисляются поля. После служебного слова VALUE в скобках через запятую перечисляются значения, соответствующие перечисленным полям. Причем строковые значения полей tovar_name и tovar_info взяты в одинарные кавычки, а числовые значения tovar_price и id_proizv – нет. Строка 6 выполнение запроса.

Строки 14-32 форма, её атрибуты: method=”post” и action=”” означают, что после нажатия на кнопку браузер переходит на эту же страницу и для передачи параметров используется метод post. Форма имеет следующие поля данных: строковое поле tovar_name и tovar_price, текстовое поле tovar_info и список id_proizv. Остановимся на списке, он имеет следующий синтаксис:

<select name=”имя_списка” >

  <option value=”значение_элемента1” >название_элемента1</option>

  <option value=”значение_элемента2” >название_элемента2</option>

  <option value=”значение_элемента3” >название_элемента3</option>

  …………………

</select>

В нашем случае это список производителей и эго элементы берутся из таблицы proizv и имеют значение (value) id и название proizv_name. Элементы списка формируются при помощи цикла. При нажатии кнопки submit передается параметр с именем данного списка (в нашем случае id_proizv) и значением, равным значению выбранного в данный момент элемента. Если выбор элементов не осуществлялся то передается значение первого элемента списка.

 

Модификация записей

 

Модификация данных осуществляется при помощи запроса UPDATE, так же рассмотренного нами. Запрос достаточно прост, но при реализации в программном коде есть одна особенность. Для модификации данных необходимо выбрать одну или несколько записей, а для этого надо сделать страницу выбора на которой будут представлены все записи и мы сможем выбрав определенную запись перейти на страницу модификации информации. Похожий прием мы использовали в листинге 6 (page3.php) и в листинге 7 (page4.php). Там мы отображали список товаров на странице page3.php а детальную информацию на странице page4.php передавая при этом числовой параметр, равный id товара. При модификации записей мы тоже будем использовать id таблицы товаров, поскольку это самый удобный способ выбрать строго определенную запись. Кроме этого обратим внимание ещё на один момент. Как видно из предыдущего примера (добавление данных) поля для ввода данных были пустыми, а при модификации данных это будет не удобно, поскольку пользователь не сможет узнать что было в этом поле изначально. Поэтому возникает ещё одна задача – заполнить поля ввода начальными данными. Мы говорили о том, что у полей формы есть атрибут value, который содержит значение этого поля. Поскольку он необязателен, то часто не используется, но если в него вписать начальное значение записи, то поля при отображении браузера будут заполненными. Кроме того мы в предыдущем примере использовали список для выбора производителя, как же нам сделать так, чтобы был выбран начальный производитель? У элемента списка есть атрибут selected если он присутствует, то этот элемент будет отображаться «выбранным».

  <option value=”значение_элемента” selected >название_элемента</option>

Как мы узнаем в каком элементе списка устанавливать данный атрибут? Для этого нам придется сравнивать начальный id производителя с текущим id элемент.

 

 

 Листинг 10 (page10.php):

 

1.      <?php

2.      include('connect.php');

3.      if (isset($_POST['submit']))

4.      {

5.      $query_str_tovar_update="UPDATE tovar SET tovar_name='".$_POST['tovar_name']."',

tovar_info='".$_POST['tovar_info']."', tovar_price=".$_POST['tovar_price'].",

id_proizv=".$_POST['id_proizv']."

WHERE id=".$_POST['id'];

6.      mysql_query($query_str_tovar_update,$connect);

7.      };

8.       

9.      if (isset($_GET['tovar']))

10.      {$tovar=$_GET['tovar'];

11.      $query_str_tovar="select * from tovar WHERE id=".$tovar;

12.      $query_tovar=mysql_query($query_str_tovar,$connect);

13.      $row_tovar=mysql_fetch_assoc($query_tovar);

14.      $id=$tovar;

15.      $tovar_name=$row_tovar['tovar_name'];

16.      $tovar_price=$row_tovar['tovar_price'];

17.      $tovar_info=$row_tovar['tovar_info'];

18.      $id_proizv=$row_tovar['id_proizv'];

19.      }

20.      else

21.      {

22.      $id="";

23.      $tovar_name="";

24.      $tovar_price="";

25.      $tovar_info="";

26.      $id_proizv="";

27.      };

28.      $query_str_proizv="select * from  proizv";

29.      $query_proizv=mysql_query($query_str_proizv,$connect);

30.      $count_proizv=mysql_num_rows($query_proizv);

31.      ?>

32.      <html>

33.      <body>

34.      <a href="page9.php">Возврат к выбору товара</a><br>

35.      <form name="form1" method="post" action="">

36.      Название товара

37.      <input type="text" name="tovar_name" value="<?php echo $tovar_name; ?>" ><br>

38.      Цена товара

39.      <input type="text" name="tovar_price" value="<?php echo $tovar_price; ?>" ><br>

40.      Информация о товаре

41.      <textarea name="tovar_info"><?php echo $tovar_info; ?></textarea><br>

42.      Производитель

43.      <select name="id_proizv">

44.      <?php

45.      for ($i=1;$i<=$count_proizv;$i++)

46.      {$row_proizv=mysql_fetch_assoc($query_proizv);

47.      if ($id_proizv= =$row_proizv['id']) {$sel="SELECTED";} else {$sel="";};

48.      echo "<option value='".$row_proizv['id']."' ".$sel."> ".$row_proizv['proizv_name']."</option>";

49.      };

50.      ?>

51.      </select><br>

52.      <input name="id" type="hidden" value="<?php echo $id; ?>">

53.      <input type="submit" name="submit" value="Изменить">

54.      </form>

55.      </body>

56.      </html>

 

Переходим со страницы page9.php на страницу редактирования page10.php по ссылке : http://www.mycatalog.ru/page10.php?tovar=4

где tovarid товара, в данном случае он равен 4.  Проверяем условие существования переменной tovar строки 9-27. Если переменная существует, то выполняем запрос выбирающий из таблицы необходимый нам товар по его id (строки 11-13). Затем все данные об этом товаре мы помещаем в буферные переменные (строки 14-18). Если условие не выполняется (товар не выбран), то присваиваем буферным переменным значения пустых строк. Выполняем запрос (строки 28-30) выбирающий производителей для заполнения выпадающего списка (строки 43-51). Заполняем поля формы соответствующими значениями, присваивая атрибуту VALUE значение буферной переменной.

<input type="text" name="tovar_name" value="<?php echo $tovar_name; ?>" >

Заполняем список производителей (строки 43-51) как в предыдущем примере. Но в этом случае имеется одна особенность: нам необходимо сделать так, чтобы при отображении списка был выбран соответствующий товару производитель. Как говорилось выше, предварительный выбор элемента списка осуществляется присвоением элементу атрибута SELECTED. Для этого при формировании списка при помощи цикла (строки 45-49), перед формированием текущего элемента, осуществим при помощи условия (строка 47)

if ($id_proizv= =$row_proizv['id']) {$sel="SELECTED";} else {$sel="";};

проверку равенства id производителя текущего элемента ($row_proizv['id']) id производителя буферной переменной, полученной со страницы выбора товара ($id_proizv). При их равенстве, присвоим переменной $sel значение “SELECTED”, в противном случае присвоим значение пустой строки.

При формировании очередного элемента списка (строка 48) подставим в него атрибут (значение переменной $sel).

Таким образом, при начальном отображении страницы в полях отображаются значения выбранного элемента.

Далее программа работает по аналогии с предыдущим примером вставки записей в таблицу. При нажатии на кнопку submit, происходит передача параметров методом POST, страница загружается заново, и если существует переменная кнопки (строка 3), то происходит добавление записи в таблицу (запрос строки 5-6).

Статичная ссылка в строке 34 возвращает на страницу выбора товара.

 

 

Удаление записей. 

 

Удаление записей осуществляется запросом DELETE. Запрос удаляет записи, соответствующие указанному в нем условию. Если условие не указано, то удалятся все записи таблицы. На практике это организуется аналогично предыдущим примерам: осуществляется выбор товара, а затем выполнение запроса на удаление выбранного товара.

 

Листинг 11 (page11.php)

 

1.      <?php

2.      include('connect.php');

3.      if (isset($_GET['tovar']))

4.      {$str_tovar_delete="DELETE FROM tovar WHERE id=".$_GET['tovar'];

5.      mysql_query($str_tovar_delete,$connect);};

6.      if (isset($_GET['proizv']))

7.      {$proizv=$_GET['proizv'];}

8.      else

9.      {$proizv=1;};

10.      $query_str_proizv="select * from  proizv";

11.      $query_proizv=mysql_query($query_str_proizv,$connect);

12.      $count_proizv=mysql_num_rows($query_proizv);

13.      $query_str_tovar="select * from  tovar WHERE id_proizv=".$proizv;

14.      $query_tovar=mysql_query($query_str_tovar,$connect);

15.      $count_tovar=mysql_num_rows($query_tovar);

16.      ?>

17.      <html>

18.      <body>

19.      <?php

20.      for ($i=1;$i<=$count_proizv;$i++)

21.      {

22.      $row_proizv=mysql_fetch_assoc($query_proizv);

23.      echo "<a href='page11.php?proizv=".$row_proizv['id']."'> ".$row_proizv['proizv_name']."</a>";

24.      };

25.      echo "<br>товары<br>";

26.      for ($i=1;$i<=$count_tovar;$i++)

27.      {

28.      $row_tovar=mysql_fetch_assoc($query_tovar);

29.      echo "<a href='page11.php?tovar=".$row_tovar['id']."'>".$row_tovar['tovar_name']." - ".$row_tovar['tovar_price']."</a><br>";

30.      };

31.      ?>

32.      </body>

33.      </html>

 

Это стандартная страница выбора товаров по производителям, при нажатии на ссылку товара (строка 29), происходит переход на эту же страницу и передача параметра tovar равного id товара. При последующей загрузке определяется: существует ли параметр tovar (строки 3-5), и если он существует, то выполняется запрос (строки 4-5) который удаляет запись из таблицы с id равным переданному параметру.

 

Гостевая книга

 

Гостевая книга представляет собой страницу, на которой посетитель может оставить своё сообщение (заполнив соответствующие поля и нажав на кнопку отправки данных), а также прочесть сообщения других посетителей, оставивших сообщения ранее. Так же необходима страница для администрирования гостевой книги (удаления нежелательных сообщений, редактирования существующих).

Сообщения пользователей будем хранить в таблице guest, которая содержит поля id – ключевое поле, user – имя посетителя, time – время создания сообщения (автоинкрементное поле типа timestamp), message – текст сообщения.

 

Листинг 12 (page12.php)

 

1.<?php

2.include('connect.php');

3.if (isset($_POST['submit']))

4.{$query_str_message_insert="INSERT INTO guest (user, message)

5.VALUES ('".$_POST['user']."', '".$_POST['message']."')";

6.mysql_query($query_str_message_insert,$connect);};

7.$query_str_message="select *, DATE_FORMAT(time,'%d.%M.%Y %H:%i:%s') t

FROM  guest ORDER BY time DESC";

8.$query_message=mysql_query($query_str_message,$connect);

9.$count_message=mysql_num_rows($query_message);

10.?>

11.<html>

12.<body>

13.<form name="form1" method="post" action="">

14.Пользователь <input type="text" name="user"><br>

15.Текст сообщения <textarea name="message"></textarea><br>

16.<input type="submit" name="submit" value="Вставить">

17.</form>

18.<?php

19.for ($i=1;$i<=$count_message;$i++)

20.{$row_message=mysql_fetch_assoc($query_message);

21.echo "Пользователь - ".$row_message['user']."<br>";

22.echo "Время - ".$row_message['t']."<br>";

23.echo "Сообщение : ".$row_message['message']."<br><br>";};

24.?>

25.</body>

26.</html>

 

         Здесь использованы стандартные приемы: вывод записей гостевой книги (запрос строки 7-9 и цикл вывода строки 19-25) и добавление сообщений (форма с полями ввода строки 13-17 и запрос строки 3-6).

При выводе информации мы использовали сортировку по дате (сообщения выводятся в порядке убывания по дате). В запросе это

«ORDER BY time DESC»

Кроме того, мы выводим на экран дату и время создания сообщения. Для этого у нас используется автоинкрементное поле time типа timestamp. Но поскольку информация в нем записана в сложном для восприятия виде, мы изменяем формат вывода этого поля при помощи средств MySQL. Для этого  создадим псевдоним для поля time и назовем его “t

«DATE_FORMAT(time, '%d.%M.%Y %H:%i:%s') t»

Эта команда изменяет формат выводимых данных поля time следующим образом: «день.месяц.год часы:минуты:секунды»

например: 15.May.2004 19:33:44

 

Листинг 13 (page13.php)

 

1.      <?php

2.      include('connect.php');

3.      if (isset($_POST['submit']))

4.      {$query_str_message_update="UPDATE guest

  SET user='".$_POST['user']."', message='".$_POST['message']."'

  WHERE id=".$_POST['message_id'];

5.      mysql_query($query_str_message_update,$connect);

6.      $_GET['message_id']=$_POST['message_id'];};

7.      if (isset($_GET['message_id']))

8.      {$message_id=$_GET['message_id'];}

9.      else {$message_id=1;};

10.      if (isset($_GET['action']) and $_GET['action']=="delete")

11.      {$query_str_message_delete="DELETE FROM guest WHERE id=".$message_id;

12.      mysql_query($query_str_message_delete,$connect);

13.      $message_id="";

14.      $user="";

15.      $message="";}

16.      elseif (isset($_GET['action']) and $_GET['action']=="edit")

17.      {$query_str_message_show="select * FROM  guest WHERE id=".$message_id;

18.      $query_message_show=mysql_query($query_str_message_show,$connect);

19.      $row_message_show=mysql_fetch_assoc($query_message_show);

20.      $message_id=$row_message_show['id'];

21.      $user=$row_message_show['user'];

22.      $message=$row_message_show['message'];}

23.      else {$message_id="";

24.      $user="";

25.      $message="";};

26.      $query_str_message="select *, DATE_FORMAT(time,'%d.%M.%Y %H:%i:%s') t

  FROM  guest ORDER BY time DESC";

27.      $query_message=mysql_query($query_str_message,$connect);

28.      $count_message=mysql_num_rows($query_message);

29.      ?>

30.      <html>

31.      <body>

32.      <form name="form1" method="post" action="">

33.      Пользователь

34.      <input type="text" name="user" value="<?php echo $user;?>"><br>

35.      Текст сообщения

36.      <textarea name="message"><?php echo $message;?></textarea><br>

37.      <input name="message_id" type="hidden" value="<?php echo $message_id; ?>">

38.      <input type="submit" name="submit" value="Изменить">

39.      </form>

40.      <?php

41.      for ($i=1;$i<=$count_message;$i++)

42.      {$row_message=mysql_fetch_assoc($query_message);

43.      echo "Пользователь - ".$row_message['user']."<br>";

44.      echo "Время - ".$row_message['t']."<br>";

45.      echo "Сообщение : ".$row_message['message']."<br>";

46.      echo "<a href='page13.php?message_id=".$row_message['id']."&action=edit'>

  редактировать</a> ";

47.      echo "<a href='page13.php?message_id=".$row_message['id']."&action=delete'>

  удалить</a><br><br>";

48.      };

49.      ?>

50.      </body>

51.      </html>

 

На этой странице выводятся все сообщения и для каждого из них формируется две ссылки:

для редактирования (строка 46)

echo "<a href='page13.php?message_id=".$row_message['id']."&action=edit'>редактировать</a> ";

и для удаления данного сообщения (строка 47)

echo "<a href='page13.php?message_id=".$row_message['id']."&action=delete'>удалить</a>

Эти ссылки передают одновременно два параметра: id записи (message_id) и действие, которое необходимо выполнить (action). Параметр action принимает одно из двух значений edit или delete. Таким образом, проверяя чему равен параметр мы удаляем или редактируем выбранное сообщение (строки 10-25). При редактировании мы сначала заполняем поля формы (строки 20-22 и 34-37) а затем, после нажатия на кнопку вносим изменения в таблицу (строки 3-6).

 

Отправка email

 

Отправка сообщения на адрес электронной почты осуществляется довольно просто, для этого используется всего один оператор.

mail("адрес_электронной_почты", "тема", "сообщение");

напимер:

mail("my_address@mail.ru", "моя тема", "сообщение");

 

Для этого модифицируем нашу страницу для записи сообщений в гостевую книгу (page12.php).

 

Листинг 14 (page14.php)

 

1.      <?php

2.      include('connect.php');

3.      if (isset($_POST['submit']))

4.      {mail("'".$_POST['adress']."'", "'".$_POST['tema']."'", "'".$_POST['message']."'");};

5.      ?>

6.      <html>

7.      <body>

8.      <form name="form1" method="post" action="">

9.      Адрес

10.      <input type="text" name="adress"><br>

11.      Тема

12.      <input type="text" name="tema"><br>

13.      Текст сообщения

14.      <textarea name="message"></textarea><br>

15.      <input type="submit" name="submit" value="Отправить">

16.      </form>

17.      </body>

18.      </html>

 

Программа работает аналогично гостевой книге, только вместо добавления записи в таблицу сообщение отправляется на указанный адрес (строки 3-4).

 

Рейтинг@Mail.ru

Copyright © 2004 by inet-studio
 

Сайт создан в системе uCoz