Добавляем сообщения в базу Оглавление Выполняем SQL-запросы к базе данных

Отображаем сообщения из базы

Следующим шагом будет написание 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 мы рассматривали в шестой главе.
Описанным выше образом создайте проект с названием gbshow. Код функции _tmain приведен ниже:

#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 и вы увидите сообщения из гостевой книги.