- •Лабораторная работа № 2
- •Функции для работы с базами данных
- •Mysql_create_db (string dbname [,int link_identifier]),
- •Mysql_drop_db(string database_name [,int link_identifier]),
- •Mysql_list_dbs([int link_identifier]),
- •Mysql_db_name(int result, int row [, mixed field]),
- •Mysql_list_tables(string database [,int link_identifier]),
- •Mysql_data_seek(int result, int row_number),
- •Mysql_free_result(int result),
- •Обработка результатов запроса
- •Mysql_result (int result, int row [, mixed field]),
- •Array mysql_fetch_array(int result [, int result_type]),
- •Array mysql_fetch_row(int result),
- •Array mysql_fetch_lengths(int result),
- •String mysql_field_name(int result, int filed_index),
- •String mysql_field_type(int result, int filed_offset),
- •Mysql_list_fields(string dbname, string tblname [,int link_identifier]),
- •Mysql_num_fields(int result),
- •String mysql_error ([int link_identifier]),
Лабораторная работа № 2
Задание
К созданному Вами сайту, подключаете базу данных с помощью phpскриптов.
База данных создается в phpmyadmin. БД должна содержать минимум одну таблицу. Одна из таблиц содержит минимум 5 полей со следующими типами полей:
Первое поле это ключевое поле, значение которого уникально и не повторяется нигде в БД. Имеет тип Bigint.
Второе текстовое поле типа varchar(указать мин. элементов)
Следующие поля должны быть типа:
float(значение с плавающей точкой);
Int– целое значение;
Data – дата.
Содержимое БД нужно вывести на страницу сайта. Должна быть реализована возможность через сайт добавлять, удалять и сортировать поля БД.
Теория
Для реализации взаимодействия языка PHP и СУБД MySQL существует множество встроенных функций. К наиболее популярным относятся функции для подключения к базе данных MySQL, записи данных в базу данных, а для также чтения и вывода содержимого таблиц.
Для устойчивого подключения к серверу MySQL в языке PHP используется функция mysql_pconnect.
Синтаксис:
mysql_pconnect ([string host[:port][:/socketpath]], [string user], [string password]),
$connect = mysql_pconnect ([string host[:port][:/socketpath]], [string user], [string password]),
где
host[:port][:/socketpath]] - полный адрес узла, на котором размещен сервер MySQL,
user - имя пользователя базы данных,
password - пароль для входа в базу данных.
Функция mysql_pconnect устанавливает устойчивое сетевое соединение с базой данных MySQL, расположенной на хосте “$host”, и возвращает идентификатор открытого соединения. При регистрации указывается имя пользователя “$user” и пароль “$password”.
Как альтернативу можно использовать функцию mysql_connect,которая делает практически то же самое. Отличие состоит в том, что mysql_connect устанавливает непостоянное соединение с базой данных.
Синтаксис:
Mysql_connect ([string host[:port][:/socketpath]], [string user], [string password]),
$connect = mysql_connect ([string host[:port][:/socketpath]], [string user], [string password]),
где
host[:port][:/socketpath]- полный адрес узла, на котором размещен сервер MySQL,
user- имя пользователя базы данных,
password- пароль для входа в базу данных.
По умолчанию, на mysql-сервере в таблице пользователей есть пользователь root, который может иметь доступ только с localhost-а, т.е. с того же самого компьютера, где стоит сервер mysql. ВНИМАНИЕ! "Иметь доступ с localhost" значит, что доступ имеет ваш скрипт PHP, а вы можете обращаться к нему с любого другого компьютера.
Функция mysql_connect устанавливает сетевое соединение с базой данных MySQL, расположенной на хосте “hostname”, и возвращает идентификатор открытого соединения. При регистрации указывается имя пользователя “username” и пароль “password”. С началом выполнения вашего скрипта, php выделяет в своей памяти место для информации о нём и его переменных. В информации о выполняемом скрипте хранится, в том числе, и информация о соединениях с базами данных. Переменная $connect - указатель на место, где данная информация хранится. Переменная эта точно такая же, как и остальные - если вы используете функции, то надо объявлять глобальные переменные, чтобы обратиться к ней. При попытке запуска следующего соединения с теми же самыми аргументами, второе соединение не будет открыто, а функция возвратит идентификатор уже существующего.
Соединение с базой данных закрывается, когда сценарий завершает свое выполнение или когда обращается к функции mysql_close.
Синтаксис:
mysql_close( database_connection),
где
database_connection- соединение, которое получено в функции mysql_connect.
Для работы с базой данных MySQL необходимо также указать, какая база данных нужна. Это можно сделать с помощью функции mysql_select_db.
Синтаксис:
mysql_select_db(string database, [ database_connection]),
где
database - имя выбираемой базы данных,
database_connection- соединение, которое получено в функции mysql_connect.
Механизм работы функций запросов к БД такой же, как и у функции соединения: функции передаются параметры запроса и (если надо) соединения, а результат записывается в переменную:
Синтаксис:
mysql_query(string query, [int database_connection]),
где
query- строка, содержащая запрос,
database_connection - соединение, которое получено в функцииmysql_connect.
$result = mysql_db_query(string база данных, string запрос [, переменная соединения]);
или
$result = mysql_query(string запрос [, переменная соединения]);
Если параметр “database_connection” опущен, используется последнее открытое соединение. Если открытые соединения отсутствуют, функция пытается соединиться с СУБД, аналогично функцииmysql_connectбез параметров.При этом результат запроса буферизируется.
При работе с базами данных может возникнуть ситуация, когда потребуется узнать количество записей, участвующих в запросе с SQL-операторамиINSERT,UPDATE,DELETE. Это можно сделать с помощью функцииmysql_affected_rows.
Синтаксис:
mysql_affected_rows ( database_connection]),
где
database_connection- соединение, которое получено в функцииmysql_connect.
Функция mysql_num_rowsопределяет количество записей, возвращаемых операторомSELECT.
Синтаксис:
mysql_num_rows( result),
где
result - результат.
Ниже представлен пример совместной работы языка РНР с базой данных СУБД MySQL “PRODUCT”
Создадим базу данных под названием productи в этой базе создали таблицу под названиемtovarsсо следующими столбцами:
inc-это ключевое поле или код, т.е. поле, значение которого уникально и нигде во всей базе не повторяется.Это сделали с помощью того, что это поле автоинкремент, т.е. при вводе новой строки в базу текущее значение этого поля равно значение предыдущего поля этого столбца плюс 1. Тип этого поля:Bigint-не скоро мы переберем все возможные значения.
naim- в этом столбце мы указываем название товара. Тип поля:varchar(20)- т.е. строка не более 20 символов.
cena-в этом столбце мы указываем цену товара. Тип поля:float-т.е. число с плавающей точкой.
kol-это количество товара. Тип поля:int-целый тип.
srok- это срок годности продукта. И тип этого поля:date-т.е. дата.
Создадим программу, которая будет вносить данные в нашу базу данных. В начале создадим форму для ввода данных:
<html> <HEAD> <META http-equiv=content-type content="text/html; charset=windows-1251"> <style> .t2{ FONT-SIZE: 14px; color: black; FONT-FAMILY: Verdana, Helvetica, Arial; display:block; text-align: right;} .t{ FONT-SIZE: 14px; color: red; FONT-FAMILY: Verdana, Helvetica, Arial; } </style> </HEAD> <body > <br><br><br><br><br><br><br> <form action="lesson2.php" method="post" name="frt" > <table align="center"> <tr><td class="t2">введите название продукта</td> <td> <input type="text" size="20" maxlength="20" name="prod" id="prod" value="<?php echo $_POST["prod"] ?>"></td></tr> <tr><td class="t2">введите цену</td> <td> <input type="text" size="10" maxlength="10" name="cena" id="cena" value="<?php echo $_POST["cena"]?>"></td></tr> <tr><td class="t2">введите колличество</td> <td> <input type="text" size="11" maxlength="11" name="kol" id="kol" value="<?php echo $_POST["kol"]?>"></td></tr> <tr><td class="t2">введите срок годности(dd.mm.yyyy)</td> <td> <input type="text" size="10" maxlength="10" name="srok" id="srok" value="<?php echo $_POST["srok"]?>"></td></tr> <tr><td colspan="2" align="center"><input type="submit"; name="vvod"; value="ввести"; ></td></tr> </table> </body> </html>
вот, что у нас получится:
затем нам надо скрипт php, который будет проверять корректность ввода данных и в правильном формате вводит эти данные в базу данных. Окончательный текст файла будет такой:
<?php if($_POST["prod"]) { $error="ошибка:"; $prod=$_POST["prod"]; $cena=$_POST["cena"]; $srok=$_POST["srok"]; $kol=$_POST["kol"]; if(strcmp((float)$cena,$cena)) {$error.="вы строке цена вводятся только цифры<br>"; } if(strcmp((int)$kol,$kol)) {$error.="вы строке колличество вводятся только цифры<br>"; } if(!preg_match_all("/(\d{1,2})\.(\d{1,2})\.(\d{4})/",$srok,$i)) {$error.="неверный формат строки: срок годности<br>"; } $day=$i[1][0]; $month=$i[2][0]; $year=$i[3][0]; if(!checkdate($month,$day,$year)) {$error.="вы неверно ввели срок годности<br>"; } if($error!="ошибка:") {print "<center class=\"t\">$error</center> "; } else { $srok=$year."-".$month."-".$day; $link = mysql_connect("localhost", "root","") or die("Could not connect"); mysql_select_db("product") or die("Could not select database"); $sql = "INSERT INTO tovars ( naim, cena, kol, srok) VALUES ('$prod', '$cena','$kol','$srok' )"; $result = mysql_query($sql) or die("Query failed");; mysql_close($link); Header("Location: uspex.php?i=1"); } } ?> <html> <HEAD> <META http-equiv=content-type content="text/html; charset=windows-1251"> <style> .t2{ FONT-SIZE: 14px; color: black; FONT-FAMILY: Verdana, Helvetica, Arial; display:block; text-align: right;} .t{ FONT-SIZE: 14px; color: red; FONT-FAMILY: Verdana, Helvetica, Arial; } </style> </HEAD> <body > <br><br><br><br><br><br><br> <form action="lesson2.php" method="post" name="frt" > <table align="center"> <tr><td class="t2">введите название продукта</td> <td> <input type="text" size="20" maxlength="20" name="prod" id="prod" value="<?php echo $_POST["prod"] ?>"></td></tr> <tr><td class="t2">введите цену</td> <td> <input type="text" size="10" maxlength="10" name="cena" id="cena" value="<?php echo $_POST["cena"]?>"></td></tr> <tr><td class="t2">введите колличество</td> <td> <input type="text" size="11" maxlength="11" name="kol" id="kol" value="<?php echo $_POST["kol"]?>"></td></tr> <tr><td class="t2">введите срок годности(dd.mm.yyyy)</td> <td> <input type="text" size="10" maxlength="10" name="srok" id="srok" value="<?php echo $_POST["srok"]?>"></td></tr> <tr><td colspan="2" align="center"><input type="submit"; name="vvod"; value="ввести"; ></td></tr> </table> </body> </html>
Вот текст файла: uspex.php
<HTML> <HEAD> <LINK href="main.css" type=text/css rel=stylesheet> <META http-equiv=content-type content="text/html; charset=windows-1251"> </HEAD> <body > <?php $i=0; $i=$_GET["i"]; if($i==1) {$st="данные успешно добавлены"; } if($i==2) {$st="записи успешно удалены"; } if($i==3) {$st="записи успешно обновлены"; } ?> <table border=0 width=100% > <tr align=center> <td> <br><br><br><br><br><br><br><br> <H4 class="big"><?php echo $st ?></H4> </td> </tr> </table> </body> </HTML>
После правильного ввода всех данных и нажатия на кнопку «ввести» мы увидим следующее:
Вывод БД на экран
Данные в базу данных введены. Но с ними необходимо как-то работать. Допустим возникла необходимость просмотреть всю базу в браузере. Для этого необходимо написать примерно следующий код:
<html> <HEAD> <META http-equiv=content-type content="text/html; charset=windows-1251"> </HEAD> <body > <br><br><br><br><br> <center><h2>перечень продуктов</h2></center> <table align="center"border=1> <tr align="center"> <td>наименование</td> <td>цена</td> <td>колличество</td> <td>стоимость</td> <td>срок годности<td> </tr> <?php $link = mysql_connect("localhost", "root","") or die("Could not connect"); mysql_select_db("product") or die("Could not select database"); $query="SELECT * FROM tovars "; $result = mysql_query($query) or die("Query failed"); while ($line = mysql_fetch_row($result)) { print "<tr align=\"center\"><td>$line[1]</td>"; print "<td>$line[2]</td>"; print "<td>$line[3]</td>"; $st=$line[2]*$line[3]; print "<td>$st</td>"; print "<td>$line[4]</td></tr>"; } ?> </table> </body> </html>
Реализована возможность удалить записи следующим образом:
<?php if($_POST["dfile"]) { $mass=$_POST["dfile"]; $i=0; while($mass[$i]) { $link = mysql_connect("localhost", "root","") or die("Could not connect"); mysql_select_db("product") or die("Could not select database"); $s1="DELETE FROM tovars WHERE inc=$mass[$i]"; $result1 = mysql_query($s1) or die("Query failed"); $i++; } Header("Location: uspex.php?i=2"); } ?> <html> <HEAD> <META http-equiv=content-type content="text/html; charset=windows-1251"> </HEAD> <body > <br><br><br><br><br> <center><h2>перечень продуктов</h2></center> <form method="post" action="lesson2_2.php" > <table align="center"border=1> <tr align="center"> <td>наименование</td> <td>цена</td> <td>колличество</td> <td>стоимость</td> <td>срок годности</td> <td></td> </tr> <?php $link = mysql_connect("localhost", "root","") or die("Could not connect"); mysql_select_db("product") or die("Could not select database"); $query="SELECT * FROM tovars "; $result = mysql_query($query) or die("Query failed"); while ($line = mysql_fetch_row($result)) { print "<tr align=\"center\"><td>$line[1]</td>"; print "<td>”$line[2]</td>"; print "<td>$line[3]</td>"; $st=$line[2]*$line[3]; print "<td>$st</td>"; print "<td>$line[4]</td>"; print "<td>"; $v=$line[0]; ?> <input type=checkbox name=dfile[] value= "<?php echo $v ?>" > <?php print "</td></tr>"; } ?> </table> <br> <center><input type=submit name="ud" value=удалить></center> </form> </body> </html>