А это клавиатура, с помощью которой я творю...
http://kurepin.ru/php/text/
Rambler's Top100
Пишем на PHP: Добавляем текст в базу (начало)

Что ж... обещания принято выполнять. Сегодня пишем процедуру добавления в базу нашего сайта нового текста. По крайней мере — начнем писать.

Не буду плющить вас долгим предисловием, приступим к работе. Налейте себе чашку крепкого кофе — миндальничать сегодня не буду. Пишем по-взрослому.

На какие этапы логично разбить эту задачу? Мне думается, что на такие:

1. Проверка данных на корректность.
2. Приведение текста к нужному виду
3. Сохранение текста на диске
4. Добавление необходимых данных в БД.

Согласны? Вот и начнем с самого начала.

Функции можно добавлять в class_in, он ведь у нас отвечает за добавление данных.

Нам понадобятся переменные.

var $this->in_text; // сам текст
var $this->in_text_name; // название текста
var $this->in_text_id; // id текста
var $this->in_text_dt; // дата добавления
var $this->in_text_cat; // рубрика

Вах! Ну-ка, обратимся к главе, где мы создавали базу данных. Ошибку видите? Нет, не видите. Подсказываю: а где же мы будем хранить номер рубрики? В таблице tbl_texts нет поля для номера рубрики, соответствующей данному тексту. Какая оплошность! Ничего, сейчас исправим:

alter table tbl_texts add column t_cat int not null;

Все. Теперь есть! А те, кто читают данный курс не подряд — пожалеют об этом, и не один раз (тут злобная ухмылка).

Для тех, кто читает подряд, перевожу: изменить таблицу tbl_texts, добавив в нее целочисленное поле t_cat.

Свою ошибку удачно исправили, теперь будем проверять на ошибки данные пользователя, управляющего нашей системой (готовьте class_utils — добавлять описания новых ошибок).

Нам много не потребуется:

function in_text_data_check()
 {
  $this->in_text_name=AddSlashes($this->in_text_name);
  if(strlen($this->in_text_name)==0) return(24);
  if(strlen($this->in_text_name)>200) return(25);
  
  return(0);
 }

Тут и пояснять нечего. Добавьте в class_ulils две новые ошибки:

$err[24]="Вы не задали название тексту";
$err[25]="Длинна названия текста превышает допустимые 200 символов";

и поехали дальше...

Теперь надо серьезно подумать над тем, в каком виде мы будем хранить тексты.

Лично я предпочитаю хранить их в html-формате. Почему? В данной задаче этот формат будет чаще использоваться — запрашиваться с сайта. А если надо будет "выгрызть" html-тэги по какой-то нужде — выгрызем, не впервой.

    На самом деле, храните тексты просто в двух видах. Тогда ничего выгрызать или заменять не придется. При сегодняшних объемах дискового пространства это вполне доступно. В данном случае я просто хочу оставить за собой повод вернуться к "парсингу", когда дойдем до почтовых рассылок или чего-то подобного.

А что нужно, чтобы привести текст к html-виду? Для это надо заменить управляющие спецсимволы html-тэгами.

    Хочу вам дать еще один совет. Не сильно важный, но может пригодиться. Прежде чем превратить символы А в символы Б, попробуйте превратить символы Б в символы А — вдруг они уже есть и могут где-то спутать нам карты.

Предлагаю такие условия для добавляемого текста:

1. Текст не должен превышать 100Кб.
2. Текст не должен быть короче 100 символов.
3. Подгружаемый текст не должен иметь html-тэгов и спецсимволов, кроме: <a>, <b>, <i>, <u>, <img>... м-м-м-м... <div>. Хватит пока. Все остальные символы мы просто выкинем в помою.

Попробуем реализовать задуманное....
В общем-то, это все. Только не забывайте описывать ошибки:

$err[26]="Текст слишком короткий";
$err[27]="Текст слишко длинный";

На что следует обратить внимание в этой функции.

Первой строкой мы выкидываем все html-тэги из текста, кроме тех, что указали в кавычках. Это очень удобная функция PHP. Ибо моделировать этот процесс обычным регекспом — не самая простая задача.

Второй строкой мы перед каждым переносом строки (EOL — "\n" — Enter) добавили тэг <br>, указывающий браузеру на перенос строки.

    Вынужден признаться: никогда в жизни не пользовался функцией nl2br(). И вам не советую. Она вам вместо <br> наставит XHTML-совместимых <br />. Оно вам надо? Замените эту функцию простейшим регекспом:

    $this->in_text=preg_replace("/\n/","<br>\n",$this->in_text);

    и всего делов.


И вот только теперь (прошу обратить на это особое внимание) мы замеряем размер нашего текста. Только после того, как мы все выкинули и все добавили.

Ну что ж, данные мы приготовили, можно теперь добавить их в базу сайта.

Но это уже не сегодня — вынужден сворачиваться. До завтра!

[шаг назад] [печатать] [в начало сайта]



copyright ©2000-2017 Ruslan Kurepin