我目前正在撰写自己的网站,并且我试图确保当有人创建帐户时,用户名是唯一的。我在C中做后端(因为我不知道php / js)而且我已经遇到了一些问题。现在我将环境变量放在一个文件newuser.txt中(这个文件只有唯一的用户名):
全名=测试
描述=测试
用户名=测试
密码=测试
我知道在newusers.txt文件中的第3,7,11行等我会得到我的用户名,所以我想把所有用户名添加到另一个文件(也托管传入的数据),然后检查看看如果传入的用户名是唯一的,如果是,那么我想将所有数据(如全名,用户名等)添加到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文件将如下所示:
姓名= BLA
描述= BLA
用户名= BLA
密码= BLA
用户名= U1
用户名= U2
用户名= U3
...
现在我坚持将传入的用户名与其他用户名进行比较,然后将数据复制回newusers.txt。任何帮助,将不胜感激!
答案 0 :(得分:-1)
使用system()调用来调用grep binary来搜索,而不是用C语言编写搜索代码。
如下
//连接字符串以将"grep filename username | cut -d'=' -f2"
导入cmdstring然后
//阅读内容
in=popen(cmdstring, "r");
if(in==NULL)
{
perror("Shell execution error");
exit(EXIT_FAILURE);
}
fgets(buf,3000,in)!=NULL)
这里buf包含新用户的名称,然后它已经存在。
否则他选择了唯一的名字。