[GastForen Archiv Perl und CGI Formular mit CGI und ANSI C - Hilfe mit der Auswahlliste

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Archiv - Archivierte Foren
Themen
Beiträge
Moderatoren
Letzter Beitrag

Formular mit CGI und ANSI C - Hilfe mit der Auswahlliste

Mel1234
Beiträge gesamt: 4

8. Nov 2007, 10:13
Beitrag # 1 von 7
Bewertung:
(10908 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Tag

Ich habe ein einfaches Spiel mittels CGI ANSI C und MySQL entworfen. Nun habe ich Probleme die Levels(Karten genannt) zu wechseln. Das ganze sollte über ein Formular gesteuert werden. Aber ich kriege es nicht hin, das Ergebnis der select Box zu erkennen. Wie bekomme ich es hin, dass ich im C Code erkenne welches Level ausgewählt wurde, damit ich es einer Variablen zuweisen kann?

Zusammenfassung:
Ich möchte erkennen, welche Karte ausgewählt wurde.
Danach möchte ich dieses Value (z.B. 2) in eine Variable "map" schreiben.

Hier das Codafragment für die Auswahlliste.

*Hier kann der Spieler die Karte auswaehlen*/
printf("<td><form action='http://localhost:8080/cgi-bin/RushHour/RushHour.exe'>\n");
printf("<select name='map'>\n");
printf("<option value='1'>Karte 1</option>\n");
printf("<option value='2'>Karte 2</option>\n");
printf("<option value='3'>Karte 3</option>\n");
printf("<option value='4'>Karte 4</option>\n");
printf("<option value='5'>Karte 5</option>\n");
printf("<option value='6'>Karte 6</option>\n");
printf("<option value='7'>Karte 7</option>\n");
printf("<option value='8'>Karte 8</option>\n");
printf("<option value='9'>Karte 9</option>\n");
printf("<option value='10'>Karte 10</option>\n");
printf("</select><br>\n");
printf("<input type='submit' name='submit' value='Wechseln'>\n");
printf("</form></td>\n");

Ich hoffe, es kann mir jemand schnell helfen.

Danke und Gruss
Mel1234
X

Formular mit CGI und ANSI C - Hilfe mit der Auswahlliste

oesi50
  
Beiträge gesamt: 2315

8. Nov 2007, 10:34
Beitrag # 2 von 7
Beitrag ID: #321245
Bewertung:
(10901 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hallo Mel,

wenn die Daten mit GET übertragen werden, musst du die Environment-Variable query_string auswerten.

wenn die Daten mit POST übertragen werden, musst du sie von STDIN lesen.


als Antwort auf: [#321235]

Formular mit CGI und ANSI C - Hilfe mit der Auswahlliste

Mel1234
Beiträge gesamt: 4

8. Nov 2007, 10:44
Beitrag # 3 von 7
Beitrag ID: #321247
Bewertung:
(10898 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich habe mich für die Get-Methode entschieden. Das mit dem query_string hab ich ausprobiert. Aber irgendwie muss da was falsch gewesen sein. Denn der Compiler brachte mir nur Fehler.
Ich hab da einfach ein Durcheinander, wie das genau läuft mit dem query_string.


als Antwort auf: [#321245]

Formular mit CGI und ANSI C - Hilfe mit der Auswahlliste

oesi50
  
Beiträge gesamt: 2315

8. Nov 2007, 10:53
Beitrag # 4 von 7
Beitrag ID: #321250
Bewertung:
(10891 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
probier mal das

Zitat char *qs ;
qs= getenv("QUERY_STRING") ;
cgiinput= strdup(qs ? qs : "") ;



als Antwort auf: [#321247]

Formular mit CGI und ANSI C - Hilfe mit der Auswahlliste

Mel1234
Beiträge gesamt: 4

8. Nov 2007, 11:11
Beitrag # 5 von 7
Beitrag ID: #321255
Bewertung:
(10884 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
was bedeutet
cgiinput= strdup(qs ? qs : "") ;
?

Das habe ich noch nie gesehen.
Bis jetzt läuft es noch nicht.

Ist jetzt vielleicht ein dumme Frage...
muss ich gsiinput do initialisieren:
char cgiinput; ?


als Antwort auf: [#321250]

Formular mit CGI und ANSI C - Hilfe mit der Auswahlliste

Mel1234
Beiträge gesamt: 4

8. Nov 2007, 11:15
Beitrag # 6 von 7
Beitrag ID: #321257
Bewertung:
(10882 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
ok, damit es vielleicht für mich etwas einfacher wird, hier der ganze Code:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define CONTENT_LENGTH

#if defined __WIN32__ || _MSC_VER
#include <windows.h>
#endif

#include <mysql/mysql.h>
/*Zeiger und Variablen*/
MYSQL *my;
unsigned int i, col_len;
MYSQL_ROW row;
MYSQL_RES *res;
MYSQL_FIELD *field;
int y = -1;



int header(){
printf("Content-Type: text/html\n\n");
printf("<html><head>\n");
printf("<title>RushHour</title>\n");

/*CSS Angaben*/
printf("<style type='text/css'>");
printf("<!--");
printf("h1 { font-size:60px; font-style:bold; border-bottom:solid thin black; }");
printf("body {font-family:Arial; font-size:12px; }");
printf("a {color:#000000; text-decoration:none; font-weight:bold; font-size:12px }");
printf("a:hover {color:#555555; text-decoration:none; font-weight:bold; font-size:12px }");
printf("table {border:'0px'; empty-cells:show table-layout:fixed }");
printf("td {width:300px; height:50px; }");
printf("--></style>");
printf("</head>\n");

}

/*Abschluss der HTML Datei*/
int footer(){
printf("</body></html>\n");
}




/*Anfang der Main Methode*/

int main(){


/*Die Anfage für MySQL*/

/*Handle initialisieren*/
my = mysql_init(NULL);
if(my == NULL) {
printf("Initialisierung fehlgeschlagen\n");
return EXIT_SUCCESS;
}

/*Verbindung mit dem Server herstellen*/
if (mysql_real_connect (my, /*Zeiger auf MYSQL-Handler*/
"localhost", /*Host-Name*/
"root", /*User-Name*/
"", /*Passwort*/
"rushhour", /*Name der Datenbank*/
3306, /*Port (default=0)*/
NULL, /*Socket (default=NULL)*/
0 /*keine Flags*/
) == NULL) {
printf("Fehler mysql_real_connect(): %u (%s)\n",mysql_errno (my), mysql_error (my));
}
else printf("Erfolgreich mit dem mySQL-Server verbunden\n");

//Anfang der Map-Schlaufe



/*SQL Anfrage an die Datenbank senden*/

if(map == "1" ){
mysql_query(my, "SELECT * FROM spielfeld where id=1");
}
if(map == "2" ){
mysql_query(my, "SELECT * FROM spielfeld where id=2");
}
if(map == "3"){
mysql_query(my, "SELECT * FROM spielfeld where id=3");
}
if(map == "4"){
mysql_query(my, "SELECT * FROM spielfeld where id=4");
}

/*Anfrage vom Server in die Struktur MYSQL_RES laden*/
res = mysql_store_result(my);



/*Die Header Funktion für HTML wird aufgerufen*/
header();

/*Titel der HTML Ausgabe*/
printf("<h1>Rush Hour</h1>\n");
printf("%s", qs);

//printf("<p>%i asdfasfasdfasfs</p>", request);
/*Tabelle*/
printf("<table><tr>");

printf("<td>");
printf("<table border='1'>");
printf("<tr>");

/*Die Daten werden zum ersten Mal aus der Datenbank gelesen*/
while ((row = mysql_fetch_row (res)) != NULL) {
mysql_field_seek (res, 0);
for (i = 1; i < mysql_num_fields (res); i++) {
y++;

/*Spalte fuer Spalte abarbeiten*/
field = mysql_fetch_field (res);

if(y==6){
printf("</tr><tr>");
y = 0;
}

/*Hier kommt das Spielfeld in die Tabelle*/

/*keine Daten in dieser Spalte*/
if (row == NULL) {
printf("<td bgcolor='#FFFFFF'>&nbsp;&nbsp;</td>");
}


//printf("<td>%s</td>\n", row);
else {
printf("<td bgcolor='%s'>&nbsp;&nbsp;</td>", row);

}
}
printf("\n");
}
printf("</tr></table>");
printf("</td>\n");

/*Speicher freigeben*/
mysql_free_result(res);



/*Hier kann der Spieler die Karte auswaehlen*/
printf("<td><form action='http://localhost:8080/cgi-bin/RushHour/RushHour.exe'>\n");
printf("<select name='map'>\n");
printf("<option value='1'>Karte 1</option>\n");
printf("<option value='2'>Karte 2</option>\n");
printf("<option value='3'>Karte 3</option>\n");
printf("<option value='4'>Karte 4</option>\n");
printf("<option value='5'>Karte 5</option>\n");
printf("<option value='6'>Karte 6</option>\n");
printf("<option value='7'>Karte 7</option>\n");
printf("<option value='8'>Karte 8</option>\n");
printf("<option value='9'>Karte 9</option>\n");
printf("<option value='10'>Karte 10</option>\n");
printf("</select><br>\n");
printf("<input type='submit' name='submit' value='Wechseln'>\n");
printf("</form></td>\n");
printf("</tr>");








/*Button fuer das Zuruecksetzen auf die Ursprungsposition*/
printf("<tr><td><form action=""><input type='submit' name='zuruecksetzen' value='Zuruecksetzen'</form>");

/*Button um das Spiel zu beenden*/
printf("<form action=""><input type='submit' name='beenden' value='Beenden'</form></td>");




/*Link um zur Spielanleitung zu kommen*/
printf("<td><a href='anleitung.html'>Spielanleitung</a></td></tr>");
printf("</table>\n");


/*Die Abschluss Funktion der HTML Datei wird aufgerufen*/
footer();




/*Verbindung mit dem Server wieder trennen*/

mysql_close(my);
return EXIT_SUCCESS;


}


Wohin kommt was und warum?


als Antwort auf: [#321255]

Formular mit CGI und ANSI C - Hilfe mit der Auswahlliste

oesi50
  
Beiträge gesamt: 2315

8. Nov 2007, 13:09
Beitrag # 7 von 7
Beitrag ID: #321298
Bewertung:
(10869 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: was bedeutet
cgiinput= strdup(qs ? qs : "") ;


wenn qs leer ist, wird explizit eine leere Zeichenkette kopiert, wenn nicht dann qs selbst.
Das macht man, um NULL-Pointer zu vermeiden.


Antwort auf: Ist jetzt vielleicht ein dumme Frage...
muss ich gsiinput do initialisieren:
char cgiinput; ?


Ja, natürlich.

Code
  char *cgiinput ; 



als Antwort auf: [#321255]
(Dieser Beitrag wurde von oesi50 am 8. Nov 2007, 13:13 geändert)
X

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
14.05.2024

Online
Dienstag, 14. Mai 2024, 10.00 - 10.30 Uhr

Webinar

Prozessoptimierung ist ein Teamsport! Keine Software und keine Maschine allein kann Ihnen helfen, die Effizienzpotenziale Ihres Betriebes maximal auszuschöpfen. Von der Auftragsannahme über die Vorstufe und den Druck bis hin zur Weiterverarbeitung – alles muss optimal ineinandergreifen. Apropos Weiterverarbeitung – in vielen Druckbetrieben fristet sie in Sachen Prozessoptimierung immer noch ein Schattendasein. Dabei liegen hier mittlerweile die größten Einsparpotenziale! In einem Webinar von Horizon und Impressed erfahren Sie, wie Sie diese Einsparungen realisieren können. Horizon, bekannt für innovative Lösungen in der Druckweiterverarbeitung, bietet mit iCE LiNK eine Workflowlösung für die Weiterverarbeitung. iCE LiNK überwacht, visualisiert und analysiert Produktionsabläufe und unterstützt bei der Wartung – damit immer alles reibungslos läuft. Den gleichen Anspruch hat der von Impressed entwickelte Impressed Workflow Server – er ist die smarte PDF-Workflow-Lösung für Druckereien, die Datenmanagement, Preflight und Produktionssteuerung übernimmt. Im Webinar zeigen Ihnen die Experten von Horizon und Impressed, wie beide Lösungen im Team die Effizienz und Produktivität Ihres Betriebes steigern können. Melden Sie sich am besten gleich an, wir freuen uns auf Sie! PS: Melden Sie sich in jedem Fall an – sollten Sie zum Termin verhindert sein, erhalten Sie die Aufzeichnung.

kostenlos

Ja

Organisator: Impressed / Horizon

https://www.impressed.de/schulung.php?c=sDetail&sid=327

Einsparpotenziale in der Weiterverarbeitung
Veranstaltungen
16.05.2024

Online
Donnerstag, 16. Mai 2024, 10.00 - 10.30 Uhr

Webinar

Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Günther Business Solutions und Impressed treten in einem Webinar den Gegenbeweis an. Experten beider Unternehmen zeigen, wie Großformatdrucker vom Einsatz zweier bewährter Lösungen profitieren können: • von advanter print+sign von Günther Business Solutions, dem ERP-System für den Großformatdruck, dass alle Phasen der Wertschöpfung im Large Format Printing abdeckt • von Impressed Workflow Server, der smarten PDF-Workflow-Lösung für Druckereien, die Datenmanagement, Preflight und Produktionssteuerung übernimmt Über die Kombination beider Lösungen können Großformatdrucker ihre Prozesse mit modernen Workflows Schritt für Schritt automatisieren – und so zügig deutliche Zeit- und Kosteneinsparungen realisieren. Das Webinar sollten Sie sich nicht entgehen lassen – damit Sie keine Effizienzpotenziale mehr liegen lassen. Melden Sie sich am besten gleich an, wir freuen uns auf Sie! PS: Melden Sie sich in jedem Fall an – sollten Sie zum Termin verhindert sein, erhalten Sie die Aufzeichnung.

kostenlos

Nein

Organisator: Impressed / Günther Business Solutions

https://www.impressed.de/schulung.php?c=sDetail&sid=326

Und es geht doch: Automatisierung im Großformatdruck!