Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Приветствую ребят.
Спасибо Вам за этот чудесный урок, все очень красиво и удобно расписано.
Вопрос такой, case 1044,1045 и т.д это типо индентификатор ошибки в функции mysql_errno?
Код:switch(mysql_errno()) { case 0: print("Подключение к базе данных удалось"); case 1044: print("Подключение к базе данных не удалось [Указано неизвестное имя пользователя]"); case 1045: print("Подключение к базе данных не удалось [Указан неизвестный пароль]"); case 1049: print("Подключение к базе данных не удалось [Указана неизвестная база данных]"); case 2003: print("Подключение к базе данных не удалось [Хостинг с базой данных недоступен]"); case 2005: print("Подключение к базе данных не удалось [Указан неизвестный адрес хостинга]"); default: printf("Подключение к базе данных не удалось [Неизвестная ошибка. Код ошибки: %d]", mysql_errno()); }
Именно
- - - Добавлено - - -
Я, кстати, изначально реализовывал этот код в подобную штуку:
PHP код:
mysql_connect_ID = mysql_connect(данные_для_подключения);
MySQLConnectError(mysql_errno(), 0);
PHP код:
stock MySQLConnectError(error_id, attempt = 0)
{
switch(error_id)
{
case 0:
{
SetGameModeText("Evil Scripter v.0.1");
SendRconCommand("hostname ServerName");
SendRconCommand("language Русский/Russian");
SendRconCommand("weburl DeimoS");
if(attempt) SendRconCommand("password 0");
print("Подключение к базе данных удалось");
return 1;
}
case 1044:
{
print("Подключение к базе данных не удалось [Указано неизвестное имя пользователя]");
SendRconCommand("hostname MySQL: Неизвестное имя пользователя");
SendRconCommand("password 666555");
}
case 1045:
{
print("Подключение к базе данных не удалось [Указан неизвестный пароль]");
SendRconCommand("hostname MySQL: Неизвестный пароль");
SendRconCommand("password 666555");
}
case 1049:
{
print("Подключение к базе данных не удалось [Указана неизвестная база данных]");
SendRconCommand("hostname MySQL: Неизвестная база данных");
SendRconCommand("password 666555");
}
case 2003:
{
print("Подключение к базе данных не удалось [Хостинг с базой данных недоступен]");
SendRconCommand("hostname MySQL: Хостинг недоступен");
SendRconCommand("password 666555");
}
case 2005:
{
print("Подключение к базе данных не удалось [Указан неизвестный адрес хостинга]");
SendRconCommand("hostname MySQL: Невалидный адрес хостинга");
SendRconCommand("password 666555");
}
default:
{
printf("Подключение к базе данных не удалось [Неизвестная ошибка. Код ошибки: <%d>]", error_id);
new string[38+11];
format(string, sizeof(string), "hostname MySQL: Неизвестная ошибка [%d]", error_id);
SendRconCommand(string);
SendRconCommand("password 666555");
}
}
SendRconCommand("language Closed [MySQL_Error]");
SendRconCommand("weburl Closed [MySQL_Error]");
SetGameModeText("Closed [MySQL_Error]");
SetTimer("@___Reconnect_MySQL", 1000, 0);
return 1;
}
То бишь, пока сервер не сможет соединиться с MySQL сервером, он будет запоролен и будут выданы соответствующие сообщения + он будет каждую секунду пытаться переподключиться.PHP код:
@___Reconnect_MySQL();
@___Reconnect_MySQL()
{
mysql_close(mysql_connect_ID);
mysql_connect_ID = mysql_connect(данные_для_подключения);
MySQLConnectError(mysql_errno(), 1);
return 1;
}
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
О, не ожидал спасибо. Возьму на заметку.
Какую можно сделать проверку если вовремя работы сервера например вырубается бд?
- - - Добавлено - - -
Кстати, при создании пароля с русскими символами то в бд они сохраняются иероглифами.
- - - Добавлено - - -
Код проверок есть всё есть, но игрок может пока не авторизован и команды писать и текст в чат.
Ну как-то так:
Но разрыв с БД обнаружится только при первом отосланном запросе к БД и этот запрос уже будет утерян 100%.PHP код:
public OnQueryError(errorid, error[], callback[], query[], connectionHandle)
{
if(errorid != 0)
{
//Действие
}
return 1;
}
Можно сделать реализацию попытки переподключения (тут проблем нет) и отправки повторного запроса, но беда в том, что в OnQueryError приходит информация только о тексте самого запроса и о коллбэке, в который отсылается ответ на запрос в виде кэша, поэтому придётся для каждого запроса, требующего кэширование (а это "SELECT * FROM" или, в редких случаях (как в случае с этой регистрацией) "INSERT"), делать индивидуальные запросы. Но тут появляется ещё одна проблема: где взять данные, которые передаются в функцию, вызываемую запросом? То бишь, в случае с UploadPlayerAccount, это "playerid". Лично я способов, без создания каких-то супер-костылей, не вижу
Последний раз редактировалось DeimoS; 29.02.2016 в 10:54.
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
DeimoS, тебе цены нет. Спасибо.
прочел много букавок, многое взял для себя, многое исправил в моде.
Обновил урок, добавив пункт 8, о котором совсем забыл при публикации статьи :( Кто использует сию регистрацию и кто самостоятельно этот код не добавил - добавьте, ибо без него Вы получите множество проблем :(
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
PAWN Compiler делает то, что вы приказали ему сделать, а не то, что вы хотели, чтобы он сделал..
25% времени в программировании уходит на размышления о том, что пользователь может сделать не так.[HR]/Брайан Хьюмс/
#FIXSAMP
Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)