2016-10-29 9 views
1

HTML/CGIでログインページを作成するように求められました。スクリプト出力の終了 - CGI/HTML

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

char username[20]; 
char password[20]; 

char* extract_value(char* data,int data_len, char* name, char* dest); 

int main() 
{ 
    int size; 
    char *buff; 

    printf("Content-type:text/html\n\n"); 
    printf("<html><body>"); 
    buff = getenv("CONTENT_LENGTH"); 
    if (buff) 
     size = atoi(buff); 

    char data[size+1]; 
    int i; 
    for(i=0;i<size;i++) 
      data[i]=fgetc(stdin); 
    data[size]='\0'; 

    extract_value(data,size+1,"username",username); 
    extract_value(data,size+1,"password",password); 

    printf("</body></html>"); 
} 

char* extract_value(char* data,int data_len, char* name, char* dest) 
{ 
    int i,j,k,flag,carry; 
    for(i=0;i<data_len;i++){ 
     flag=1; 
     for(j=0,k=0;name[j]!='\0';j++,k++) 
     { 
      if(j>=data_len) 
      { 
       i=data_len; 
       break; 
      } 
      else if(name[j]!=data[i+k]){ 
       flag=0; 
       break; 
      } 
      carry=i+k+2; 
     } 
     if(flag) 
     { 
     j=carry; 
      for(k=0;data[j]!='&'&&data[j]!='\0';j++,k++) 
      { 
      dest[k]=data[j]; 
      } 
     dest[k]='\0'; 
     break; 
    } 
} 
return dest; 
} 

そして、ここでは私のHTMLプログラムです:私はこのコードを思い付いた

<!DOCTYPE html> 
<html> 
<body> 
<form action='/cgi-bin/11.cgi'> 
    Username: <input type="text" name="user"><br> 
    Password: <input type="password" name ="password" id="password"  maxlength="10"> 
<input type ="submit" value='Submit'> 
</form> 
</body> 
</html> 

はそれをコンパイルし、Apache/XAMPPを通してそれを実行した後、それはこのエラーを思い付く:

Server error! 

The server encountered an internal error and was unable to complete your request. 

Error message: 
End of script output before headers: 11.cgi 

If you think this is a server error, please contact the webmaster. 

このタイプの問題を解決するにはどうすればよいですか?どうもありがとう!

+1

printf("Content-type:text/html\n\n");を変更してみてください。期待どおりに動作しますか? 'extract_value'関数を個別にテストしましたか?また、技術的には、あなたが送る改行は '' \ r \ n "'でなければなりません。 –

答えて

1

は何が起こるか見て、コマンドラインからプログラムを実行してみprintf("Content-type:text/html\r\n\r\n");

関連する問題