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

"Продолжаем разговор..."(с)

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

Just do it!..
Интересно, мы напишем хоть одну сложную функцию в нашем проекте, или нет?

Итак. Зачитываю собственные комментарии.

Вызываем функцию проверки данных для БД и функцию адаптации текста. Если одна из них вернет ошибку, то мы останавливаемся с возвратом этой самой ошибки.

Заносим в БД новую запись: название текста, дату, номер рубрики.

Помните, как в таблице было декларировано поле t_id? Оно было декларировано как auto_increment. А это значит, что при добавлении новой записи содержимое этого поля определяется автоматически -- плюс один к последнему добавленному в базу значению этого поля.

Вот нам это самое число и надо выдернуть из базы. Это же уникальный идентификатор добавленного текста! Он вполне может служить нам и уникальным именем файла для хранения текста на диске.

В этом нам поможет SQL-запрос select last_insert_id. Очень короткий запрос, который возвратит нам последний сгенерированный номер.

    Можно даже ничего более не уточнять, так как мы не закрывали сессию с MySQL, и база знает, что именно мы от нее хотим.

Записали идентификационный номер в переменную $this->in_text_id.

Теперь можно записать и файл на диск.

Вот тут, мы делаем проверку на открытие файла.

if(fopen(:.

А имя файла мы формируем из переменной $this->PATH_DATA (которую описали в классе class_vars) и идентификационного номера текста, который получили из базы (in_text_id).

Если открытие файла для записи прошло удачно, то мы записываем в файл содержимое переменной $this->in_text и закрываем файл.

Если же открытие прошло с ошибкой, то положительное тело if выполняться не будет, а выполнится тело false, в котором мы что делаем? Правильно! Мы возвращаем все на круги своя: удаляем из таблицы tbl_texts запись, которую только что сделали: "удалить из таблицы tbl_texts запись, где идентификационный номе равен $this->in_text_id".
И затем уже возвращаем код ошибки 31.

Рекомендую этот номер ошибки записать в class_utils как:

$err[31]="Не могу открыть файл для записи: (".$this->PATH_DATA."/".$this->in_text_id.")";

Понятно, почему так? В случае ошибки мы получим не только соответствующее сообщение, но и узнаем имя файла, который не удалось открыть, и полный путь к этому файлу. Этой информации более чем достаточно, чтобы разобраться в возникшей проблеме.

Вот так. Мы уж умеем добавлять, изменять и удалять данные в таблице рубрик. Умеем добавлять новый текст в базу сайта. Что нам еще надо? Я так думаю, что надо уметь удалять из базы ошибочный или устаревший текст. И снабдить текст атрибутом "hidden", чтобы прятать его от посторонних глаз, когда он не нужен на сайте, или просто еще не готов к публикации.

На этом сегодня закругляемся, так как понедельник. Этот день всегда для меня тяжел, а сегодня как-то особенно много работы.


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

    Первое задание. Как надо переписать функцию in_text_data_check() из прошлого урока, чтобы избежать присваивания нового текста к несуществующей рубрике?

    Второе задание (для гурманов). Как должна выглядеть функция
    in_text_adapt() из прошлого урока, чтобы текст, добавленный через браузер в кодировке KOI-8, отлавливался, и преобразовывался в win-1251 (в win-1251 мы записываем текст на диск).

    Свои варианты решений присылайте на форум, или мне лично (я их тогда сам выложу в форум). Там их и обсудим.



До завтра!


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



copyright ©2000-2017 Ruslan Kurepin