Avatar billede minniethemuhh Nybegynder
16. februar 2004 - 15:43 Der er 3 kommentarer og
1 løsning

cgi i c

Jeg er helt ny i forhold til CGI. Og lidt af en novice mht. C-programering.

Jeg har prøvet på at lave en simpel FORM i HTML:
<FORM METHOD = "GET" ACTION = "cgi-bin/cgi_test.exe">
<h2>Skriv navn og adresse her:</h2>
<p>
<PRE>
Navn:<INPUT NAME="Name" VALUE ="">
Adresse:<INPUT NAME="Address" VALUE ="">
<br>
By:<INPUT NAME="City" VALUE ="">
</PRE>
<p>
Tryk på knappen for at se dine data;
<INPUT TYPE ="submit" VALUE ="Test din adresse">
</FORM>

Det jeg så gerne vil er at lave et CGI script i C, der kan modtage/få fat i de oplysninger der er indtastet.

Mit forslag til koden er:
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

struct person {
    char *Name;
    char *Addres;
    char *City;
};

void main(void)
{
    struct person Pers;

    Pers.Name = gets("Name");
    Pers.Addres = gets("Address");
    Pers.City = gets("City");

    printf("Content-type: text/html\n");
    printf("\n");
    printf("<!DOCTYPE HTML PUBLIC\"-//W3O//DTD W3 HTML 3.2//EN\">\n");
    printf("<HTML>\n");
    printf("<HEAD><TITTLE>Stor fed svar side</TITTLE></HEAD>\n");
    printf("<BODY>\n");
    printf("<H1>Du er:</H1>\n");
    printf("<HR>\n");
    printf("<UL>\n");
    printf("<LI>Navnet er %s\n", Pers.Name);
    printf("<LI>Adressen er %s\n", Pers.Addres);
    printf("<LI>Byen du bor i %s\n", Pers.City);
    printf("</UL>\n");
    printf("</BODY>\n");
    printf("</HTML>\n");
}

Men det virker ikke... Værdien af Pers.Name, Pers.Address og Pers.City er NULL, når outputtet fra C-filen vises.

På forhånd tak!
Avatar billede arne_v Ekspert
16. februar 2004 - 15:59 #1
Spørgsmålet er vist mere C end C# ...

Den der kode virker ihvertfald ikke.

Har du læst lidt om CGI i C ?

F.eks. http://www.cs.tut.fi/~jkorpela/forms/cgic.html ?
Avatar billede arne_v Ekspert
16. februar 2004 - 16:00 #2
Jeg kan evt. godt prøve at lave et eksempel der virker.
Avatar billede arne_v Ekspert
16. februar 2004 - 16:22 #3
Følgende er næppe god CGI kode.

Men det virker !  (testet med Apache på Windows)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int locate(char *buffer, char *namstr, char *valstr)
{
    int i;
    char *parse = strstr(buffer, namstr);
    if(parse==NULL) return 0;
    parse = parse + strlen(namstr);
    i = 0;
    while(parse[i]!='&' && parse[i]!='\0')
    {
      valstr[i]=parse[i];
      i++;
    }
    valstr[i]='\0';
    return 1;
}

struct person {
    char Name[50];
    char Address[50];
    char City[50];
};

int main(void)
{
    struct person Pers;
    char *p = getenv("QUERY_STRING");
    locate(p,"Name",Pers.Name);
    locate(p,"Address",Pers.Address);
    locate(p,"City",Pers.City);
    printf("Content-type: text/html\n");
    printf("\n");
    printf("<!DOCTYPE HTML PUBLIC\"-//W3O//DTD W3 HTML 3.2//EN\">\n");
    printf("<HTML>\n");
    printf("<HEAD><TITTLE>Stor fed svar side</TITTLE></HEAD>\n");
    printf("<BODY>\n");
    printf("<H1>Du er:</H1>\n");
    printf("<HR>\n");
    printf("<UL>\n");
    printf("<LI>Navnet er %s\n", Pers.Name);
    printf("<LI>Adressen er %s\n", Pers.Address);
    printf("<LI>Byen du bor i %s\n", Pers.City);
    printf("</UL>\n");
    printf("</BODY>\n");
    printf("</HTML>\n");
    return 0;
}
Avatar billede minniethemuhh Nybegynder
17. februar 2004 - 09:11 #4
Tak for hjælpen. Jeg har haft problemer med at finde noget og C og CGI, så tak for linket. Beklager at det var den forkerte kategori.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester