2016-04-09 14 views
0

私は現在自分のウェブサイトを作成しており、誰かがアカウントを作っているときにユーザー名が一意であることを確認しようとしています。私はCでバックエンドをやっています(私はphp/jsを知らないので)、私はちょっとした問題を抱えています。今、私は、次のような(このファイルは唯一のユニークなユーザ名を持っている)ファイルnewuser.txtで環境変数を取得しています:HTMLフォームとC - 固有のユーザー名の確認

フルネーム=テスト

説明=テスト

ユーザ名=テスト

パスワード=テスト

newusers.txtファイルの3,7,11などの行に私のユーザー名が表示されるので、すべてのユーザー名を別のファイル(入力データもホストする)に追加することを考えました。入ってくるかどうかを確認してくださいusernameが一意である場合は、newusers.txtにすべてのデータ(完全な名前、ユーザー名など)を追加します。ここに私のコードは次のとおりです。

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

int main(int argc, char *argv[]) 
{ 
int currentLine = 1; 

char fileLine[100]; 

int searchLine= 3; 

char input[200]; 

int i=0; 

int n = atoi(getenv("CONTENT_LENGTH")); 

fgets(input,n+1,stdin); //get the input from the form 

printf("Content-Type:text/html\n\n"); 
printf("<TITLE>Account Creation Query</TITLE>\n"); 

if (n == 0) 
{ 
    printf("<p> Error. Please try again.</p>"); 
} 

FILE *f = fopen("newusers.txt", "ab"); 
FILE *g = fopen("incoming.txt", "ab"); 

if (f == NULL) 
{ 
    printf("<p> Error in opening the file. Check if the file exists</p>"); 
    printf("<p><a href=\"../login.html\">Login Page</a></p>"); 
    printf("<p><a href=\"../home.html\">Homepage</a></p>"); 
} 
else 
{ 
    while(fgets(fileLine, 100, f)) /*searching for the usernames and adding them to the incoming.txt file */ 
    { 
     if(searchLine == currentLine) 
    { 
     fputs(fileLine, g); 
     searchLine = searchLine + 4; 

    } 
    currentLine++; 

    } 

    char *token = strtok(input, "&"); /*tokenizing the incoming data and adding it to the incoming.txt file */ 
    while(token!=NULL) 
    { 
     fputs(token, g); 
     fputs("\n", g); 
     token = strtok(NULL, "&"); 
    } 

} 

printf("<p> Account created successfully. You can now login!</p>"); 
printf("<p><a href=\"../login.html\">Login Page</a></p>"); 
fclose(f); 
fclose(g); 
return 0; 
} 

理想的には、この時点で私のincoming.txtファイルは次のようになります。

FIRSTNAME = BLA

説明= BLA

ユーザ名= BLA

パスワード= bla

ユーザー名= u1

ユーザ名= U2

ユーザ名= U3

...

今、私は、他のユーザ名に入ってくるユーザー名を比較して、バックnewusers.txtにデータをコピーするにこだわっています。どんな助けもありがとう!

+0

JavaScriptでうまくいけば、Cの代わりにnodejsとmangoDBに行きます。特にWeb開発の場合 – kakurala

答えて

-1

利用システム()cmdstringをへ"grep filename username | cut -d'=' -f2"を取得するために

として

//連結文字列の下にC.で検索コードを書く代わりに検索するためにはgrepのバイナリを起動するために呼び出すと、その後

//読みます内容

in=popen(cmdstring, "r"); 
    if(in==NULL) 
    { 
     perror("Shell execution error"); 
     exit(EXIT_FAILURE); 
    }   
    fgets(buf,3000,in)!=NULL) 

ここでbufには新しいユーザーの名前が含まれています。

それ以外の場合は、一意の名前を選択しました。

+0

検索のようなタスクの外部実行可能ファイルへのシェルリングは*本当に悪い考えです。それは不十分に実行されるだけでなく、誤ってリモートコード実行脆弱性を導入することは非常に簡単です。 ';'や '$(...)'のようなシェルメタキャラクタを含むユーザ名を使用します。 – duskwuff

+0

@duskwuff:それは良いキャッチだ、私はRCEを認識していない! :)。 – kakurala

0

このプロジェクトのスクリプト言語を学ぶことを強くお勧めします。 PHP、Perl、Python、Ruby、Javascript ...たくさんの選択肢があり、いずれもCよりもWebプログラミングに適しています。

ここで必要なのはデータベースです。 SQLiteまたはBerkeley DBを使用することを検討してください。どちらもC言語とのやりとりが容易で、フラットファイルよりもはるかに簡単にルックアップや挿入を実行できます(ここでやろうとしています)。

+0

お寄せいただきありがとうございます! :)私はそれらを試して確認します。 – JavaNewb

関連する問題