<?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[Probleme mit cgi]]></title><description><![CDATA[<p>Bin dabei ein kleines cgi zu schreiben, leider liefert es keine Ergebnisse zurück.<br />
cgi.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &quot;include/libhtml++.h&quot;

using namespace std;

bool cgi::anfrage()
{
    query = string(); // Gespeicherten Wert zurücksetzen

    char *request = getenv(&quot;REQUEST_METHOD&quot;);
    char *env = getenv(&quot;QUERY_STRING&quot;);

    if( request == 0)
    { 
        return false; // Änderung des Rückgabewerts
    }

    if (request == &quot;GET&quot;)
    {
        if (env != 0)
        {
            query = env;
            return true;   // Rückgabewert geändert
        }
        else
        {
            return false; // Rückgabewert geändert
        }
    }
    else
        return false;
}

bool cgi::output(const string&amp; formname)
{
if (anfrage())
{

if ( query.find(formname, start))
{
start += 1;
end = query.find(&quot;&amp;&quot;, start);
if (end == 0)
{
end = query.size();
}
else
{
end -= 1;
}
query = query.substr(start,end);
return true;
}

else
{
return false;
}

}

else
return false;

};
</code></pre>
<p>libhtml++.h</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;

using namespace std;

class cgi
{
private:

int start;
int end;

public:
string query;
bool anfrage();
bool output(const string&amp; formname);
};

class htmlformsubmit
{
private:
void inputsubmit( string submitname);
public:
htmlformsubmit(string submitname)
{
inputsubmit(submitname);
};

};

class htmlformselect
{
private:
void formselectdisplay(string formselectname, string formselectinput, string methodform);
public:
htmlformselect(string formselectname, string formselectinput, string methodform)
{
formselectdisplay (formselectname, formselectinput, methodform);
};

};
</code></pre>
<p>nutzung der funktion:</p>
<pre><code class="language-cpp">void libcss::libcssout()
{
cgi css;
string cssstyle;

if (css.output(&quot;cssstyle&quot;))
{
cssstyle = css.query;
}
else
{
cssstyle = &quot;default&quot;;
}

cout &lt;&lt; &quot;&lt;link rel=\&quot;stylesheet\&quot; type=\&quot;text/css\&quot; href=\&quot;&quot; &lt;&lt; folder &lt;&lt; &quot;/&quot; &lt;&lt; cssstyle &lt;&lt; &quot;/&quot;&lt;&lt; &quot;main.css&quot; &lt;&lt; &quot;\&quot;&gt;&quot; &lt;&lt; endl;

}
</code></pre>
<p>leider bekomme ich keine ausgabe</p>
<p>source <a href="ftp://tuxist.de/tuxist/tuxcms.tar.gz" rel="nofollow">ftp://tuxist.de/tuxist/tuxcms.tar.gz</a></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/185819/probleme-mit-cgi</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 06:36:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/185819.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 01 Jul 2007 19:14:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit cgi on Sun, 01 Jul 2007 20:30:13 GMT]]></title><description><![CDATA[<p>Bin dabei ein kleines cgi zu schreiben, leider liefert es keine Ergebnisse zurück.<br />
cgi.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &quot;include/libhtml++.h&quot;

using namespace std;

bool cgi::anfrage()
{
    query = string(); // Gespeicherten Wert zurücksetzen

    char *request = getenv(&quot;REQUEST_METHOD&quot;);
    char *env = getenv(&quot;QUERY_STRING&quot;);

    if( request == 0)
    { 
        return false; // Änderung des Rückgabewerts
    }

    if (request == &quot;GET&quot;)
    {
        if (env != 0)
        {
            query = env;
            return true;   // Rückgabewert geändert
        }
        else
        {
            return false; // Rückgabewert geändert
        }
    }
    else
        return false;
}

bool cgi::output(const string&amp; formname)
{
if (anfrage())
{

if ( query.find(formname, start))
{
start += 1;
end = query.find(&quot;&amp;&quot;, start);
if (end == 0)
{
end = query.size();
}
else
{
end -= 1;
}
query = query.substr(start,end);
return true;
}

else
{
return false;
}

}

else
return false;

};
</code></pre>
<p>libhtml++.h</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;

using namespace std;

class cgi
{
private:

int start;
int end;

public:
string query;
bool anfrage();
bool output(const string&amp; formname);
};

class htmlformsubmit
{
private:
void inputsubmit( string submitname);
public:
htmlformsubmit(string submitname)
{
inputsubmit(submitname);
};

};

class htmlformselect
{
private:
void formselectdisplay(string formselectname, string formselectinput, string methodform);
public:
htmlformselect(string formselectname, string formselectinput, string methodform)
{
formselectdisplay (formselectname, formselectinput, methodform);
};

};
</code></pre>
<p>nutzung der funktion:</p>
<pre><code class="language-cpp">void libcss::libcssout()
{
cgi css;
string cssstyle;

if (css.output(&quot;cssstyle&quot;))
{
cssstyle = css.query;
}
else
{
cssstyle = &quot;default&quot;;
}

cout &lt;&lt; &quot;&lt;link rel=\&quot;stylesheet\&quot; type=\&quot;text/css\&quot; href=\&quot;&quot; &lt;&lt; folder &lt;&lt; &quot;/&quot; &lt;&lt; cssstyle &lt;&lt; &quot;/&quot;&lt;&lt; &quot;main.css&quot; &lt;&lt; &quot;\&quot;&gt;&quot; &lt;&lt; endl;

}
</code></pre>
<p>leider bekomme ich keine ausgabe</p>
<p>source <a href="ftp://tuxist.de/tuxist/tuxcms.tar.gz" rel="nofollow">ftp://tuxist.de/tuxist/tuxcms.tar.gz</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316358</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316358</guid><dc:creator><![CDATA[Tuxist]]></dc:creator><pubDate>Sun, 01 Jul 2007 20:30:13 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit cgi on Sun, 01 Jul 2007 21:21:51 GMT]]></title><description><![CDATA[<p>Kennst du den Unterschied zwischen std::string und char*? Mir scheint, du kennst ihn nicht.</p>
<pre><code class="language-cpp">...
bool cgi::anfrage()
{
    query = string(); // Gespeicherten Wert zurücksetzen

    char *request = getenv(&quot;REQUEST_METHOD&quot;);
    char *env = getenv(&quot;QUERY_STRING&quot;);

    if( request == 0)
    { 
        return false; // Änderung des Rückgabewerts
    }

    if (request == &quot;GET&quot;)
</code></pre>
<p>Du vergleichst hier zwei Zeiger. Diese Bedinung wird nur dann wahr, wenn <strong>request</strong> auf die Adresse des statischen Zeichenkettenliterals &quot;GET&quot; zeigt, was selten der Fall sein dürfte. Was du machen könntest, wäre</p>
<pre><code class="language-cpp">if(request == std::string(&quot;GET&quot;))
</code></pre>
<p>das ruft dann den passenden <strong>operator==</strong> auf, der die beiden Strings nach Inhalt vergleicht, nicht ihre Speicheradressen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /></p>
<p>Gruß,</p>
<p>Roker</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1316485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316485</guid><dc:creator><![CDATA[Roker]]></dc:creator><pubDate>Sun, 01 Jul 2007 21:21:51 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit cgi on Mon, 02 Jul 2007 12:37:15 GMT]]></title><description><![CDATA[<p>Roker schrieb:</p>
<blockquote>
<pre><code class="language-cpp">if(request == std::string(&quot;GET&quot;))
</code></pre>
</blockquote>
<p>Entweder das oder</p>
<pre><code class="language-cpp">if (strcmp(request, &quot;GET&quot;))
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1316844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316844</guid><dc:creator><![CDATA[darthdespotism]]></dc:creator><pubDate>Mon, 02 Jul 2007 12:37:15 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit cgi on Mon, 02 Jul 2007 13:48:35 GMT]]></title><description><![CDATA[<p>Falsch,</p>
<pre><code class="language-cpp">if (strcmp(request, &quot;GET&quot;) == 0)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1316882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1316882</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Mon, 02 Jul 2007 13:48:35 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit cgi on Mon, 02 Jul 2007 19:30:13 GMT]]></title><description><![CDATA[<p>darthdespotism schrieb:</p>
<blockquote>
<p>Roker schrieb:</p>
<blockquote>
<pre><code class="language-cpp">if(request == std::string(&quot;GET&quot;))
</code></pre>
</blockquote>
<p>Entweder das oder</p>
<pre><code class="language-cpp">if (strcmp(request, &quot;GET&quot;))
</code></pre>
</blockquote>
<p>Naja, ich dachte, wir machen hier C++, nicht C. Ich finde das C++-Beispiel mit std::string wesentlich intuitiver als deines. Außerdem ist dein Code falsch, wie Th hier schon gemerkt hat. Das scheint meine Meinung zu bestärken, dass man die C-Funktionen nicht nutzen sollte, wenn es sich - wie in diesem Falle - vermeiden lässt.</p>
<p>Gruß,<br />
Roker</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1317133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317133</guid><dc:creator><![CDATA[Roker]]></dc:creator><pubDate>Mon, 02 Jul 2007 19:30:13 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit cgi on Mon, 02 Jul 2007 19:36:07 GMT]]></title><description><![CDATA[<p>Unter Performancegesichtspunkten wäre es sicher sinnvoll, die temporäre String-Kopie (und die damit einhergehende Fragmentierung des Heaps) zu vermeiden, aber das ist Mikrooptimierung. Eine gute Lösung wäre, die eingehenden Daten direkt als std::string(s) zu verwalten, dann braucht man das Literal garnicht umwandeln <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>(Komisch, ich habe eine natürliche Abneigung, Literale nur temporär umzuwandeln, aber das Ergebnis von getenv würde ich nach NULL-Prüfung bedenkenlos in einen string kopieren)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1317139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317139</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 02 Jul 2007 19:36:07 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit cgi on Tue, 03 Jul 2007 08:35:45 GMT]]></title><description><![CDATA[<p>Also ich persönlich finde auch die String-Konvertierung von Literalen nicht so schön, da die String-Klasse die Zeichenkette (char <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title="*)"
      alt="😉"
    /> kopiert. (Für die zumeist kleinen Literal-Strings zwar egal, aber schöner wäre es wenn die String-Klasse intern copy-on-write verwenden würde - ich weiß nicht, ob der Standard dies zuläßt, aber die gängigen Implementierungen verwenden es nicht).</p>
<p>P.S: Die Rückgabewerte von 'getenv' würde ich als 'const char *' deklarieren...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1317314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317314</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Tue, 03 Jul 2007 08:35:45 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit cgi on Tue, 03 Jul 2007 09:26:48 GMT]]></title><description><![CDATA[<p>Th schrieb:</p>
<blockquote>
<p>schöner wäre es wenn die String-Klasse intern copy-on-write verwenden würde - ich weiß nicht, ob der Standard dies zuläßt, aber die gängigen Implementierungen verwenden es nicht).</p>
</blockquote>
<p>Es ist zugelassen (es wird sogar AFAIR explizit auf diese mögliche Implementierung hingewiesen) und soweit ich weiß gab es sogar eine Zeit, in der mehrere Implementierungen das so gehandhabt haben (Stroustrup geht in TC++PL auch explizit darauf ein).</p>
<p>Inzwischen wird es nicht mehr gemacht, weil die copy-on-write-Methode zu falschen Semantiken führen kann:</p>
<pre><code class="language-cpp">string a = &quot;Hallo&quot;;
string::iterator i = a.begin();
string b  = a; // Verzögerte Kopie
*i = 'x';
cout &lt;&lt; b &lt;&lt; endl; // Erwartet: &quot;Hallo&quot;, tatsächliche Ausgabe: &quot;xallo&quot;
</code></pre>
<p>Ich finde das zwar ein vertretbares Trade-off aber die meisten Bibliotheks-Hersteller scheinen anderer Meinung zu sein (und haben wahrscheinlich recht).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1317348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317348</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Tue, 03 Jul 2007 09:26:48 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit cgi on Tue, 03 Jul 2007 19:28:22 GMT]]></title><description><![CDATA[<p>danke Rocker erst einaml hat geholfen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /></p>
<p>hätte noch eine Frage <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Wieso ghet das nicht:</p>
<pre><code class="language-cpp">{
if (query.find(formname, start))
{
	start += 1;
end = query.find(&quot;&amp;&quot;, start); 

	if (end != string::npos)
		end -= 1;
	if (end == string::npos)
		end = query.length();

size = end -= start;
queryout = query.substr(start, size);

	return true;

}
</code></pre>
<p>wenn den int wert von ende minus start rechne müsste ich die substring länge ja haben welche ich für substring benötige.</p>
<p>bekomme aber immer nur :</p>
<pre><code>terminate called after throwing an instance of 'std::out_of_range'
  what():  basic_string::substr
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1317717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317717</guid><dc:creator><![CDATA[Tuxist]]></dc:creator><pubDate>Tue, 03 Jul 2007 19:28:22 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit cgi on Wed, 04 Jul 2007 17:32:09 GMT]]></title><description><![CDATA[<p>so habe alles so hinbekommen wie ich wollte danke nochmal.</p>
<pre><code class="language-cpp">bool cgi::output(const string&amp; formname)
{

if (anfrage())
{
f_start = query.find(formname);
if ( f_start != string::npos)
{
v_start = query.find(&quot;=&quot;, f_start);
v_start += 1;
end = query.find(&quot;&amp;&quot;, v_start); 

	if (end != string::npos)
		end -= 1;
	if (end == string::npos)
		end = query.length();
size = end - v_start;
queryout = query.substr(v_start, size);

	return true;
}
else
{
return false;
}

}

else
return false;

};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1318427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318427</guid><dc:creator><![CDATA[Tuxist]]></dc:creator><pubDate>Wed, 04 Jul 2007 17:32:09 GMT</pubDate></item></channel></rss>