<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[c++ cgi problem]]></title><description><![CDATA[<p>Schreibe an einem Modul zum Regristrieren auf meiner.<br />
Habe nun folgendes Problem der so bald ich auf absenden gehe ist mir nicht möglich den Query Inhalt aus dem Modul abzurufen.</p>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;map&gt;
#include &lt;fstream&gt;
#include &quot;tuxcms.h&quot;
#include &lt;vector&gt;
#include &lt;html.h&gt;
#include &lt;cgi.h&gt;
#include &quot;modul/module.h&quot;
#include &lt;easyc++.h&gt;

/*Under Construction*/

using namespace std;

string core::getconfig(string input)
{
        ifstream  file(&quot;tuxcms.conf&quot;); 
        string buf, key; 
        size_t n; 

        while(file.good()) { 
                getline(file, buf, '\n'); 
                n=buf.find(input); 
                if(n != string::npos) { 
                        n += input.length();
                        key=buf.substr(n,buf.length()); 
                        break; 
                } else { 
                        continue; 
                } 
        } 

file.close();
        if(key.length() &gt; 0) { 
                return key;
        } else { 
                return &quot;error key not found&quot;;
        }
}

void xhtmlstrict()
{
cout &lt;&lt;	&quot;&lt;p&gt;&quot; &lt;&lt; endl
     &lt;&lt;		&quot;&lt;a href=\&quot;http://validator.w3.org/check?uri=referer\&quot;&gt;&quot;
     &lt;&lt; 	&quot;&lt;img src=\&quot;http://www.w3.org/Icons/valid-xhtml10-blue\&quot;&quot;
     &lt;&lt; 	&quot; alt=\&quot;Valid XHTML 1.0 Strict\&quot; height=\&quot;31\&quot; width=\&quot;88\&quot; /&gt;&lt;/a&gt;&quot;
     &lt;&lt; &quot;&lt;/p&gt;&quot; &lt;&lt; endl;
}

void core::test()
{
cgi maincgi;
	maincgi.request();
	maincgi.urlencode();

	string inhalt = maincgi.getcgidata(&quot;nav&quot;);
	extern bool modul(string modulpath);
	modul(inhalt);

}

void core::login()
{
html loginhtml;
	loginhtml.createlayer(&quot;login&quot;,&quot;main&quot;);
		loginhtml.startform(&quot;post&quot;, &quot;loginform&quot;,&quot;index.cgi&quot;);
			cout &lt;&lt; &quot;&lt;p&gt;&quot;;
		loginhtml.input( &quot;Username&quot;, &quot;text&quot;);
			cout &lt;&lt; &quot;&lt;br/&gt;&quot;;
		loginhtml.input( &quot;Username&quot;, &quot;password&quot;);
			cout &lt;&lt; &quot;&lt;br/&gt;&quot;;
		loginhtml.input( &quot;Login&quot;, &quot;submit&quot;);
			cout &lt;&lt; &quot;&lt;br/&gt;&quot;;
			cout &lt;&lt; &quot;&lt;/p&gt;&quot;;
		loginhtml.endform();
		loginhtml.link(&quot;Regristieren&quot;, &quot;?+nav=module/register.so&quot;);
			xhtmlstrict();
loginhtml.endlayer();
}

void core::style()
{
	string style = &quot;dark&quot;;
	html stylehtml;
	stylehtml.headstart(sitename);
	cout &lt;&lt; &quot;&lt;link rel=\&quot;icon\&quot; type=\&quot;image/png\&quot; href=\&quot;style/&quot;&lt;&lt; style &lt;&lt;&quot;/images/icon.png\&quot;/&gt;&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;&lt;link rel=\&quot;stylesheet\&quot; type=\&quot;text/css\&quot; href=\&quot;style/&quot;&lt;&lt; style &lt;&lt;&quot;/main.css\&quot;/&gt;&quot; &lt;&lt; endl;
	stylehtml.headend();
	stylehtml.bodystart();

	stylehtml.createlayer(&quot;logo&quot;,&quot;main&quot;);
		string imgtmp =&quot;style/&quot;;
		imgtmp += style;
		imgtmp += &quot;/images/logo.png&quot;;
		cout &lt;&lt; &quot;&lt;a href=\&quot;?+nav=module/news.so\&quot; &gt;&quot;;
		stylehtml.img(&quot;logo1&quot;, imgtmp);
		cout &lt;&lt; &quot;&lt;/a&gt;&quot; &lt;&lt; endl;
		stylehtml.endlayer();
}

int main()
{
html mainhtml;
core mainprog;

string cmssqloptionstmp, sitenametmp;

cmssqloptionstmp = mainprog.getconfig(&quot;cmsdatabase:&quot;);
cmssqloptions = cmssqloptionstmp.c_str();

sitenametmp = mainprog.getconfig(&quot;sitename:&quot;);
sitename = sitenametmp.c_str();

mainhtml.starthtml();
	mainprog.style();

	mainprog.login();

		mainhtml.createlayer(&quot;navbar&quot;,&quot;main&quot;);
			mainhtml.link(&quot;News&quot;,&quot;?+nav=module/news.so&quot;);
			mainhtml.link(&quot;Video&quot;,&quot;?+nav=video&quot;);
			mainhtml.link(&quot;Projects&quot;,&quot;http://projects.tuxist.de&quot;);
			mainhtml.link(&quot;Downloads&quot;,&quot;?+nav=module/filebrowser.so&quot;);
			mainhtml.link(&quot;Sysinfo&quot;,&quot;?+nav=module/sysinfo.so&quot;);
			mainhtml.link(&quot;Apt&quot;,&quot;http://apt.tuxist.de&quot;);
			mainhtml.link(&quot;MotoCross&quot;,&quot;http://motocross.tuxist.de&quot;);
		mainhtml.endlayer();

	mainprog.test();

	mainhtml.bodyend();

mainhtml.endhtml();
}
</code></pre>
<p>module.cpp</p>
<pre><code class="language-cpp">/*
Writen by Jan Koster releade under lgpl

*/
#include &lt;iostream&gt;
#include &lt;dlfcn.h&gt;
#include &lt;string&gt;
#include &lt;easyc++.h&gt;
#include &quot;module.h&quot;

using namespace std;

bool modul(string modulpath){

char* tmp = stringtochar(modulpath);

using std::cout;
using std::cerr;

void* modul = dlopen(tmp, RTLD_LAZY);
if (!modul) {
        cerr &lt;&lt; &quot;Cannot load library: &quot; &lt;&lt; dlerror() &lt;&lt; '\n';
        return 1;
}

dlerror();

create_t* create_modul = (create_t*) dlsym(modul, &quot;create&quot;);
const char* dlsym_error = dlerror();
	if (dlsym_error) {
        	cerr &lt;&lt; &quot;Cannot load symbol create: &quot; &lt;&lt; dlsym_error &lt;&lt; '\n';
		return 1;
    	}

destroy_t* destroy_modul = (destroy_t*) dlsym(modul, &quot;destroy&quot;);
dlsym_error = dlerror();
	if (dlsym_error) {
        	cerr &lt;&lt; &quot;Cannot load symbol destroy: &quot; &lt;&lt; dlsym_error &lt;&lt; '\n';
        	return 1;
	}

    module* module = create_modul();

    module-&gt;htmlout();

    destroy_modul(module);

    dlclose(modul);

	return 0;

}
</code></pre>
<p>module.h</p>
<pre><code class="language-cpp">#ifndef module_H
#define module_H

class module {
protected:

public:
virtual ~module() {}
virtual void htmlout(){};
};

// the types of the class factories
typedef module* create_t();
typedef void destroy_t(module*);

#endif

bool modul(std::string modulpath);
</code></pre>
<p>register.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;pqxx/connection&gt;
#include &lt;pqxx/transaction&gt;
#include &lt;pqxx/result&gt;
#include &quot;register.h&quot;
#include &quot;../../tuxcms.h&quot;
#include &lt;html.h&gt;
#include &lt;vector&gt;
#include &lt;map&gt;
#include &lt;cgi.h&gt;
#include &lt;easyc++.h&gt;

using namespace std;
using namespace PGSTD;
using namespace pqxx;

bool userreg::createuser()
{

}; 

bool userreg::check()
{
cgi regist;
string nickname = regist.getcgidata(&quot;NickName&quot;);
//checknickname(nickname);
cout &lt;&lt; nickname &lt;&lt; endl;
}

void userreg::regui()
{
html regis;
regis.createlayer(&quot;register&quot; ,&quot;inhalt&quot;);
cout &lt;&lt; &quot;&lt;h2&gt; Anmeldung auf &quot; &lt;&lt; sitename &lt;&lt; &quot;&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;&quot; &lt;&lt; endl;
regis.startform(&quot;GET&quot;,&quot;register&quot;,&quot;?+nav=module/register.so&quot;);
cout &lt;&lt; &quot;NickName: &quot;;
regis.input(&quot;nickname&quot;,&quot;text&quot;);
cout &lt;&lt; &quot;&lt;p&gt;&lt;/p&gt; Vorname: &quot;;
regis.input(&quot;surname&quot;,&quot;text&quot;);
cout &lt;&lt; &quot;&lt;p&gt;&lt;/p&gt; Nachname: &quot;;
regis.input(&quot;lastname&quot;,&quot;text&quot;);
cout &lt;&lt; &quot;&lt;p&gt;&lt;/p&gt; Birthday: &quot;;
regis.input(&quot;birthday&quot;,&quot;text&quot;);
cout &lt;&lt; &quot;&lt;p&gt;&lt;/p&gt; Geschlecht: &quot;;
regis.formselect(&quot;gender&quot;, &quot;&lt;option&gt;Männlich&lt;/option&gt;&lt;option&gt;Weiblich&lt;/option&gt;&quot;);
cout &lt;&lt; &quot;&lt;p&gt;&lt;/p&gt; Jabber: &quot;;
regis.input(&quot;jabber&quot;,&quot;text&quot;);
cout &lt;&lt; &quot;&lt;p&gt;&lt;/p&gt; Email: &quot;;
regis.input(&quot;email@muster.net&quot;,&quot;text&quot;);
cout &lt;&lt; &quot;&lt;p&gt;&lt;/p&gt;&quot;;
regis.input(&quot;absenden&quot;,&quot;submit&quot;);
regis.endform();
regis.endlayer();
}

bool userreg::checknickname(string nickname)
{
	result R;

        connection *conn = new connection(cmssqloptions);

        work T(*conn);

        R = T.exec(&quot;SELECT * FROM NEWS&quot;);
        T.commit();
}
</code></pre>
<p>register.h</p>
<pre><code class="language-cpp">#include &quot;../../modul/module.h&quot;
#include &lt;map&gt;

class userreg : public module
{
private:
bool createuser();
void regui();
bool checknickname(std::string nickname);
bool check();
public:

void htmlout()
{
check();
regui();
}

};

extern &quot;C&quot; module* create() {
    return new userreg;
}

extern &quot;C&quot; void destroy(module* p) {
    delete p;
}
</code></pre>
<p>cgi.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt; 
#include &lt;string&gt; 
#include &lt;fstream&gt; 
#include &lt;vector&gt;
#include &lt;map&gt;
#include &lt;algorithm&gt;
#include &quot;cgi.h&quot;

using std::vector;
using namespace std;

/*
The cgi request function to get the cgi query_string 
*/

bool cgi::request()
{
	query_string = string();
	char *request = getenv(&quot;REQUEST_METHOD&quot;);
	char *env = getenv(&quot;QUERY_STRING&quot;);
	char *clength = getenv (&quot;CONTENT_LENGTH&quot;);

bool ret = false; 
 if(std::string(request) == std::string(&quot;GET&quot;) &amp;&amp; env) 
   { 
     query_string = env; 
     ret = true; 
   } 
 else if(std::string(request) == std::string(&quot;POST&quot;) &amp;&amp; clength) 
   { 
     getline(cin, query_string); 
     ret = true; 
   } 
return ret;
}

/*
This function formated the cgi input.
*/

void cgi::urlencode()
{

	size_t len;
	len = query_string.length();

	for (std::size_t pos = query_string.find(&quot;+&quot;); pos != std::string::npos; pos = query_string.find(&quot;+&quot;, ++pos)) 
        query_string.replace(pos, 1, &quot; &quot;); 

	size_t pos = 0; 
	size_t old_pos = 0; 

	while(len &gt; pos)
		{

                 pos = query_string.find(&quot;&amp;&quot;, old_pos); 

                 if (pos == string::npos) 
                 	pos = query_string.length();

		query_tmp.push_back(query_string.substr(old_pos, pos-old_pos));

		old_pos = pos+1; 	
		};

vector&lt;string&gt;::iterator copy;

size_t start = 0;
size_t end = 0;

for(copy = query_tmp.begin(); copy != query_tmp.end(); copy++)
{
	const string tmp=*copy;

	start = tmp.find(&quot;=&quot;);
	end =++start;

	query.insert(QueryPair(tmp.substr(1, ----start) ,tmp.substr(end)));
}
}

//get query single ouput
const string cgi::getcgidata(std::string formname)
{

Query::const_iterator search;

search = query.find(formname);

  	 if(search == query.end())
  	 { 
   	  return &quot;error&quot;; 
  	 } 
	return search-&gt;second;

}
</code></pre>
<p>cgi.h</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;map&gt;
#include &lt;algorithm&gt;
#include &lt;vector&gt;

class cgi
{
private:
typedef std::map&lt;std::string,std::string &gt; Query;
typedef Query::value_type QueryPair;
std::string query_string;

Query query;

std::vector&lt;std::string&gt; query_tmp;

public:

bool request(); //GET CGI DATA

void urlencode(); // parse the CGI query_string

const std::string getcgidata(std::string formname); // cgi single ouput

};
</code></pre>
<p>Wie kann ich das problem am besten lösen</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/219994/c-cgi-problem</link><generator>RSS for Node</generator><lastBuildDate>Wed, 07 Oct 2026 14:02:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/219994.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 10 Aug 2008 15:53:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to c++ cgi problem on Sun, 10 Aug 2008 15:53:38 GMT]]></title><description><![CDATA[<p>Schreibe an einem Modul zum Regristrieren auf meiner.<br />
Habe nun folgendes Problem der so bald ich auf absenden gehe ist mir nicht möglich den Query Inhalt aus dem Modul abzurufen.</p>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;map&gt;
#include &lt;fstream&gt;
#include &quot;tuxcms.h&quot;
#include &lt;vector&gt;
#include &lt;html.h&gt;
#include &lt;cgi.h&gt;
#include &quot;modul/module.h&quot;
#include &lt;easyc++.h&gt;

/*Under Construction*/

using namespace std;

string core::getconfig(string input)
{
        ifstream  file(&quot;tuxcms.conf&quot;); 
        string buf, key; 
        size_t n; 

        while(file.good()) { 
                getline(file, buf, '\n'); 
                n=buf.find(input); 
                if(n != string::npos) { 
                        n += input.length();
                        key=buf.substr(n,buf.length()); 
                        break; 
                } else { 
                        continue; 
                } 
        } 

file.close();
        if(key.length() &gt; 0) { 
                return key;
        } else { 
                return &quot;error key not found&quot;;
        }
}

void xhtmlstrict()
{
cout &lt;&lt;	&quot;&lt;p&gt;&quot; &lt;&lt; endl
     &lt;&lt;		&quot;&lt;a href=\&quot;http://validator.w3.org/check?uri=referer\&quot;&gt;&quot;
     &lt;&lt; 	&quot;&lt;img src=\&quot;http://www.w3.org/Icons/valid-xhtml10-blue\&quot;&quot;
     &lt;&lt; 	&quot; alt=\&quot;Valid XHTML 1.0 Strict\&quot; height=\&quot;31\&quot; width=\&quot;88\&quot; /&gt;&lt;/a&gt;&quot;
     &lt;&lt; &quot;&lt;/p&gt;&quot; &lt;&lt; endl;
}

void core::test()
{
cgi maincgi;
	maincgi.request();
	maincgi.urlencode();

	string inhalt = maincgi.getcgidata(&quot;nav&quot;);
	extern bool modul(string modulpath);
	modul(inhalt);

}

void core::login()
{
html loginhtml;
	loginhtml.createlayer(&quot;login&quot;,&quot;main&quot;);
		loginhtml.startform(&quot;post&quot;, &quot;loginform&quot;,&quot;index.cgi&quot;);
			cout &lt;&lt; &quot;&lt;p&gt;&quot;;
		loginhtml.input( &quot;Username&quot;, &quot;text&quot;);
			cout &lt;&lt; &quot;&lt;br/&gt;&quot;;
		loginhtml.input( &quot;Username&quot;, &quot;password&quot;);
			cout &lt;&lt; &quot;&lt;br/&gt;&quot;;
		loginhtml.input( &quot;Login&quot;, &quot;submit&quot;);
			cout &lt;&lt; &quot;&lt;br/&gt;&quot;;
			cout &lt;&lt; &quot;&lt;/p&gt;&quot;;
		loginhtml.endform();
		loginhtml.link(&quot;Regristieren&quot;, &quot;?+nav=module/register.so&quot;);
			xhtmlstrict();
loginhtml.endlayer();
}

void core::style()
{
	string style = &quot;dark&quot;;
	html stylehtml;
	stylehtml.headstart(sitename);
	cout &lt;&lt; &quot;&lt;link rel=\&quot;icon\&quot; type=\&quot;image/png\&quot; href=\&quot;style/&quot;&lt;&lt; style &lt;&lt;&quot;/images/icon.png\&quot;/&gt;&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;&lt;link rel=\&quot;stylesheet\&quot; type=\&quot;text/css\&quot; href=\&quot;style/&quot;&lt;&lt; style &lt;&lt;&quot;/main.css\&quot;/&gt;&quot; &lt;&lt; endl;
	stylehtml.headend();
	stylehtml.bodystart();

	stylehtml.createlayer(&quot;logo&quot;,&quot;main&quot;);
		string imgtmp =&quot;style/&quot;;
		imgtmp += style;
		imgtmp += &quot;/images/logo.png&quot;;
		cout &lt;&lt; &quot;&lt;a href=\&quot;?+nav=module/news.so\&quot; &gt;&quot;;
		stylehtml.img(&quot;logo1&quot;, imgtmp);
		cout &lt;&lt; &quot;&lt;/a&gt;&quot; &lt;&lt; endl;
		stylehtml.endlayer();
}

int main()
{
html mainhtml;
core mainprog;

string cmssqloptionstmp, sitenametmp;

cmssqloptionstmp = mainprog.getconfig(&quot;cmsdatabase:&quot;);
cmssqloptions = cmssqloptionstmp.c_str();

sitenametmp = mainprog.getconfig(&quot;sitename:&quot;);
sitename = sitenametmp.c_str();

mainhtml.starthtml();
	mainprog.style();

	mainprog.login();

		mainhtml.createlayer(&quot;navbar&quot;,&quot;main&quot;);
			mainhtml.link(&quot;News&quot;,&quot;?+nav=module/news.so&quot;);
			mainhtml.link(&quot;Video&quot;,&quot;?+nav=video&quot;);
			mainhtml.link(&quot;Projects&quot;,&quot;http://projects.tuxist.de&quot;);
			mainhtml.link(&quot;Downloads&quot;,&quot;?+nav=module/filebrowser.so&quot;);
			mainhtml.link(&quot;Sysinfo&quot;,&quot;?+nav=module/sysinfo.so&quot;);
			mainhtml.link(&quot;Apt&quot;,&quot;http://apt.tuxist.de&quot;);
			mainhtml.link(&quot;MotoCross&quot;,&quot;http://motocross.tuxist.de&quot;);
		mainhtml.endlayer();

	mainprog.test();

	mainhtml.bodyend();

mainhtml.endhtml();
}
</code></pre>
<p>module.cpp</p>
<pre><code class="language-cpp">/*
Writen by Jan Koster releade under lgpl

*/
#include &lt;iostream&gt;
#include &lt;dlfcn.h&gt;
#include &lt;string&gt;
#include &lt;easyc++.h&gt;
#include &quot;module.h&quot;

using namespace std;

bool modul(string modulpath){

char* tmp = stringtochar(modulpath);

using std::cout;
using std::cerr;

void* modul = dlopen(tmp, RTLD_LAZY);
if (!modul) {
        cerr &lt;&lt; &quot;Cannot load library: &quot; &lt;&lt; dlerror() &lt;&lt; '\n';
        return 1;
}

dlerror();

create_t* create_modul = (create_t*) dlsym(modul, &quot;create&quot;);
const char* dlsym_error = dlerror();
	if (dlsym_error) {
        	cerr &lt;&lt; &quot;Cannot load symbol create: &quot; &lt;&lt; dlsym_error &lt;&lt; '\n';
		return 1;
    	}

destroy_t* destroy_modul = (destroy_t*) dlsym(modul, &quot;destroy&quot;);
dlsym_error = dlerror();
	if (dlsym_error) {
        	cerr &lt;&lt; &quot;Cannot load symbol destroy: &quot; &lt;&lt; dlsym_error &lt;&lt; '\n';
        	return 1;
	}

    module* module = create_modul();

    module-&gt;htmlout();

    destroy_modul(module);

    dlclose(modul);

	return 0;

}
</code></pre>
<p>module.h</p>
<pre><code class="language-cpp">#ifndef module_H
#define module_H

class module {
protected:

public:
virtual ~module() {}
virtual void htmlout(){};
};

// the types of the class factories
typedef module* create_t();
typedef void destroy_t(module*);

#endif

bool modul(std::string modulpath);
</code></pre>
<p>register.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;pqxx/connection&gt;
#include &lt;pqxx/transaction&gt;
#include &lt;pqxx/result&gt;
#include &quot;register.h&quot;
#include &quot;../../tuxcms.h&quot;
#include &lt;html.h&gt;
#include &lt;vector&gt;
#include &lt;map&gt;
#include &lt;cgi.h&gt;
#include &lt;easyc++.h&gt;

using namespace std;
using namespace PGSTD;
using namespace pqxx;

bool userreg::createuser()
{

}; 

bool userreg::check()
{
cgi regist;
string nickname = regist.getcgidata(&quot;NickName&quot;);
//checknickname(nickname);
cout &lt;&lt; nickname &lt;&lt; endl;
}

void userreg::regui()
{
html regis;
regis.createlayer(&quot;register&quot; ,&quot;inhalt&quot;);
cout &lt;&lt; &quot;&lt;h2&gt; Anmeldung auf &quot; &lt;&lt; sitename &lt;&lt; &quot;&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;&quot; &lt;&lt; endl;
regis.startform(&quot;GET&quot;,&quot;register&quot;,&quot;?+nav=module/register.so&quot;);
cout &lt;&lt; &quot;NickName: &quot;;
regis.input(&quot;nickname&quot;,&quot;text&quot;);
cout &lt;&lt; &quot;&lt;p&gt;&lt;/p&gt; Vorname: &quot;;
regis.input(&quot;surname&quot;,&quot;text&quot;);
cout &lt;&lt; &quot;&lt;p&gt;&lt;/p&gt; Nachname: &quot;;
regis.input(&quot;lastname&quot;,&quot;text&quot;);
cout &lt;&lt; &quot;&lt;p&gt;&lt;/p&gt; Birthday: &quot;;
regis.input(&quot;birthday&quot;,&quot;text&quot;);
cout &lt;&lt; &quot;&lt;p&gt;&lt;/p&gt; Geschlecht: &quot;;
regis.formselect(&quot;gender&quot;, &quot;&lt;option&gt;Männlich&lt;/option&gt;&lt;option&gt;Weiblich&lt;/option&gt;&quot;);
cout &lt;&lt; &quot;&lt;p&gt;&lt;/p&gt; Jabber: &quot;;
regis.input(&quot;jabber&quot;,&quot;text&quot;);
cout &lt;&lt; &quot;&lt;p&gt;&lt;/p&gt; Email: &quot;;
regis.input(&quot;email@muster.net&quot;,&quot;text&quot;);
cout &lt;&lt; &quot;&lt;p&gt;&lt;/p&gt;&quot;;
regis.input(&quot;absenden&quot;,&quot;submit&quot;);
regis.endform();
regis.endlayer();
}

bool userreg::checknickname(string nickname)
{
	result R;

        connection *conn = new connection(cmssqloptions);

        work T(*conn);

        R = T.exec(&quot;SELECT * FROM NEWS&quot;);
        T.commit();
}
</code></pre>
<p>register.h</p>
<pre><code class="language-cpp">#include &quot;../../modul/module.h&quot;
#include &lt;map&gt;

class userreg : public module
{
private:
bool createuser();
void regui();
bool checknickname(std::string nickname);
bool check();
public:

void htmlout()
{
check();
regui();
}

};

extern &quot;C&quot; module* create() {
    return new userreg;
}

extern &quot;C&quot; void destroy(module* p) {
    delete p;
}
</code></pre>
<p>cgi.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt; 
#include &lt;string&gt; 
#include &lt;fstream&gt; 
#include &lt;vector&gt;
#include &lt;map&gt;
#include &lt;algorithm&gt;
#include &quot;cgi.h&quot;

using std::vector;
using namespace std;

/*
The cgi request function to get the cgi query_string 
*/

bool cgi::request()
{
	query_string = string();
	char *request = getenv(&quot;REQUEST_METHOD&quot;);
	char *env = getenv(&quot;QUERY_STRING&quot;);
	char *clength = getenv (&quot;CONTENT_LENGTH&quot;);

bool ret = false; 
 if(std::string(request) == std::string(&quot;GET&quot;) &amp;&amp; env) 
   { 
     query_string = env; 
     ret = true; 
   } 
 else if(std::string(request) == std::string(&quot;POST&quot;) &amp;&amp; clength) 
   { 
     getline(cin, query_string); 
     ret = true; 
   } 
return ret;
}

/*
This function formated the cgi input.
*/

void cgi::urlencode()
{

	size_t len;
	len = query_string.length();

	for (std::size_t pos = query_string.find(&quot;+&quot;); pos != std::string::npos; pos = query_string.find(&quot;+&quot;, ++pos)) 
        query_string.replace(pos, 1, &quot; &quot;); 

	size_t pos = 0; 
	size_t old_pos = 0; 

	while(len &gt; pos)
		{

                 pos = query_string.find(&quot;&amp;&quot;, old_pos); 

                 if (pos == string::npos) 
                 	pos = query_string.length();

		query_tmp.push_back(query_string.substr(old_pos, pos-old_pos));

		old_pos = pos+1; 	
		};

vector&lt;string&gt;::iterator copy;

size_t start = 0;
size_t end = 0;

for(copy = query_tmp.begin(); copy != query_tmp.end(); copy++)
{
	const string tmp=*copy;

	start = tmp.find(&quot;=&quot;);
	end =++start;

	query.insert(QueryPair(tmp.substr(1, ----start) ,tmp.substr(end)));
}
}

//get query single ouput
const string cgi::getcgidata(std::string formname)
{

Query::const_iterator search;

search = query.find(formname);

  	 if(search == query.end())
  	 { 
   	  return &quot;error&quot;; 
  	 } 
	return search-&gt;second;

}
</code></pre>
<p>cgi.h</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;map&gt;
#include &lt;algorithm&gt;
#include &lt;vector&gt;

class cgi
{
private:
typedef std::map&lt;std::string,std::string &gt; Query;
typedef Query::value_type QueryPair;
std::string query_string;

Query query;

std::vector&lt;std::string&gt; query_tmp;

public:

bool request(); //GET CGI DATA

void urlencode(); // parse the CGI query_string

const std::string getcgidata(std::string formname); // cgi single ouput

};
</code></pre>
<p>Wie kann ich das problem am besten lösen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1562291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1562291</guid><dc:creator><![CDATA[Tuxist]]></dc:creator><pubDate>Sun, 10 Aug 2008 15:53:38 GMT</pubDate></item></channel></rss>