Глава 36. Работа с базами данных___________________________913

для создания файла (O_CREAT). Значени modeустанавливает уровень доступа к файлу. Если указать оббо, это означает, что пользователь может осуществлять запись и чтение, а одновременно два или более посетителей могут только считывать информацию.

$database=tie(%db, 'DB_File', $file, 0_RDWR¦0_CREAT, 0660);

С помощью следующей простой строки осуществляется запись информации. Здесь вы используете переменну hash.Синтаксис имеет вид:

$hashname{key}=value

Следующая строка помещает $form 'name'}в базу данных как ключ и приписывает ему значение $form 'email'}:

$db{$form 'name'}}==$form 'email'};

Теперь используйте функцию untie (), которая разрывает связь с базой данных, и функцию undef(), которая отменяет определение переменной

$database.

untie(%db);- <

undef($database);

Хотя база данных dbm может содержать только пары "ключ-значение", при помощи нехитрого трюка вы можете добавить другие поля. Например, если вы хотите включить телефонный номер, прибавьте его к значению, отделив его каким-либо разделителем. Позже вы сможете идентифицировать отдельные значения. Ниже показано применение функции joint), которая объединяет строки, разделенные двоеточием:

$db{$form('name'}}=joint":",$form('email'),$form{'phone'));

Например, если$form 'email'}содержит строкуjdoe@selah.net И $form{ 'phone'}содержит строку555-5555,то функцияjoin()разместит в базе данных строку:

jdoe@selah.net:555-5555

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

Что происходит, когда пользователь пытается ввести значение, которое совпадает с одним из уже существующих ключей? Согласно скрипту, работа продолжится, будто ничего не произошло. Однако, ввиду того, что каждый ключ должен быть уникальным, скрипт не добавит новую информацию. Чтобы предупредить об этом пользователя, в скрипт требуется включить строку, предупреждающую об ошибке:

Serror if $db{"$fonn('name'}"};

Процедура error выведет сообщение об ошибке и позволит сделать повторный ввод: