24 lipca 2014

Biblioteka C++ do obsługi CGI

Kategoria: C++, Linux, SQL Autor: FX

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;
}

Komentowanie wyłączone.