22.04.2014 Views

php_mysql_dreamweaver_mx_2004 разработка web сайтов.pdf

php_mysql_dreamweaver_mx_2004 разработка web сайтов.pdf

php_mysql_dreamweaver_mx_2004 разработка web сайтов.pdf

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

310 Часть III. Решаем вопросы безопасности и целостности данных<br />

Давайте еще раз посмотрим на фрагмент сценария РНР, соответствующего<br />

серверному поведению Delete Record Dreamweaver. (Полностью этот сценарий<br />

был рассмотрен в главе 9.)<br />

$deleteSQL = sprintf("DELETE FROM categories WHERE id=%s",<br />

^GetSQLValueString($_POST['id'], "int"));<br />

<strong>mysql</strong>_select_db($database_Site, $Site);<br />

$Resultl = <strong>mysql</strong>_query($deleteSQL, $Site) or die(<strong>mysql</strong>_error());<br />

Здесь аргумент id, переданный методом POST, задает значение поля id записи<br />

таблицы categories, которую нужно удалить. Переменная $site хранит<br />

идентификатор соединения с сервером, a $database_site — имя базы данных.<br />

Теперь изменим его так, чтобы он проверял перед удалением записи таблицы<br />

categories, есть ли ссылающиеся на нее записи в таблице items. И разберем<br />

новый код по частям.<br />

$deleteSQL = sprintf("DELETE FROM categories WHERE id=%s",<br />

4>GetSQLValueString($_POST['id'],<br />

"int"));<br />

Это выражение целиком взято из первоначального фрагмента кода.<br />

$CheckSQL = sprintf("SELECT id FROM items WHERE catid=%s",<br />

4>GetSQLValueString($_POST['id'], "int"));<br />

<strong>mysql</strong>_select_db($database_Site, $Site);<br />

$Check = <strong>mysql</strong>_query($CheckSQL, $Site) or die(<strong>mysql</strong>_error());<br />

Подготавливаем код SQL-запроса, выбирающего из таблицы items связанные<br />

записи, и выполняем его.<br />

if (!($row_Check = <strong>mysql</strong>_fetch_assoc($Check))) {<br />

$Resultl = <strong>mysql</strong>_query($deleteSQL, $Site) or die(<strong>mysql</strong>_error());<br />

}<br />

<strong>mysql</strong>_free_result($Check);<br />

Проверяем, есть ли в получившемся после выполнения этого запроса наборе<br />

записи, и, если их нет, выполняем запрос удаления. После чего обязательно<br />

удаляем из памяти серверного компьютера проверочный набор записей<br />

$check — нам он больше не нужен, а компьютерная память может пригодиться<br />

для чего-нибудь более важного.<br />

Вот такой не очень сложный код РНР. Мы можем взять сохраненную ранее<br />

копию первоначальной страницы Category_delete.<strong>php</strong> и вставить этот код<br />

в нужное место. А он будет работать.<br />

Но возникает другой вопрос: насколько оперативно обновленный сценарий<br />

будет выполнять проверку на существование связанных записей? К сожалению,<br />

существует очень большая вероятность того, что ведущий Б успеет

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!