MySQL и PHP (часть 1)
В этой статье я хочу рассказать о работе с базами данных с помощью php.
База данных - это специальная программа для обработки больших массивов однотипных данных. На мой взгляд - одна из лучших баз данных - это MySQL.
К тому же она специально предназначена для работы в интернете и её поддерживают практические все сервера. Я не рекомендую вручную создавать в нем базы данных. Для этого существуют специальные программы, очень упрощающие работу с MySQL. Например я пользуюсь программой MySQL-Front.
Итак вы установили себе MySQL и MySQL-Front. Что же дальше? А дальше запускаем MySQL-Front, коннектимся с сервером MySQL и создаем новую базу данных. Например, я создал базу данных под названием product и в этой базе создал таблицу под названием tovars со следующими столбцами:
- inc -это ключевое поле или код, т.е. поле, значение которого уникально и нигде во всей базе не повторяется. Я это сделал с помощью того, что это поле у меня автоинкремент, т.е. при вводе новой строки в базу текущее значение этого поля равно значение предыдущего поля этого столбца плюс 1. Тип этого поля: Bigint -не скоро мы переберем все возможные значения.
- naim - в этом столбце мы указываем название товара. Тип поля: varchar(20) - т.е. строка не более 20 символов.
- cena -в этом столбце мы указываем цену товара. Тип поля: float -т.е. число с плавающей точкой.
- kol -это количество товара. Тип поля: int -целый тип.
- 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> |
После правильного ввода всех данных и нажатия на кнопку «ввести» мы увидим следующее:
Итак, данные успешно добавлены, и пора завершать первую часть этого урока.
(Ю. Гришин)