我正在为学校项目构建基本注册功能,当我尝试从数据库中检查用户名和密码时,不断收到错误。这个想法是让用户输入他们的登录信息,然后让一个函数接收该信息并将其与数据库中的用户信息进行比较。如果匹配,它将从表中检索用户 ID 并将其附加到变量以供以后使用。我现在遇到一个问题,当我将用户输入传递到密码匹配函数时,该函数似乎只接收输入的第一个字符。这就是调试器显示的内容。我可能读错了调试器,但我不确定这是第一个函数
void loginUser(){
char email[100];
char password[50];
// Input login details
printf("Enter email: ");
fgets(email, sizeof(email), stdin);
email[strcspn(email, "\n")] = '\0'; // Remove newline character
printf("Enter password: ");
fgets(password, sizeof(password), stdin);
password[strcspn(password, "\n")] = '\0'; // Remove newline character
printf("Email: %s\n", email);
printf("Email: %s\n", password);
// Check email and password against database
if(password_match(email, password)){
printf("Success");
};
// If authenticated, proceed to main menu
// Else, show error message and redirect to login
};
这是从mysql数据库获取用户名和密码的函数
int password_match(const char *email, const char *password) {
// printf("Email: %s\n", email);
// printf("Email: %s\n", password);
MYSQL_RES *result;
MYSQL_ROW row;
char query[512];
snprintf(query, sizeof(query), "SELECT consumerID FROM CurrentConsumer WHERE email='%s' AND password='%s'", email, password);
if (mysql_query(con, query)) {
fprintf(stderr, "Error querying database: %s\n", mysql_error(con));
return 0; // Failure
}
result = mysql_store_result(con);
if (result == NULL) {
fprintf(stderr, "Error storing result: %s\n", mysql_error(con));
return 0; // Failure
}
row = mysql_fetch_row(result);
if (row == NULL) {
mysql_free_result(result);
return 0; // No match
}
// Print the consumer ID
printf("Consumer ID: %s\n", row[0]);
mysql_free_result(result);
return 1; // Match
}
我尝试使用按值传递和按引用传递,但无法使其工作。这很奇怪,因为我有另一个函数可以很好地将数据插入数据库。我用它来构建这个函数,但无法让它工作。
我现在遇到一个问题,当我将用户输入传递到密码匹配函数时,该函数似乎只接收输入的第一个字符。
这是函数原型:
int password_match(const char* a, const char* b)
password_match()
接收2个指向char
的指针。根本没有char
。指针可以指向 NULL
,指向有效或无效的 NULL
终止的事物,但只是指向某些地址的指针。
它接收单个字母字符串的唯一方法是
a[0]
是一个字母并且a[1]
为零,或者对于b
来说也是如此。
loginUser()
只是 2 个字符串的包装,以便测试 password_match()
。不要编写交互式代码来测试您的程序。这只会花费您时间。很多时间。只需将 2 个字符串传递给 loginUser
并返回用户 idvoid f(void)
:这个东西不会获取任何数据并且不会返回任何内容,因此将完全依赖于全局外部数据。password_match()
C
中,我们期望 Snake_case,但无论如何都要保持一致。