Перед тем как сесть писать новый скрипт вы точно хоть раз, но задумывались ? писать его с использованием баз данных(БД) или все так же, как привыкли ? на файлах?
Эта статья на примере гостевой книги поможет вам сделать выбор в правильную сторону.
Как мы работаем с файлами?
Заранее условимся, что функция file() это упрощение того, что описано ниже?
Работать с файлами легко. Это делается примерно в 3 этапа:
1. Открыл файл
2. Считал всю(или часть) информацию
3. Закрыл файл
Теперь(с точки зрения скрипта) мы имеем просто кучу символов разделенных переводом строки.
Павел|pavel@mail.ru|43284343|Привед, классный у тебя сайтик?!
Но заранее, когда мы создавали файл, мы условились, что данные будут разделены символом ?|?.
1.
a) Павел
б) pavel@mail.ru
в) 43284343
г) Привед, классный у тебя сайтик?!
2.
а) Александра
б) alex-sashka@gmail.com
в) 384323
г) Приветик, кот?нок, суперовый сайтик!
3.
а) Евгений
б) gg_potstolom@pochta.ru
в) 11132342
г) ЫЫЫ... Здарова, чертяко!
a) ? имя посетителя
? адрес почтового ящика
c) ? номер ICQ
d) ? сообщение
Теперь перебирая каждую строку, разбиваем е? на ?подстроки?. Зная позицию каждой подстроки, мы можем сказать где находиться имя посетителя, а где его сообщение.
Дело за малым ? вывести все красиво на страницу.
Чтобы добавить сообщение нам нужно:
1. Открыть файл для добавления
2. Записать в конец данные
3. Закрыть файл
Еще нам нужно следить за тем, чтобы в файл попали данные без специального, условленного символа-разделителя ? ?|? и данные без ?перевода строки?!
if( @$_GET['action'] == "add_post" ) // Если мы хотим добавить сообщение { if( !empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['message']) ) // Проверяем на наличие обязательных данных { // Удаляем запрещенные символы $name = str_replace('|', '!', htmlspecialchars(strip_tags($_POST['name']))); $email = str_replace('|', '!', htmlspecialchars(strip_tags($_POST['email']))); $icq = str_replace('|', '!', htmlspecialchars(strip_tags($_POST['icq']))); $message = str_replace('|', '!', htmlspecialchars(strip_tags($_POST['message'])));
$fp = @fopen ("guestbook.txt", "a+"); // Открываем файл для добавления в конец
if( @fwrite ($fp, "$name|$email|$icq|$messagen") ) // Проверяем на успешность записи в файл { print "<p style='color:green;'>Сообщение успешно добавлено!</p>"; }
@fclose ($fp); // Закрываем файл } else { print "<p style='color:red;'>Введены не все данные!</p>"; } }
?>
<hr>
<?php
$fp = @fopen ("guestbook.txt", "r"); // Открываем файл для чтения $gb_content = @fread($fp, filesize("guestbook.txt")); // Читаем все символы из файла @fclose ($fp); // Закрываем
if( !empty($gb_content) ) {
$gb_content = split("n", $gb_content); // Разбили на строки
for( $i=0; $i<count($gb_content)-1; $i++ ) { list( $gb_name, $gb_email, $gb_icq, $gb_message ) = explode('|', $gb_content[$i]); // Разбиваем на подстроки и получаем соответствующие данные
Что бы работать с БД нам необходим хостинг с поддержкой хотя бы MySQL. В этом конечно виден явный минус БД, но все по порядку?
Работать с БД не так уж и сложно, как это представляется начинающим программистам! Главное научиться составлять запросы(а это просто как 2*2), и не бояться столкнуться с десятком новых терминов.
БД работает почти точно так же как и файлы:
1. Открываем БД
2. Читаем/записываем данные
3. Закрываем
Главным отличием является то, что мы получаем не кучу символов, а уже упорядоченный массив данных! То есть мы не морочим себе голову вопросами ? ?А какой поставить разделитель??, ?Как разбить на подстроки??, ?Каким по порядку идет поле, к примеру, номер ICQ??, ?Как отфильтровать входные данные на предмет перевода строки??.
Вс? это уже предусмотрено базой данных?
Созда?м БД, в ней таблицу guestbook с соответствующими полями:
Осталось только соедениться с БД и сделать запрос на выборку данных:
SELECT * FROM guestbook
Слово SELECT означает операцию ?чтения? данных. Символ ?*? ? что нам нужны поля: ?имя посетителя?, и ?почтовый адрес?, и ?номер ICQ?, и ?сообщение?, В общем все данные. FROM guestbook ? означает, что данные мы хотим прочитать из таблицы ?guestbook?. Грубо говоря таблица ? это и есть файл.
Чтобы записать данные в БД просто выполняем запрос:
INSERT ? говорит нам, что это операция вставки, ?guestbook? ? таблица для вставки, дальше перечислены поля в которые необходимо записать данные, VALUES ? означает что дальше идет перечисление самих данных через запятую.
Этой операции вполне достаточно чтобы в гостевой книге появилась новая запись.
Как выглядит работа с БД в Php-коде:
Прежде чем опробовать код вам нужно создать БД с названием guestbook. В этой БД создать таблицу guestbook с полями id, name, email, icq, message. Или просто выполнить SQL запрос:
CREATE TABLE `guestbook` ( `id` INT NOT NULL AUTO_INCREMENT , `name` VARCHAR( 50 ) NOT NULL , `email` VARCHAR( 70 ) NOT NULL , `icq` VARCHAR( 10 ) NOT NULL , `message` TEXT NOT NULL , PRIMARY KEY ( `id` ) );
Код гостевой:
<html>
<head> <title>Пример гостевой книги с использованием БД</title> </head>
Львиную долю времени занимает обеспечение безопасности скрипта. То есть зачем нам скрипт, если его легко могут вывести из строя?
Ситуация с файлами обстоит плачевна? Иногда забывают ?закрывать? файлы от чтения из вне и вс? содержимое гостевой, а может и списка зарегистрированных пользователей с паролями и почтовыми адресами попадает в руки к злоумышленникам.
Забывают экранировать ввод нового сообщения и вся информация в гостевой превращается в кашу?
Базы данных тоже не лишены недостатков. Если программист не проверяет передаваемые из формы данные на правильность, то злоумышленник спокойно может прочитать, к примеру, список всех пользователей, или зайти под другим ником. Данный вид хака называется SQL Injection.
Работы в улучшении защиты уже ведутся давно. Например, в библиотеке DbSimple от DKLab это решено с помощью placeholder-ов.
Выводы
Я, например, работаю с БД, выбирая тем самым безопасность и структурированность моих данных, но и не отрицаю использование файлов. Например, есть хорошие способы хранения данных в файлах:
You can post now and register later.
If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.
Здравствуйте, подскажите какой тег использовать для увеличения значения, пример на картинке.
Вроде, про такой тег я слышала. Если есть тег прогресс бар, значит и такое должно быть.
Question
Maslakoff
Базы данных или файлы?
Перед тем как сесть писать новый скрипт вы точно хоть раз, но задумывались ? писать его с использованием баз данных(БД) или все так же, как привыкли ? на файлах?
Эта статья на примере гостевой книги поможет вам сделать выбор в правильную сторону.
Как мы работаем с файлами?
Заранее условимся, что функция file() это упрощение того, что описано ниже?
Работать с файлами легко. Это делается примерно в 3 этапа:
1. Открыл файл
2. Считал всю(или часть) информацию
3. Закрыл файл
Теперь(с точки зрения скрипта) мы имеем просто кучу символов разделенных переводом строки.
Делаем разбиение по строкам и получаем уже массив строк файла.
Но заранее, когда мы создавали файл, мы условились, что данные будут разделены символом ?|?.
1.
a) Павел
б) pavel@mail.ru
в) 43284343
г) Привед, классный у тебя сайтик?!
2.
а) Александра
б) alex-sashka@gmail.com
в) 384323
г) Приветик, кот?нок, суперовый сайтик!
3.
а) Евгений
б) gg_potstolom@pochta.ru
в) 11132342
г) ЫЫЫ... Здарова, чертяко!
a) ? имя посетителя
? адрес почтового ящика
c) ? номер ICQ
d) ? сообщение
Теперь перебирая каждую строку, разбиваем е? на ?подстроки?. Зная позицию каждой подстроки, мы можем сказать где находиться имя посетителя, а где его сообщение.
Дело за малым ? вывести все красиво на страницу.
Чтобы добавить сообщение нам нужно:
1. Открыть файл для добавления
2. Записать в конец данные
3. Закрыть файл
Еще нам нужно следить за тем, чтобы в файл попали данные без специального, условленного символа-разделителя ? ?|? и данные без ?перевода строки?!
Итак, мы формируем строчку вида:
?имя пользователя?|?адрес почты?|?номер ICQ?|?сообщение?
Сохраняем в файл и радуемся жизни!
Как выглядит работа с файлами в Php-коде:
Как мы работаем с базой данных(БД)?
Что бы работать с БД нам необходим хостинг с поддержкой хотя бы MySQL. В этом конечно виден явный минус БД, но все по порядку?
Работать с БД не так уж и сложно, как это представляется начинающим программистам! Главное научиться составлять запросы(а это просто как 2*2), и не бояться столкнуться с десятком новых терминов.
БД работает почти точно так же как и файлы:
1. Открываем БД
2. Читаем/записываем данные
3. Закрываем
Главным отличием является то, что мы получаем не кучу символов, а уже упорядоченный массив данных! То есть мы не морочим себе голову вопросами ? ?А какой поставить разделитель??, ?Как разбить на подстроки??, ?Каким по порядку идет поле, к примеру, номер ICQ??, ?Как отфильтровать входные данные на предмет перевода строки??.
Вс? это уже предусмотрено базой данных?
Созда?м БД, в ней таблицу guestbook с соответствующими полями:
1) ? имя посетителя
2) ? адрес почтового ящика
3) ? номер ICQ
4) ? сообщение
Заполняем данными? Получаем:
Осталось только соедениться с БД и сделать запрос на выборку данных:
Слово SELECT означает операцию ?чтения? данных. Символ ?*? ? что нам нужны поля: ?имя посетителя?, и ?почтовый адрес?, и ?номер ICQ?, и ?сообщение?, В общем все данные. FROM guestbook ? означает, что данные мы хотим прочитать из таблицы ?guestbook?. Грубо говоря таблица ? это и есть файл.
Чтобы записать данные в БД просто выполняем запрос:
INSERT ? говорит нам, что это операция вставки, ?guestbook? ? таблица для вставки, дальше перечислены поля в которые необходимо записать данные, VALUES ? означает что дальше идет перечисление самих данных через запятую.
Этой операции вполне достаточно чтобы в гостевой книге появилась новая запись.
Как выглядит работа с БД в Php-коде:
Прежде чем опробовать код вам нужно создать БД с названием guestbook. В этой БД создать таблицу guestbook с полями id, name, email, icq, message. Или просто выполнить SQL запрос:
Код гостевой:
Про безопасность
Львиную долю времени занимает обеспечение безопасности скрипта. То есть зачем нам скрипт, если его легко могут вывести из строя?
Ситуация с файлами обстоит плачевна? Иногда забывают ?закрывать? файлы от чтения из вне и вс? содержимое гостевой, а может и списка зарегистрированных пользователей с паролями и почтовыми адресами попадает в руки к злоумышленникам.
Забывают экранировать ввод нового сообщения и вся информация в гостевой превращается в кашу?
Базы данных тоже не лишены недостатков. Если программист не проверяет передаваемые из формы данные на правильность, то злоумышленник спокойно может прочитать, к примеру, список всех пользователей, или зайти под другим ником. Данный вид хака называется SQL Injection.
Работы в улучшении защиты уже ведутся давно. Например, в библиотеке DbSimple от DKLab это решено с помощью placeholder-ов.
Выводы
Я, например, работаю с БД, выбирая тем самым безопасность и структурированность моих данных, но и не отрицаю использование файлов. Например, есть хорошие способы хранения данных в файлах:
1. Использование функций serialize() и unserialize()
2. Хранение в ini-файлах
Иногда приходиться пользоваться и такими способами.
Список литературы для углубленного изучения
1. Основы работы с MySQL в PHP
2. "Работа с MySQL в PHP: с чего начать?"
3. Работа с MySQL в PHP: подробно (PHP, MySQL, веб-программирование)
4. Обучающая статья от ведущего разработчика phpMyAdmin Марка Делисла
5. Работа с MySQL: Подробнее(Как формировать запросы)
6. Библиотека DbSimple от DKLab
Статьи не сильно объемные и не займут много времени, но зато ваш exp значительно возрастет.
Для тех, кто привык читать документы MS Word.
Link to comment
Share on other sites
36 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.