0

私はゆっくりとコーディングを学び、進歩しているので、誰かが私のためにこの機能を簡単に見て、私が正しい軌道に乗っているように見えるかどうか、どうすればもっとうまくできるか、どこでできるか教えてくれることを望んでいました.失敗する準備をしている。私は C の世界に慣れていないので、気楽に話してください。ただし率直かつ正直に言ってください。

void test(char *username, char *password) {

    printf("Checking password for %s - pw: %s\n",username,password);
    char *query1 = "SELECT password FROM logins WHERE email = '";
    char *query2 = "' LIMIT 1";

    char *querystring = malloc(strlen(query1) + strlen(username) + strlen(query2) * sizeof(char));

    strncpy(querystring,query1,strlen(query1));
    strncat(querystring,username,strlen(username));
    strncat(querystring,query2,strlen(query2));

    printf("Query string: %s\n",querystring);

    mysql_query(mysql_con,querystring);
    MYSQL_RES *result = mysql_store_result(mysql_con);


    int num_fields = mysql_num_fields(result);
    int num_rows = mysql_num_rows(result);

    if (num_rows != 0) {

        MYSQL_ROW row;
        printf("Query returned %i results with %i fields\n",num_rows,num_fields);

        row = mysql_fetch_row(result);

        printf("Password returned: %s\n",row[0]);

        int comparison = strncmp(password, row[0], strlen(password));

        if (comparison == 0) {
            printf("Passwords match!\n");
        } else {
            printf("Passwords do NOT match!\n");
        }

    } else {
        printf("No such user... Password is invalid");
    }
    free(querystring);
}

現時点では、動作しています...出力:

Checking password for jhall@futuresouth.us - pw: 5f4dcc3b5aa765d61d8327deb882cf99
Query string: SELECT password FROM logins WHERE email = 'test@blah.com' LIMIT 1
Query returned 1 results with 1 fields
Password returned: 5f4dcc3b5aa765d61d8327deb882cf99
Passwords match!

で呼び出されます:

test("test@blah.com","5f4dcc3b5aa765d61d8327deb882cf99");

文字列をより適切に操作する方法について、またはこれを行った方法に予期しない問題があるかどうかについての意見を探しています。Cでデータ構造を扱うのは初めてです。

4

2 に答える 2