Просмотр полной версии : [Вопрос] Обновление пароля. Сохранение данных в MySQL.
Здравствуйте уважаемые пользователи. Не обновляется пароль.
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).
Помогите пожалуйста решить данную проблему.
Для чего вы в данном случае используете функцию "strlen" ?
Для чего вы в данном случае используете функцию "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 можно было обойтись одним вызовом функции.
В любом случае, даже если использовать просто params, данные не обновляются.
Daniel_Cortez
22.02.2016, 23:07
В любом случае, даже если использовать просто params, данные не обновляются.
Ну так вы же их не обновили в pInfo[playerid][Password] (или вы думали, что содержимое массива изменится само по себе?)
Но если запрос был сделан правильно, то пароль должен обновиться в БД.
format(string, sizeof(string), "UPDATE `users` SET `Password` = '%s' WHERE `uName` = '%s'", strlen(params), nick(playerid));
Вы вместо пароля записываете его длину, это норма?
Точнее даже не записываете, ибо при попытки использования %s и целочисленного значения (strlen) выдаст ошибку.
Ну или как-то так
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;
}
Ну так вы же их не обновили в 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;
}
Сейчас попробую ваш вариант.
DeimoS, ваш вариант помог. Спасибо.
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot