Дійсна потужність сервера бази даних стає очевидною при безпосередній зміні бази даних.
!!!!! |
Через те, що модифікація бази даних робиться сервером безпосередньо, результати дозволу файла текстових баз даних тут не застосовуються. Замість цього, найбільші сервери баз даних мають власні схеми прав доступу, які можуть бути використатиними, для дозволу доступу тільки для певних користувачей мати до конкретних баз даних. |
Тепер ми розглядаємо CGI, який додає записи до бази даних. Ще раз - ми набуваємо викликані з бази даних замість табличних.
#!/bin/perl
require cgi_head;
use Msql;
$dbh = Connect Msql; # під'єднатися до серверу mSQL
SelectDB $dbh "addresses" #
Query $dbh "INSERT INTO addresses ( name, phone, street, city, state, zip ) VALUES
В('$FORM{'name'}, $FORM{'phone'}, $FORM{'street'}, $FORM{'city'}, $FORM{'zip'} )";
print <<EOF;
<HTML><HEAD><TITLE>Addition successful</title><head><BODY>
Your entry has been added to the address book.
<A HREF="add.html">Go</a> back to the form to add another entry.
</body></html>
EOF
У випадку пласкої текстової версії, виробляється набагато гнучкіша схема доповнення. Звичайно, найбільша проблема у використанні сервера бази даних - знайти його. Є багато ситуацій, в яких ви не можете мати доступу до нього. Також, якщо текстова база даних стає недостовірною, ви завантажуєте її у ваш улюблений текстовий редактор і виправляєте її. Якщо ваша реляційній база даних стає недостовірною, та ви - не експерт з баз даних, вам краще взяти останні резервні копії.
Тепер, нарешті, вилучення і модифікація записів у базі даних. Подібно текстовій базі даних, зміна повинна бути внесена до форми HTML, яка генерується програмою пошуку. На відміну від текстової бази даних, ми не маємо унікального номера ID, щоб розпізнавати вхід. Таким чином, ми повинні вибрати інший унікальний атрибут, щоб розпізнати вхід. Ми могли б додати номер ID в базу даних, але заради простоти, ми використовуватимемо ім'я, як унікальне поле. (І, якщо ви знаєте два людей з точно тими ж першими, останніми, і середніми іменами, ви знаєте дуже багато людей.)
Програма CGI пошуку
print "</pre><br>";
print "<A HREF=\"addrbk.html\">Go</a> back to the form to make another search.<br>\n";
print "</body></html>\n";
стає такою :
print "</pre><br>";
print "<A HREF=\"addrbk.html\">Go</a> back to the form to make another search.<br>\n";
if ($I == 1) {
print "<A HREF=\"change.cgi?a=d&name=$arr[0]\">Delete</a> this entry.<br>";
print "<A HREF=\"change.cgi?a=c&name=$arr[0]\">Modify</a> this entry.<br>";
}
print "</body></html>\n";
безпосереднє спрощення CGI:
#!/bin/perl
require cgi_head;
use Msql;
$dbh = Connect Msql;
SelectDB $dbh "addresses";
$all = "name, phone, street, city, state, zip";
if ($FORM{'a'} eq "d") {
Query $dbh "DELETE FROM addresses WHERE name=$FORM{'name'}";
print <<EOF;
<HTML><HEAD><TITLE>Deletion successful</title></head><BODY>
<h3>Your entry has been deleted</h3>
<A HREF="addrbk.html">Go</a> back to the form to make another search.
</body></html>
EOF
die;
} elsif ($FORM{'a'} eq "c") {
$guy = Query $dbh "SELECT $all FROM addresses WHERE name=$FORM{'name'}";
@guy = FetchRow $guy;
print <<EOE;
<HTML><HEAD><TITLE>Modify Me</title></head><BODY>
<h4>Modify your entry in the form below</h4>
<FORM ACTION="change.cgi" METHOD="POST">
<INPUT TYPE=HIDDEN NAME="a" VALUE="m">
Name: <INPUT SIZE=45 NAME="name" VALUE="$guy[0]"><br>
Phone: <INPUT SIZE=45 NAME="phone" VALUE="$guy[1]"><br>
Street: <INPUT SIZE=45 NAME="street" VALUE="$guy[2]"><br>
City: <INPUT SIZE=20 NAME="city" VALUE="$guy[3]">
State: <INPUT SIZE=3 NAME="state" VALUE="$guy[4]">
Zip: <INPUT SIZE=6 NAME="zip" VALUE="$guy[5]">
<br><INPUT TYPE=SUBMIT VALUE=" Modify Entry ">
<INPUT TYPE=RESET VALUE=" Reset Form ">
</form></body></html>
EOE
die;
} elsif ($FORM{'a'} eq "m") {
foreach (keys %FORM) { # забрати дані з форми
$query =. " $_ = $FORM{'$_'},; # по одній лінії.
}
$query =~ s/,$//; # Get rid of that annoying trailing ','
Query $dbh "UPDATE addresses SET $query WHERE name=$FORM{'name'}";
print <<EOF;
<HTML><HEAD><TITLE>Modification successful</title></head><BODY>
<h3>Your entry has been modified</h3>
<A HREF="addrbk.html">Go</a> back to the form to make another search.
</body></html>
EOF
die; # Th' th' that's all folks
}
Це так просто, як і у попередньому випадку. П'ятдесят стрічок Perl проти понад однієї сотні. Справжня гнучкість сервера бази даних відкриває двері до різноманітних можливостей.
Світ взаємодії бази даних з Web є такий же широким як і зовнішній світ. Для будь-якої проблеми, є дюжини розв'язків, чимсь кращих за інші. Це зводиться до особистої переваги і досвіду. Для особи з навичкою обробки даних в Windows, можливо, буде найлегше використовувати Windows-базу даних як наприклад Paradox або Access разом з одним з готових інтерфейсів CGI для них. Програміст C може віддати перевагу грі з одним з APIs, передбаченого для різних серверів SQL як наприклад Sybase, Oracle, SQL Server, і mSQL. Хто-небудь, який є "тільки іншим Perl-хакер" повинний почувати себе найбільш зручно з одним з багатьох інтерфейсів Perl до серверу бази даних SQL і ODBM (або, можливо, вони повинні тільки написати одного з них для себе).
Всередині цього королівства великої гнучкості, ефективність взаємодії бази даних з Web залежить від багатьох речей:
· Які інструментальні засоби доступні? Чи є ви адміністратором системи UNIX, підсиленої потужним сервером? Або, можливо, ваш Internet-зв'язок є тільки PPP-з'єднанням з Windows-машиною. Якщо ви використовуєте Windows-платформу, не варто воювати з погано написаними мовами програмування, коли є величезна бібліотека вже доступних інструментальних засобів. Якщо UNIX є вашою опорою, ви можете подумати перед вибиттям артилерійським вогнем декількох тисяч доларів для серверів Sybase або Oracle, коли є безкоштовні інструментальні засоби, як, наприклад, легко доступні mSQL і POSTGRES. (Але з другого боку знову, можливо ваші потреби такі, що лише тільки high-end-сервер баз даних буде достатнім.) Варто бути обізнаним що є для вас доступним.
Використання CGI для інтеграції баз даних з Web природньо випливає з можливостей CGI. Не звертаючи уваги на недоліки CGI, взаємодія баз даних, можливо, одна з єдиних областей, в яких CGI збережеться як найкращий інструментальний засіб перед обличчям нових технологій.