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