Отображаем сообщения из базыСледующим шагом будет написание CGI-программы, которая выдает сообщения из базы данных. Вызываться эта программа будет несколько иначе. Добавьте в файл /gb/index.html после HTML-формы следующую строчку: <!--#include virtual="/cgi-bin/gbshow.exe?dsn=gb"-->
При запросе пользователем файла /gb/index.html будет вызвана CGI-программа
/cgi-bin/gbshow.exe и ей методом GET будет передан параметр dsn. Более подробно
технологию Server Side Includes мы рассматривали в шестой главе.
#include <itcgi.h>
CWinApp theApp;
using namespace std;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
//Если не удается подключить библиотеку MFC, то завершаем работу
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
return -1;
CDatabase db; //объект db для связи с базой данных
CString dsn; // dsn нашей базы данных и SQL-запрос
CString HTML; //шаблон HTML-сообщения
//dsn получаем из CGI-запроса, см. выше
GetParamByName("dsn", dsn);
//соединяемся с базой данных
//в случае ошибки переходим на метку LABEL_END см. ниже
try
{
db.OpenEx("DSN="+dsn, CDatabase::noOdbcDialog);
}
catch(CDBException* e)
{
//Если не удалось соединится с базой, выдаем сообщение
//об ошибке и выходим.
printError("Error: %s\nState: %s\n", e->m_strError, e->m_strStateNativeOrigin);
goto LABEL_END;
}
//Инициализируем HTML-шаблон сообщения
HTML="<br><br>\
<table align=center width=100% bgcolor=#000000 cellspacing=1 cellpadding=2>\
<tr>\
<td bgcolor=#EEEEEE width=85%><img src=\"%%smile%%\"> %%subj%%\
<tr>\
<td bgcolor=#FFFFFF>\
<p align=justify>%%it_text%%\
<div align=right>%%it_date%%<br>\
<a href=\"mailto:%%email%%\">%%name%%</a><br>\
<a href=\"http://%%http%%\">http://%%http%%</a>\
</div>\
</table>";
//печатаем HTTP-заголовок
printf("Content-type: text/html\n\n");
//получаем записи из таблицы базы данных
//первый параметр db - объект для связи с базой
//второй SQL-запрос
//третий HTML-шаблон одной записи, в шаблоне названия
//полей должны соответствовать названиям в таблице базы данных
//поля в шаблоне могут идти в любом порядке и повторяться несколько раз
GetHTMLFromSQL(db, "SELECT * FROM message", HTML, 0);
//после выполнения функции GetHTMLFromSQL
// в переменной HTML будет сохранен результат SQL-запроса
printf("%s", HTML);
LABEL_END:
if (db.IsOpen())
db.Close();
return 0;
}
Соберите проект и скопируйте файл gbshow.exe в папку /cgi-bin вашего веб-сайта.
В броузере откройте страницу гостевой книги http://yoursite.ru/gb/index.html и вы увидите сообщения
из гостевой книги.
|