MySQL и PHP (часть 1)



В этой статье я хочу рассказать о работе с базами данных с помощью php.

База данных - это специальная программа для обработки больших массивов однотипных данных. На мой взгляд - одна из лучших баз данных - это MySQL.

К тому же она специально предназначена для работы в интернете и её поддерживают практические все сервера. Я не рекомендую вручную создавать в нем базы данных. Для этого существуют специальные программы, очень упрощающие работу с MySQL. Например я пользуюсь программой MySQL-Front.

Итак вы установили себе MySQL и MySQL-Front. Что же дальше? А дальше запускаем MySQL-Front, коннектимся с сервером MySQL и создаем новую базу данных. Например, я создал базу данных под названием product и в этой базе создал таблицу под названием tovars со следующими столбцами:

  1. inc -это ключевое поле или код, т.е. поле, значение которого уникально и нигде во всей базе не повторяется. Я это сделал с помощью того, что это поле у меня автоинкремент, т.е. при вводе новой строки в базу текущее значение этого поля равно значение предыдущего поля этого столбца плюс 1. Тип этого поля: Bigint -не скоро мы переберем все возможные значения.
  2. naim - в этом столбце мы указываем название товара. Тип поля: varchar(20) - т.е. строка не более 20 символов.
  3. cena -в этом столбце мы указываем цену товара. Тип поля: float -т.е. число с плавающей точкой.
  4. kol -это количество товара. Тип поля: int -целый тип.
  5. srok - это срок годности продукта. И тип этого поля: date - т.е. дата.

Итак наша база создана. Ещё я хотел бы сказать, что для совсем начинающих людей наверно это все не совсем понятно. И я им бы посоветовал ещё почитать общую теорию по базам данных и прочитать про язык SQL.

Итак мы создали базу данных и теперь мы можем с ней работать при помощи php. Для работы с MySQL нам потребуются следующие функции:

int mysql_connect(string hostname, string username, string password) - создать соединение с MySQL.

Параметры:

  • hostname – имя хоста, на котором находится база данных.
  • Username – имя пользователя.
  • Password – пароль пользователя.

Функция возвращает параметр типа int, который больше 0, если соединение прошло успешно, и равен 0 в противном случае.

int mysql_select_db(string database_name, int link_identifier) - выбрать базу данных для работы.

Параметры:

Database_name – имя базы данных.

link_identifier – ID соединения, которое получено в функции mysql_connect. (параметр необязательный, если он не указывается, то используется ID от последнего вызова mysql_connect)

Функция возвращает значение true или false

int mysql_query(string query, int link_identifier) -

функция выполняет запрос к базе данных.

Параметры:

query – строка, содержащая запрос link_identifier – см. предыдущую функцию.

Функция возвращает ID результата или 0, если произошла ошибка.

int mysql_result(int result, int i, column);

Функция возвращает значение поля в столбце column и в строке i.

int mysql_close(int link_identifier) - функция закрывает соединение с MySQL.

Параметры:

link_identifier – см. выше.

Функция возвращает значение true или false.

Конечно это не все функции php, которые используются при работе с MySQL. Об остальных расскажу попозже.

Создадим программу, которая будет вносить данные в нашу базу данных. В начале создадим форму для ввода данных:

<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>

подробно поясню, что там происходит. Вначале идет условие: if($_POST["prod"]) - это проверка того, что перед нажатием кнопки ввести человек заполнил форму и мы можем вводить данные в базу. Далее идет оператор: if(strcmp((float)$cena,$cena)) - здесь идет проверка того, что в поле цена введено число. Оператор (float)$cena приводит переменную $cena к типу float, а затем мы сравниваем приведенное значение и значение, которое ввели и если оказывается равенство, значит ввели число. Оператор strcmp возвращает разность кодов первых не совпадающих символов двух строк.

Следующий непонятный оператор в программе

preg_match_all("/(\d{1,2})\.(\d{1,2})\.(\d{4})/",$srok,$i).

Этот оператор проверяет правильность введенного формата даты. Т.е. сначала должны идти одна или 2 цифры, затем точка, затем ещё одна или две цифры, затем ещё одна точка, а затем ещё 4 цифры. Здесь используется регулярное выражение и, о них я расскажу в одном из следующих уроков.

Функция preg_match_all также разбивает введенную дату на день, месяц, год и записывает в двумерный массив $i. Функция checkdate($month,$day,$year) вообще очень простая - она проверяет, чтобы значения $month, $day, $year были в нужном диапазоне, т.е. день не может быть больше 31 и т.д. Далее в программе мы переменную $srok, приводим к тому же формату, который используется в базе данных. Далее мы связываемся с MySQL и с нашей базой данных. Потом создаем SQL-запрос для ввода данных и выполняем его. Следующая функция: mysql_close($link) приводит к тому, что разрывается соединение с базой данных.

Функция Header("Location: uspex.php?i=1") изменяет заголовок нашей страницы и после этой функции начинает выполняться скрипт, записанный в файле uspex.php. В этот файл мы передаем значение i=1, которое обрабатывается в скрипте и программа понимает, что мы удачно завершили ввод данных в базу данных.

Вот текст файла: 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>

После правильного ввода всех данных и нажатия на кнопку «ввести» мы увидим следующее:

Итак, данные успешно добавлены, и пора завершать первую часть этого урока.

(Ю. Гришин)


К списку всех уроков PHP