На тему работы с базой данных существует очень много статей. Но совсем недавно один мой знакомый, начинающий молодой программист, попросил рассказать о простейшей работе с базой данных – создание, редактирование и получение данных. Сначала я решил найти ответ в интернете и предложить ему статью, но либо я не умею пользоваться поисковиком, либо все блогеры-программисты имеют ученые степени и описывают элементарные действия с бд таким языком, что новичку тяжело разобраться с материалом. И поэтому я решил написать статью сам. Я не претендую на какие-либо таланты к учительскому или преподавательскому мастерству, но все же попробую написать статью максимально просто и понятно.
В этой статье я постараюсь по максимуму обойти теоритическую сторону вопроса и как можно больше уделить место практике. Но все же несколько теоретических моментов нужно рассказать.
И так начнем. Начнем с того, что поставим конкретную задачу и попытаемся максимально быстро и правильно ее решить. Перед нами задача: необходимо создать сайт из двух страниц – страница авторизации и страница, которую может посетить только авторизованный пользователь. Так же на этой странице нужно сделать вывод информации о пользователе. Информация о пользователе должно храниться в базе данных.
Задача понятна, составим план выполнения задачи:
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
Не подскажите как зашифровать значение логина и пароля при подключений к БД? чтобы не хранить в открытом виде в файле конфигурации
Этого ни кто не делает, ведь ни кто не может посмотреть файл конфига, кроме людей имеющих доступ к серверу
Спасибо! Работает. Но при удачном вводе пароля у меня происходит переход на несуществующую страницу. Где это подправить? Куда подставить?
Доброго времени суток