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

Продолжаем разговор, -- как говорил незабвенный Карлсон.

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

Давайте теперь их добавим.

Только прежде я хочу немного изменить функцию in_cat_add_check(), которою мы написали. Давайте не будем передавать указанной функции в качестве параметра название рубрики. Лучше мы для нее объявим глобальную переменную, которой и будем пользоваться для хранения названия. И будем так поступать и впредь -- каждое значение будет у нас иметь свою обособленную переменную.

Так будет удобнее для понимания и красивее, что тоже приятно.

То есть, функция должна выглядеть вот так:


Не много изменений. Мы добавили перед описанием функции декларацию новой переменной in_cat_name, которая будет содержать название рубрики, убрали из объявления функции локальную переменную name, а в теле функции заменили все $name на $this->in_cat_name. Не сложно.

    Вообще, я сам так делаю, и вам рекомендую: во-первых, старайтесь называть ваши функции и переменные по какой-то одной схеме, чтобы не запутаться. А во-вторых, декларируйте переменные в начале того класса, для которого они декларируются. Вот переменные, начинающиеся на in_... -- относятся к классу class_in, поэтому они так начинаются и декларировать их надо в начале этого класса, чтобы всегда было видно -- какие переменные уже объявлены и как они называются. Кстати, следующая часть за in_ указывает на то, к какой группе функций переменная относится. В нашем случае речь идет о рубриках, поэтому переменная имеет продолжение cat_. Не ленитесь давать функциям и переменным длинные понятные имена. Поверьте, лучше потратить время на написание длинных понятных имен, чем потом на вспоминание их имен и их предназначений.

Так вот, давайте теперь воспользуемся переделанной функцией для проверки данных, и добавим эти самые данные в базу.


Мне уже начинает надоедать это... ни одной сложной функции пока не написано. Все как-то очень просто и примитивно. Я уж и запутываю вас, и заставляю переписывать функции на новый лад, добрались уже до самого сердца, если можно так сказать, нашего движка, а все ничего сложного...

Итак, из чего же состоит функция добавления в базу названия рубрики.

Она состоит из:

1. Вызова функции проверки на правильность названия. Видите, мы сразу вызываем in_cat_add_check(), чтобы получить от нее ошибку выполнения. Если название, содержащееся в переменной in_cat_name пройдет все проверки, и в базе не окажется такого же названия, мы получим в нашу переменную err номер ошибки -- ноль. Если же это не так, то мы получим какой-то другой номер ошибки. В последнем случае мы его тут же возвращаем дальше по цепочке, не пытаясь ничего более делать: нам надо донести до пользователя информацию об ошибке. Мы еще увидим, как работает эта система передачи номера ошибки.

2. Формируем примитивный запрос в БД: добавление новой записи. Убежден, разбирать строку запроса мне не придется, вы уже отлично с эти справляетесь сами. Если это не так, обратитесь к главе язык SQL.

3. Возвращаем 0 в качестве ошибки -- подтверждение того, что функция наша отработала успешно.

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

Теперь ее удалим.

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

Добавьте еще одну переменную, и написать функцию удаления записи из таблицы рубрик не составит никакого труда.


Все. Удалили.

Или не все? Или надо было произвести проверку на существование такой записи в базе, прежде чем ее удалять? Да, так и надо было сделать, если бы эта возможность была публичной. Например, когда посетитель сайта удаляет что-то из своей регистрационной карточки. Тогда важно лишний раз проверить и доложить пользователю: операция удаления произошла с ошибкой, ошибка заключается в том, что нет такой записи в базе. Но нам этого не нужно. Рубрики редко будут удалять, а функция удаления будет вызываться из защищенного паролем раздела сайта, куда вредный хакер еще должен как-то добраться, прежде чем попытаться удалить что-то не то.

Но необходимую защиту мы все же поставили -- преобразовав содержимое переменной in_cat_id в целое число. И если по ошибке или по причине вредительства в данной переменной окажется какая-то вредоносная строка, то она в процессе преобразования попросту превратится в значение "0". И функция нормально отработает запрос в базу: "удалить из таблицы рубрику под номером 0". Такого номера рубрики у нас быть не может, поэтому ничего страшного и не произойдет.

Другое дело -- переименование рубрики. Вот тут нам опять придется проверять название на соответствие нашим правилам. Но это не страшно. Не зря же я вынес проверку в отдельную функцию. Мы просто ее вызовем, как вызывали в in_cat_add.


Готово.

1. Приводим номер рубрики к целому числу.

2. Запрашиваем из базы запись с этим номером. Если такого нет, то возвращаем соответственную ошибку. Не забудьте добавить в файл utils.class ошибку под номером 24:

$err[24]="Нет такой рубрики в базе";

Хотя, если быть честным, можно было бы тут возвратить номер ошибки "1". Ведь это больше походит на сбой в системе или на ее взлом, чем на обычную ошибку. Ну да ладно, распишем ее отдельно, пусть будет все подробно.

3. Проверяем данные на корректность, воспользовавшись уже написанной проверкой.

4. И запрашиваем базу на предмет обновления данных (update).

Все.

Вот мы и написали первую группу функций, которая позволяет нам работать с базой рубрик. Причем, вызывать эти функции мы можем как с сайта, так и из других скриптов. Например, добавлять рубрики в пакетном режиме. Но это уже тема других уроков.

Пока!

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



copyright ©2000-2017 Ruslan Kurepin