информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsПортрет посетителяГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / web building
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Исходный текст CGI-модуля: 02.10.04 01:04  Число просмотров: 2892
Автор: Серый Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Исходный текст CGI-модуля:
int main(int argc, char* argv[])
{
	// определение системных переменных
	SQLHENV sql_henv = SQL_NULL_HENV;
	SQLHDBC sql_hdbc = SQL_NULL_HDBC;
	SQLHSTMT sql_hstmt = SQL_NULL_HSTMT;
		RETCODE err;
		UCHAR sys_DSN[SQL_MAX_DSN_LENGTH + 1] = "Authors_DB";
		UCHAR user_Name[MAXNAME] = "";
		UCHAR user_Password[MAXNAME] = "";

	// инициализация среды выполнения приложения
	err = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &sql_henv);
	
	// анализ кода ошибки
	if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO) return 1;

	// установка параметров среды выполнения приложения
	err = SQLSetEnvAttr(sql_henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);

	// анализ кода ошибки
	if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO) return 1;

	// инициализация среды соединения
	err = SQLAllocHandle(SQL_HANDLE_DBC, sql_henv, &sql_hdbc);
	if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO) return 1;

	// установка соединения
	err = SQLConnect(sql_hdbc, sys_DSN, (SWORD)strlen((const char*)sys_DSN), user_Name,
									 (SWORD)strlen((const char*)user_Name), user_Password, (SWORD)strlen((const char*)user_Password));
	if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO)
		{	
			printf("SQLConnect error\n");
			return 1;
		}

	// получение идентификатора команд
	err = SQLAllocHandle(SQL_HANDLE_STMT, sql_hdbc, &sql_hstmt);
	if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO)
		{
			printf("SQLAllocHandle Error\n");
			return 1;
		}
	
	// выполнение команды
	err = SQLExecDirect(sql_hstmt, (unsigned char*) "SELECT * FROM Authors", SQL_NTS);
	if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO)
		{
			printf("SQLExecDirect Error\n");
			return 1;
		}
	
	// связывание указателей со значениями полей текущей записи
	SQLCHAR id[30];
	SQLCHAR name[30];
	SQLCHAR year[30];
	SQLINTEGER lid;
	SQLINTEGER lname;
	SQLINTEGER lyear;

	err = SQLBindCol(sql_hstmt, 1, SQL_C_CHAR, id, 30, &lid);
	err = SQLBindCol(sql_hstmt, 2, SQL_C_CHAR, name, 30, &lname);
	err = SQLBindCol(sql_hstmt, 3, SQL_C_CHAR, year, 30, &lyear);

	// вывод заголовка HTML-документа
	char *d = "%";
	printf("Content-type: text/html%c%c", 10, 10);  
	printf("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\"");
	printf("<HTML><HEAD><TITLE>ODBC Connection Test</TITLE></HEAD><BODY>");
	
/*	// вывод заголовка таблицы
	printf("<TABLE Width='100%s' CellSpacing=10 CellPadding=10 Border=3>", d);
	printf("<CAPTION Align='center'> Information from DataBase</CAPTION>");
	printf("<TR><TH Width='100%s'>Id</TH><TH>Имя</TH>Год</TH></TR>", d);
	
	// вывод строчек таблицы
	while ((err = SQLFetch(sql_hstmt)) != SQL_NO_DATA)
		{
			printf("<TR><TD>%15s</TD><TD>%25s</TD><TD>%10s</TD></TR>", id, name, year);
		}
	printf("</TABLE>");
*/
	printf("</BODY></HTML>");

	// удаление служебных переменных
	SQLFreeHandle(SQL_HANDLE_STMT, sql_hstmt);
	SQLDisconnect(sql_hdbc);
	SQLFreeHandle(SQL_HANDLE_DBC, sql_hdbc);
	SQLFreeHandle(SQL_HANDLE_ENV, sql_henv);
	
	return 0;
}

---
Источник данных: это стандартная (для примеров) БД на Access, расположенная по адресу D:\Inetpub\iissamples\sdk\asp\database\Authors.mdb. В администрировании компьютера указываю пользовательский DSN как "Authors_DB", определяю путь к БД и устанавливаю драйвер Microsoft Access driver (*.mdb). Не катит :(
<web building>
Ошибка CGI 30.09.04 01:49  
Автор: Серый Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Скажу честно. Изучаю доступ к БД при помощи ODBC и списал программу с книги. Но постарался в ней разобраться и осмыслить каждую строчку. Вроде бы все нормально, но при активизации CGI-модуля с Web-страницы по ссылке сервак выдает такую информацию:

Ошибка CGI

Указанное приложение CGI не возвратило полный набор заголовков HTTP. Не возвращены заголовки:

SQLConnect error

Сервер настроил правильно (проверял на другом CGI приложении). Пользовательское DSN прописал. Программу CGI куда надо разместил. В чем может быть проблема?

PS1: Только не пишите пожалуйста, что чужие программы списывать нехорошо. Сам знаю;)
PS2: В книге у автора все прокатило (может, потому что в книге?).
модуль на обозрение и источник данных ODBC 01.10.04 07:13  
Автор: Korsh <Мельников Михаил> Статус: Elderman
<"чистая" ссылка>
Исходный текст CGI-модуля: 02.10.04 01:04  
Автор: Серый Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Исходный текст CGI-модуля:
int main(int argc, char* argv[])
{
	// определение системных переменных
	SQLHENV sql_henv = SQL_NULL_HENV;
	SQLHDBC sql_hdbc = SQL_NULL_HDBC;
	SQLHSTMT sql_hstmt = SQL_NULL_HSTMT;
		RETCODE err;
		UCHAR sys_DSN[SQL_MAX_DSN_LENGTH + 1] = "Authors_DB";
		UCHAR user_Name[MAXNAME] = "";
		UCHAR user_Password[MAXNAME] = "";

	// инициализация среды выполнения приложения
	err = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &sql_henv);
	
	// анализ кода ошибки
	if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO) return 1;

	// установка параметров среды выполнения приложения
	err = SQLSetEnvAttr(sql_henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);

	// анализ кода ошибки
	if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO) return 1;

	// инициализация среды соединения
	err = SQLAllocHandle(SQL_HANDLE_DBC, sql_henv, &sql_hdbc);
	if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO) return 1;

	// установка соединения
	err = SQLConnect(sql_hdbc, sys_DSN, (SWORD)strlen((const char*)sys_DSN), user_Name,
									 (SWORD)strlen((const char*)user_Name), user_Password, (SWORD)strlen((const char*)user_Password));
	if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO)
		{	
			printf("SQLConnect error\n");
			return 1;
		}

	// получение идентификатора команд
	err = SQLAllocHandle(SQL_HANDLE_STMT, sql_hdbc, &sql_hstmt);
	if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO)
		{
			printf("SQLAllocHandle Error\n");
			return 1;
		}
	
	// выполнение команды
	err = SQLExecDirect(sql_hstmt, (unsigned char*) "SELECT * FROM Authors", SQL_NTS);
	if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO)
		{
			printf("SQLExecDirect Error\n");
			return 1;
		}
	
	// связывание указателей со значениями полей текущей записи
	SQLCHAR id[30];
	SQLCHAR name[30];
	SQLCHAR year[30];
	SQLINTEGER lid;
	SQLINTEGER lname;
	SQLINTEGER lyear;

	err = SQLBindCol(sql_hstmt, 1, SQL_C_CHAR, id, 30, &lid);
	err = SQLBindCol(sql_hstmt, 2, SQL_C_CHAR, name, 30, &lname);
	err = SQLBindCol(sql_hstmt, 3, SQL_C_CHAR, year, 30, &lyear);

	// вывод заголовка HTML-документа
	char *d = "%";
	printf("Content-type: text/html%c%c", 10, 10);  
	printf("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\"");
	printf("<HTML><HEAD><TITLE>ODBC Connection Test</TITLE></HEAD><BODY>");
	
/*	// вывод заголовка таблицы
	printf("<TABLE Width='100%s' CellSpacing=10 CellPadding=10 Border=3>", d);
	printf("<CAPTION Align='center'> Information from DataBase</CAPTION>");
	printf("<TR><TH Width='100%s'>Id</TH><TH>Имя</TH>Год</TH></TR>", d);
	
	// вывод строчек таблицы
	while ((err = SQLFetch(sql_hstmt)) != SQL_NO_DATA)
		{
			printf("<TR><TD>%15s</TD><TD>%25s</TD><TD>%10s</TD></TR>", id, name, year);
		}
	printf("</TABLE>");
*/
	printf("</BODY></HTML>");

	// удаление служебных переменных
	SQLFreeHandle(SQL_HANDLE_STMT, sql_hstmt);
	SQLDisconnect(sql_hdbc);
	SQLFreeHandle(SQL_HANDLE_DBC, sql_hdbc);
	SQLFreeHandle(SQL_HANDLE_ENV, sql_henv);
	
	return 0;
}

---
Источник данных: это стандартная (для примеров) БД на Access, расположенная по адресу D:\Inetpub\iissamples\sdk\asp\database\Authors.mdb. В администрировании компьютера указываю пользовательский DSN как "Authors_DB", определяю путь к БД и устанавливаю драйвер Microsoft Access driver (*.mdb). Не катит :(
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach