[問題] 想寫一個cgi佈告欄
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
( 未必需要依照此格式,文章條理清楚即可 )
遇到的問題: 想寫一個cgi佈告欄
希望得到的正確結果:點一下文章標題的超連結,即可閱讀全文
開發平台: Ubuntu G++
有問題的code:
#include <iostream>
#include <vector>
#include <string>
#include "cgicc-3.2.7/cgicc/Cgicc.h"
#include "cgicc-3.2.7/cgicc/HTTPHTMLHeader.h"
#include "cgicc-3.2.7/cgicc/HTMLClasses.h"
#include <stdio.h>
#include <sqlite3.h>
#include <unistd.h>
using namespace std;
using namespace cgicc;
static int callback(void *NotUsed, int argc, char **argv, char **azColName){
int i;
for(i=0; i<argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
int main(int argc, char **argv)
{
sqlite3 *db;
char *zErrMsg = 0;
char insertS[4096]="";
int rc;
/* if( argc!=3 ){
fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
return -1;
}*/
rc = sqlite3_open("test.db", &db);
if( rc ){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return -1;
}
rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
if( rc!=SQLITE_OK ){
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
try {
Cgicc cgi;
// Send HTTP header
cout << HTTPHTMLHeader() << endl;
// Set up the HTML document
cout << html()<<endl;
cout<<head(title("Embedded System Lab3"))<<endl;
cout<<body()<<endl;
cout<<h1("Embedded System Lab")<<endl;
cout<<b()<<"<p><font size =\"5\">新增留言</font></p>"<<b()<<endl;
cout<<"<form method = \"post\" action =
\"http://192.168.1.124/Submit_Form.cgi\" >"
int n=0;
const char *list[4];
list[0]=(**name).c_str(); list[1]=(**email).c_str();
list[2]=(**topic).c_str(); list[3]=(**comments).c_str();
cout<<"<p>"<<list[0]<<", "<<list[1]<<", "<<list[2]<<",
"<<list[3]<<"</p>"<<endl;
n=sprintf(insertS, "insert into Post values ('%s', '%s', '%s', '%s')",
list[0], list[1], list[2], list[3]);
//"insert into Post values (name, email, topic, comments)"
cout<<"<p>"<<insertS<<"</p>";
//rc = sqlite3_exec(db, insertS, 0, 0, &zErrMsg);(後面沒有條件式吧!)
// Close the HTML document
char querysql[1024]="select * from Post";//retrieves data
char **result;//stores the resulting database data
int row, col=5;
sqlite3_get_table(db, querysql, &result, &row, &col, &zErrMsg);
cout<<"<table border=\"1\" width=\"80%\" >"<<endl;
int check[row]; string names[row];
//total number in result should have row*col+2 elements
for (int i=0; i< row; i++)
{
{switch(i%5)
{
case 0: cout<<"<tr><td>Name:</td>"; break;
case 1: cout<<"<tr><td>E-mail:</td>"; break;
/*問題就在這裡 想用一個陣列去管理文章(每篇都assign一個整數index)...
然後他的網址應該怎麼打呢?*/
case 2: cout<<"<tr><td><a
href=\"Subject:";" rel="nofollow">http://192.168.1.124/list.cgi/%i="<<id<<"\">Subject:</a></td>"; break;
case 3: cout<<"<tr><td>Text:</td>"; break;
case 4:
//check[i]=static_cast<int>(result[count]);static_cast<int>(names[row]=result[count-4]);
break;
default: break;
} cout<<"<td>"<<result[count]<<"</td></tr>"<<endl;
if((i-5)%5==0) cout<<"<tr></tr>";
}
sqlite3_free_table(result);
cout<<"</table>"<<endl;
cout << body() << html();
sqlite3_close(db);
return 0;
}
catch(exception& e) {
// handle any errors - omitted for brevity
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.174.136
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章