Poprzedni program CGI do obsługi bazy danych MySQL (zobacz jego kod) został przepisany na wersję z biblioteką cgicc służącą do generowania kodu HTML w C++.
instalacja (Debian Linux server z Apache2):
1 2 | apt-get install libcgicc5 apt-get install libcgicc5-dev |
Potem przy kompilacji dołączamy biblioteki MySQL i libcgicc
1 | g++ programcgi.c -o /var/www/cgi-bin/program.cgi -lmysqlclient /usr/lib/libcgicc.a |
Kod:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #include<iostream> #include<stdlib.h> //biblioteka mysql #include<mysql/mysql.h> //biblioteka cgicc #include <cgicc/Cgicc.h> #include <cgicc/HTTPHTMLHeader.h> #include <cgicc/HTMLClasses.h> using namespace std; using namespace cgicc; int main() { // Generuje text/html mimeType cout << HTTPHTMLHeader () // Doctype strict.dtd << HTMLDoctype(HTMLDoctype::eStrict) << html().set ("xmlns","http://www.w3.org/1999/xhtml") // head tag << head() << title ("Zmienne środowiskowe") << meta().set( "http-equiv", "Content-Type").set( "content", "text/html;charset=utf-8") << head() //koniec head -> teraz body << body() << h1("Hello, jestem skryptem CGI") << endl << "parametry skryptu po znaku ?: " << getenv("QUERY_STRING") << endl; MYSQL *conn; conn = mysql_init(NULL); MYSQL_RES *res; MYSQL_ROW row; //sprawdzenie czy jest biblioteka w systemie: if (!conn) { cout << "mysql init failed\n"; exit(1); } //proba polaczenia z baza conn = mysql_real_connect (conn, "server", "user", "haslo", "baza", 0, NULL, 0); if (conn) { cout << "connection success\n"; } else { cout << "connection faild\n"; } //wywolanie zapytania SQL: if (mysql_query(conn, "SELECT * FROM liczby")) cout << mysql_error(conn); //wypisanie tabeli wynikowej w tabelce cout << table().set("border","1"); res = mysql_use_result(conn); while ((row = mysql_fetch_row(res)) != NULL) cout << tr().add( td(row[0]) ); //zamkniecie polaczenia: mysql_close(conn); cout << table() << html(); return 0; } |