ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 04.03.2021
Просмотров: 226
Скачиваний: 1
Лабораторная работа № 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>
Функции для работы с базами данных
Функция mysql_create_db
Функция mysql_create_db осуществляет создание базы данных MySQL.
Синтаксис:
mysql_create_db (string dbname [,int link_identifier]),
где
dbname - имя создаваемой базы данных,
link_identifier - идентификатор соединения с создаваемой базой данных.
Функция mysql_create_db создает новую базу данных MySQL с именем “dbname”, используя подключение “link_identifier”.
Например, в представленном ниже коде
$db=mysql_connect("localhost", "root", " ");
if(mysql_create_db("my_db_name"))
{ echo "БД my_db_name создана");}
else { echo "Ошибка создания базы данных: %s\n".mysql_error());}
с помощью функции mysql_create_db осуществлялось создание базы данных “my_db_name”.
Функция mysql_drop_db
Функция mysql_drop_db осуществляет удаление базы данных MySQL.
Синтаксис:
mysql_drop_db(string database_name [,int link_identifier]),
где
database_name - имя удаляемой базы данных,
link_identifier - идентификатор соединения с удаляемой базой данных.
Функция mysql_drop_db в случае успешного удаления возвращает true, при ошибке - false.
Функция mysql_list_dbs
Функция mysql_list_dbs возвращает список баз данных на сервере.
Синтаксис:
mysql_list_dbs([int link_identifier]),
где
link_identifier - идентификатор соединения с базами данных,
Функция mysql_list_dbs возвращает набор записей, содержащий список баз данных на сервере.
Например, в представленном ниже коде
$bd=mysql_connect("localhost", "root", " ");
$bd_list=mysql_list_dbs($bd);
while($row=mysql_fetch_object($bd_list))
{ echo $row "\n";}
с помощью функции mysql_list_dbs осуществлялось получение списка баз данных на сервере и вывод его на экран. Необходимо отметить, что в данном примере список баз данных можно было получить, не имея привилегий, то есть, не указывая пароль доступа.
Функция mysql_db_name
Функция mysql_db_name возвращает имя базы данных из списка.
Синтаксис:
mysql_db_name(int result, int row [, mixed field]),
где
result - дескриптор набора записей, полученных при помощи функции mysql_list_dbs,
row - номер записи в списке баз данных,
field - столбец в списке баз данных.
В случае ошибки, данная функция возвращает false.
Например, в представленном ниже коде
mysql_connect("localhost", " root ", " ");
$db_list=mysql_list();
for($i=0;$i<($cnt=mysql_num_rows($db_list));$i++)
{ echo mysql_db_name($db_list,$i)."\n";}
с помощью функции mysql_db_name осуществлялся вывод на экран имен всех баз данных на сервере.
Функция mysql_list_tables
Функция mysql_list_tables возвращает список таблиц базы данных.
Синтаксис:
mysql_list_tables(string database [,int link_identifier]),
где
database - имя базы данных,
link_identifier - идентификатор соединения с выбранной базой данных.
Функция mysql_list_tables возвращает идентификатор результата, в котором содержатся имена всех таблиц, присутствующих в базе данных. Например, в представленном ниже коде
$db=mysql_connect("localhost", " root ", " ");
$db_list=mysql_list_dbs($db);
while($r_db=mysql_fetch_object($db_list))
{
echo $r_db "\n";
$t_list=mysql_list_tables($r_db);
for($i=0;$i { echo " - ".mysql_tablename($t_list,$i)."\n"; }
}
с помощью функции mysql_list_tables осуществлялся вывод на экран всех имен баз данных и таблиц, которые в них содержатся.
Функция mysql_data_seek
Функция mysql_data_seek устанавливает указатель текущей строки.
Синтаксис:
mysql_data_seek(int result, int row_number),
где
result - идентификатор результата,
row_number - номер строки.
Функция mysql_data_seek устанавливает указатель текущей строки в результате “result” в позицию “row_number”, так что следующий вызов mysql_fetch_row и mysql_fetch_array вернет значения полей именно этой строки. Нумерация записей ведется с нуля. Функция возвращает false в случае ошибки или если строки кончились.
Функция mysql_free_result
Функция mysql_free_result уничтожает набор записей.
Синтаксис:
mysql_free_result(int result),
где
result - идентификатор результата.
Функция mysql_free_result освобождает память, занимаемую набором записей “result”, возвращенным запросом. Эта функция необходима для экономии памяти, так как язык PHP автоматически освобождает память при завершении сценария.
Обработка результатов запроса
Функция mysql_result
Функция mysql_result осуществляет получение определенного поля результата.
Синтаксис:
mysql_result (int result, int row [, mixed field]),
где
result - идентификатор результата,
row - номер записи в результате,
field - поле результата.
Функция mysql_result возвращает значение поля “field” в строке результата с номером “row”. Параметр “field” может задавать не только имя поля, но и его номер, то есть позицию, на которой столбец находился при создании таблицы, а также полное имя поля вида: “имя_таблицы.имя_поля”.
Функция mysql_fetch_array
Функция mysql_fetch_array извлекает из результата очередную запись и помещает ее в ассоциативный массив.
Синтаксис:
array mysql_fetch_array(int result [, int result_type]),
где
result - идентификатор результата,
result_type - задает вид возвращаемого массива и может принимать одно из следующих значений: MYSQL_NUM, MYSQL_ASSOC, MYSQL_BOTH.
Функция mysql_fetch_array возвращает очередную строку результата в виде ассоциативного массива, где каждому полю сопоставлен элемент с ключом, совпадающим с именем поля. Дополнительно в массив записываются элементы с числовыми ключами и значениями, соответствующими величинам полей с этими индексами. В возвращаемом массиве они размещаются сразу за элементами с “обычными” ключами.
Например, в представленном ниже коде
mysql_connect($host, $user, $pass);
$result=mysql_db_query("database", "select id, name from tabl");
while($row=mysql_fetch_array($result)) {
echo "id: ".$row["id"]."<BR>";
echo "id: ".$row[0]."<BR>";
echo "name: ".$row["name"]."<BR>";
echo "name: ".$row[1]."<BR>"; }
mysql_free_result($result);
с помощью функции mysql_fetch_array осуществлялось добавление строк результата запроса в ассоциативный массив и вывод строк результата на экран.
Функция mysql_fetch_row
Функция mysql_fetch_row записывает запись в нумерованный массив.
Синтаксис:
array mysql_fetch_row(int result),
где
result - идентификатор результата.
Функция возвращает массив, представленный в виде списка со значениями полей очередной строки результата “result”. Если указатель текущей позиции результата был установлен за последней записью (то есть строки кончились), возвращается false. Текущая позиция сдвигается к следующей записи, так что очередной вызов mysql_fetch_row вернет следующую строку результата. Каждое поле записи сохраняется в нумерованном элементе массива. При этом нумерация начинается с нуля.