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