На тему работы с базой данных существует очень много статей. Но совсем недавно один мой знакомый, начинающий молодой программист, попросил рассказать о простейшей работе с базой данных – создание, редактирование и получение данных. Сначала я решил найти ответ в интернете и предложить ему статью, но либо я не умею пользоваться поисковиком, либо все блогеры-программисты имеют ученые степени и описывают элементарные действия с бд таким языком, что новичку тяжело разобраться с материалом. И поэтому я решил написать статью сам. Я не претендую на какие-либо таланты к учительскому или преподавательскому мастерству, но все же попробую написать статью максимально просто и понятно.
В этой статье я постараюсь по максимуму обойти теоритическую сторону вопроса и как можно больше уделить место практике. Но все же несколько теоретических моментов нужно рассказать.
И так начнем. Начнем с того, что поставим конкретную задачу и попытаемся максимально быстро и правильно ее решить. Перед нами задача: необходимо создать сайт из двух страниц – страница авторизации и страница, которую может посетить только авторизованный пользователь. Так же на этой странице нужно сделать вывод информации о пользователе. Информация о пользователе должно храниться в базе данных.
Задача понятна, составим план выполнения задачи:
1. Спроектируем и создадим бузу данных, в которой будет храниться информация о пользователе.
2. Создадим страницу с авторизацией пользователя
3. Создадим страницу с информацией о пользователе и ограничим к ней доступ.
План прост и понятен. Начнем. Какую информацию о пользователе нужно хранить в базе данных? Всю. Чем больше информации хранится в базе данных, тем более универсальный и динамический будет ваш сайт. Таким образом, создадим базу данных, а в ней создадим таблицу user со следующими полями (столбцами):
Id – В этом поле мы будем хранить числовые значения. И пусть оно заполняется само, при создании новых записей – автоинкрементное значение. Это поле будет первичным ключом. Первичный ключ, должен быть уникальный, он необходим для того, чтобы можно было однозначно обратиться к записи. Другими словами, при каждом новом создании записи поле id будет заполняться автоматически, и всегда будет увеличивать свое числовое значение.
First_name – это поле будет хранить имя пользователя, а значит должно иметь строковый тип. Строковых типов несколько, но давайте выберем varchar и выделим места в целых 255 байт.
Last_name – по своим признакам поле идентично предыдущему, только будет служить для хранения фамилии пользователя.
Login – поле для хранения логина пользователя. Идентично полям для имени и фамилии.
Password – тут будем хранить пароль. Ни чем не отличается от предыдущих полей.
Вот и все, мы за 5 мин спроектировали нашу базу данных. Теперь перейдем непосредственно к ее созданию. Для создания базы данных и таблицы давайте воспользуемся sql-патчем. Вот его код:
Создание базы данных
CREATE DATABASE `mydb` CHARACTER SET utf8 COLLATE 'utf8_general_ci';
Создание таблицы user
CREATE TABLE `user` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `first_name` VARCHAR(255) NULL DEFAULT NULL, `last_name` VARCHAR(255) NULL DEFAULT NULL, `login` VARCHAR(255) NULL DEFAULT NULL, `password` VARCHAR(255) NULL DEFAULT NULL, PRIMARY KEY (`id`) );
И создадим сразу одну запись в таблице, это будет админ с логином admin и паролем 12345:
INSERT INTO `user` (`first_name`, `last_name`, `login`, `password`) VALUES ('админ', 'админов', 'admin', '827ccb0eea8a706c4c34a16891f84e7b');
С первым пунктом нашего плана разобрались. Приступим ко второй части – создадим страницу с авторизацией. За эту страницу у нас будет отвечать скрипт login.php. Ниже я напишу код скрипта, расписывать его работу не буду, но сделаю подробные комментарии в коде.
<?php
session_start(); // запускаем сессию.
/*
* Чуть позже, если авторизация пройдут успешно, мы запишем в сессию login пользователя.
* По этой записи будем проверять, авторизован пользователь или нет
* Теперь создадим несколько констант, необходимых для работы с базой данных
* а также сделаем подключение к базе данных
* обычно все константы и подключения к базе данных для удобства выносятся в отдельный файл
* и подключаются по необходимости, но сейчас все сделаем в этом скрипте, чтоб было понятней
*/
// константы
define("HOST", "localhost");
define("USER", "root");
define("PASSWORD", "");
define("DB_NAME", "mydb");
//подключение к бд
$db_connect = mysql_connect(HOST, USER, PASSWORD, TRUE);
mysql_selectdb(DB_NAME,$db_connect);
mysql_set_charset('utf8'); // задаем кодировку для работы с бд
/*
* проверяем, если пользователь нажал "OK"
* то делаем запрос к бд и проверяем существует ли такой пользователь и такой пароль
* если существует, то создадим запись о пользователе в сессии
* и отправим пользователя на другую страницу
* Примечание:
* - Пароль в базе данных хранится в хешированном виде, поэтому сверяем с таким же видом MD5($_POST['pass'])
* - В данном примере, я полученные данные сразу подставляю в запрос, так делать категорически нельзя.
* Обязательно нужно экранировать запросы, но сейчас я этого не делаю умышленно, чтобы код был более понятен
*/
if(isset($_POST['login']) && isset($_POST['pass'])){
$sql = mysql_query("
SELECT count(*) FROM `user`
WHERE `login` = '".$_POST['login']."'
AND `password` = '".MD5($_POST['pass'])."';
") or die(mysql_error());
$row = mysql_fetch_assoc($sql);
if($row['count(*)']>0){
$_SESSION['login'] = $_POST['login'];
header("Location: /user.php");exit;
}else{
echo '<b style="color:red;">Введен не верный логин/пароль!</b>';
}
}
?>
<form action="" method="post">
<span>login: </span><input type="text" name="login" /><br/>
<span>password: </span><input type="password" name="pass" /><br/>
<input type="submit" value="OK" />
</form>
Как вы можете видеть все просто.
Теперь последний пункт нашего плана, страница с информацией о пользователе, тут тоже нет смысла что-либо описывать, и поэтому я просто приведу код с подробными комментариями. За эту страницу будет отвечать скрипт user.php, а вот и его код:
<?php
session_start();
// константы
define("HOST", "localhost");
define("USER", "root");
define("PASSWORD", "");
define("DB_NAME", "mydb");
//подключение к бд
$db_connect = mysql_connect(HOST, USER, PASSWORD, TRUE);
mysql_selectdb(DB_NAME,$db_connect);
mysql_set_charset('utf8');
//проверяем, авторизовал ли пользователь,
// если нет, то редиректим его на авторизацию
if(isset($_SESSION['login'])){
$sql = mysql_query("
SELECT * FROM `user`
WHERE `login` = '".$_SESSION['login']."';
") or die(mysql_error());
$row = mysql_fetch_assoc($sql);
?>
<table>
<tr>
<td>id</td>
<td>first_name</td>
<td>last_name</td>
</tr>
<tr>
<td><?php echo $row['id']; ?></td>
<td><?php echo $row['first_name']; ?></td>
<td><?php echo $row['last_name']; ?></td>
</tr>
</table>
<?php
}else{
header("Location: /login.php");exit;
}
/*
для разлогинивания можно использовать такой код
тут удаляются все сессионные куки и сами сессии
а потом происходит редирект на авторизацию
*//*
unset($_COOKIE[session_name()]);
unset($_COOKIE[session_id()]);
session_unset();
session_destroy();
header("Location: /login.php");
exit;
*/
?>
Вот и все. У нас получилось то, что мы и хотели.
В этой статье я показал, как можно брать информацию из базы данных. Надеюсь, что в ближайшем будущем, также как и сегодня появится свободное время, и я напишу статью о том, как можно делать запись и обновлять еже существующую запись.
Вы можете скачать исходники из этой статьи здесь.

Я начинаюший программист, работаю с денвером, я ввожу логин и пароль и нажимаю ок но почемуто выводиться No database selected, как сделать так чтобы пример заработал
Здравствуйте, проверьте правильность имени базы данных.
В этой строке: define(«DB_NAME», «mydb»);
Проверьте, чтобы Ваша база данных называлась — mydb
Не подскажите как зашифровать значение логина и пароля при подключений к БД? чтобы не хранить в открытом виде в файле конфигурации
Этого ни кто не делает, ведь ни кто не может посмотреть файл конфига, кроме людей имеющих доступ к серверу
Спасибо! Работает. Но при удачном вводе пароля у меня происходит переход на несуществующую страницу. Где это подправить? Куда подставить?
Доброго времени суток