|
Пишем на PHP: Добавляем текст в базу (продолжение)Руслан Курепин
"Продолжаем разговор..."(с) Итак. Зачитываю собственные комментарии. Вызываем функцию проверки данных для БД и функцию адаптации текста. Если одна из них вернет ошибку, то мы останавливаемся с возвратом этой самой ошибки. Заносим в БД новую запись: название текста, дату, номер рубрики. Помните, как в таблице было декларировано поле 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 © <LMTH>. Все материалы являются собственностью их авторов.
При перепечатывании ссылка на http://www.magaz.org/ как на источник информации обязательна. Правила использования материалов журнала |