Отправляет email-рассылки с помощью сервиса Sendsay

PHP с самого начала

  Все выпуски  

PHP с самого начала


Выпуск №5

Доброго времени суток всем читателям!

Сегодня мы начнем одну из самых важных тем, которая откроет нам многие двери в программировании на PHP. Это работа с базами данных, а именно MySQL.

Начнем с вопроса: а что такое база данных? Проще всего представить базу данных, как страницу, на которой находятся несколько (а может и одна) таблиц. Составим таблицу с учениками 7-в класса.

id surname name patronymic
1 Иванов Иван Иванович
2 Петров Петр Петрович
3 Сидоров Сидор Сидорович
... ... ... ...
n Михайлов Михаил Михайлович

Тут мы видим 4 колонки(поля), одна из которых уникальна - id (а вдруг у нас в классе 2 полных тезки).

Теперь перейдем к практике. Если вы послушались моего совета и поставили себе ДЕНВЕР, скорее запускайте его и в адресной строке набирайте http://localhost/Tools/phpMyAdmin/. Вы запустили phpMyAdmin - веб-интерфейс для администрирования СУБД MySQL. Что такое СУБД вам лучше всего раскажет Wikipedia, а я вам раскажу, как создать в phpMyAdmin свою базу данных.

Прямо перед собой вы видите поле ввода "создать новую БД". Называем ее "school" и тыкаем по кнопочке "Создать". Далее создаем таблицу. Назовем ее "7b"(это случайно у меня такое красивое название придумалось), назначим 4 поля и тыкнем по кнопке "пошел".

Теперь зададим поля для таблицы. Мы уже определились, что это id, surname, name и patronymic. Для всех полей, коме id, все оставляем как есть а длины/значения зададим 255. Для id виберем тип INT, длина значения 2, дополнительно - auto_increment (будет заполняться автоматически) и выбираем пунктик с ключем - первичный ключ (уникальное значение). Кликаем "сохранить".

Теперь осталось заполнить таблицу. Нажимаем "вставить" и заполняем (поле id заполнять не нужно, оно заполнится автоматически). Все, база данных готова!

Теперь будем учиться взаимодействовать с ней при помощи PHP. Для наглядности начну с примера.

<?php
$db=mysql_connect('localhost', 'root', '');
mysql_select_db('school', $db);
$result=mysql_query("select * from 7b where name = 'Иван'");
$myrow = mysql_fetch_array ($result);
echo $myrow['patronymic'];
?>

Теперь по порядку. С помощью функции mysql_connect мы соединяемся к серверу. Входные данные - хост (в данном случае localhost), логин (root) и пароль (я его не ставил, поэтому в кавычках пусто). Функция mysql_select_db выбирает нужную базу данных. Входящие параметры - имя базы и то, что возвращает mysql_connect.

Подготовление завершено, теперь мы должны сделать запрос. Запрос делается с помощью функции mysql_query. Этой функции необходимо передать запрос на языке SQL. В нашем случае это "select * from 7b where name = 'Иван'". Если перевести все это на русский, будет следующее: "выбрать все из таблицы 7b где поле name = 'Иван'". Тоесть этот запрос возвращает из таблицы всю строку (или строки), где name = 'Иван'.

Далее, с помощью функции mysql_fetch_array мы помещаем результат запроса в ассоциативный массив, и если нам нужно отчество нашего Ивана, мы просто пишем echo $myrow['patronymic'];

Но что, если Иванов много? В таком случае мы получим только одного (первого по порядку). Как получить всех? Смотрите следующий код:

<?php
$db=mysql_connect('localhost', 'root', '');
mysql_select_db('school', $db);
$result=mysql_query("SELECT * FROM 7b WHERE name = 'Иван'");
$myrow = mysql_fetch_array ($result);
do
{
echo $myrow['patronymic']."<br/>";
}
while($myrow = mysql_fetch_array ($result));
?>

В этом варианте будут выведены отчества всех учеников, имеющих имя Иван. Обратите внимание, что используется именно цикл do while, а не while. Проведите эксперимент и поставьте цикл while. Что будет?

Хотел сегодня расказать о еще одном запросе - INSERT. Он используется, если нам нужно добавить новую строку в таблицу. Для нашего примера такой запрос будет выглядеть так: "INSERT INTO 7b (surname, name, patronymic) VALUES ('Пушкин', 'Александр', 'Сергеевич')", тоесть, вставить в таблицу 7b в поля surname, name и patronymic занчения 'Пушкин', 'Александр' и 'Сергеевич'

Гостевая

Теперь, пользуясь накопленными знаниями напишем самую простую гостевую книгу. Делать она должна всего две вещи: выводить имеющиеся сообщения от пользователей и пополнять базу данных новыми сообщениями.

Для начала сделаем для нашей гостевой таблицу guest (я буду считать, что мы размещаем ее все в той же базе данных school). Таблица должна иметь такие поля: id (INT (3), auto_increment, первичный ключ), name (varchar(255)) и text (text).

Код гостевой должен быть вам понятен.

<form method=POST>
<table>
<tr><td>Ваше имя</td><td>
<input type='text' name='name'></td></tr>
<tr><td>Ваше сообщение</td><td>
<textarea name='text'></textarea></td></tr>
<tr><td> <input type='submit' value='Добавить'></td></tr>
</table>
</form>
<?php
$db=mysql_connect('localhost', 'root', '');
mysql_select_db('school', $db);
if (isset($_POST['text']) && $_POST['text']!='')
{
$text=$_POST['text'];
$name=$_POST['name'];
$result=mysql_query("INSERT INTO guest (name, text) VALUES ('$name', '$text')");
}
$result=mysql_query("select name, text from guest ORDER BY id DESC");
$myrow = mysql_fetch_array ($result);
do
{
echo "<table border width=100%> <tr><td>".$myrow['name']."</td></tr><tr><td>".$myrow['patronymic']."</td></tr></table><hr>";
}
while($myrow = mysql_fetch_array ($result));
?>

Из всего написаного выше вам незнакома часть запроса ORDER BY id DESC. ORDER BY id означает сортировать по полю id, а DESC сортирует в обратном порядке.

Кажется, все. Но эта гостевая полна недостатков и уязвимостей. В следующем выпуске мы попробуем ее дополнить. А вы на досуге подумайте, в чем недостатки этой гостевой и как их устранить.

Хотите знать больше? Задайте свой вопрос здесь

В избранное