PDA

Просмотр полной версии : [Вопрос] Обновление пароля. Сохранение данных в MySQL.



Wise
22.02.2016, 20:49
Здравствуйте уважаемые пользователи. Не обновляется пароль.

if(!strcmp(cmdtext, "/setpass", true))
{
if(isnull(params)) return SendClientMessage(playerid, -1, "/setpass [новый пароль].");
if(strlen(params) < 6 || strlen(params) > 20) return SendClientMessage(playerid, -1, "Не меньше 6 и не больше 20 символов.");
new string[80+MAX_PLAYER_NAME+1];
printf("До: %s", pInfo[playerid][Password]);
format(string, sizeof(string), "UPDATE `users` SET `Password` = '%s' WHERE `uName` = '%s'", strlen(params), nick(playerid));
mysql_function_query(connect_base, string, false, "", "");
printf("После: %s", pInfo[playerid][Password]);
return 1;
}
В до и после пишет: "none" (это стандартное значение, установленное в MySQL).
Помогите пожалуйста решить данную проблему.

L0ndl3m
22.02.2016, 22:14
Для чего вы в данном случае используете функцию "strlen" ?

Wise
22.02.2016, 22:43
Для чего вы в данном случае используете функцию "strlen" ?


error 033: array must be indexed (variable "params")

Daniel_Cortez
22.02.2016, 22:47
error 033: array must be indexed (variable "params")
Речь была про использование strlen внутри format, но и в if можно было обойтись одним вызовом функции.

Wise
22.02.2016, 22:53
В любом случае, даже если использовать просто params, данные не обновляются.

Daniel_Cortez
22.02.2016, 23:07
В любом случае, даже если использовать просто params, данные не обновляются.
Ну так вы же их не обновили в pInfo[playerid][Password] (или вы думали, что содержимое массива изменится само по себе?)
Но если запрос был сделан правильно, то пароль должен обновиться в БД.

_lizard
22.02.2016, 23:11
format(string, sizeof(string), "UPDATE `users` SET `Password` = '%s' WHERE `uName` = '%s'", strlen(params), nick(playerid));

Вы вместо пароля записываете его длину, это норма?

Точнее даже не записываете, ибо при попытки использования %s и целочисленного значения (strlen) выдаст ошибку.

DeimoS
22.02.2016, 23:12
Ну или как-то так

if(!strcmp(cmdtext, "/setpass", true))
{
new string[80+MAX_PLAYER_NAME-4+1];
string[0] = strlen(params);
if(!string[0]) return SendClientMessage(playerid, -1, "/setpass [новый пароль].");
if(string[0] < 6 || string[0] > 20) return SendClientMessage(playerid, -1, "Не меньше 6 и не больше 20 символов.");


printf("До: %s", pInfo[playerid][Password]);
strcat(pInfo[playerid][Password], params, string[0]);

format(string, sizeof(string), "UPDATE `users` SET `Password` = '%s' WHERE `uName` = '%s'", params, nick(playerid));
mysql_function_query(connect_base, string, false, "", "");

printf("После: %s", params);
return 1;
}

Wise
22.02.2016, 23:16
Ну так вы же их не обновили в pInfo[playerid][Password] (вы же не думаете, что содержимое массива изменится само по себе?)
Но если запрос был сделан правильно, то пароль должен обновиться в БД.
Немного ступил. Я пытался присвоить переменной Password новое значение, но ничего не получается.

uInfo[playerid][uDostup] = strlen(params);
Без strlen выходит ошибка. Если со strlen, на сервере написать /setpass gfhjkm
то данные в логах будут такими:
До: none
После: fhjkm (первая буква исчезает).

- - - Добавлено - - -


Ну или как-то так

if(!strcmp(cmdtext, "/setpass", true))
{
new string[80+MAX_PLAYER_NAME-4+1];
string[0] = strlen(params);
if(!string[0]) return SendClientMessage(playerid, -1, "/setpass [новый пароль].");
if(string[0] < 6 || string[0] > 20) return SendClientMessage(playerid, -1, "Не меньше 6 и не больше 20 символов.");


printf("До: %s", pInfo[playerid][Password]);
strcat(pInfo[playerid][Password], params, string[0]);

format(string, sizeof(string), "UPDATE `users` SET `Password` = '%s' WHERE `uName` = '%s'", params, nick(playerid));
mysql_function_query(connect_base, string, false, "", "");

printf("После: %s", params);
return 1;
}

Сейчас попробую ваш вариант.

L0ndl3m
22.02.2016, 23:24
strval

Wise
22.02.2016, 23:34
DeimoS, ваш вариант помог. Спасибо.