Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Перевод сервера на MySQL

Статус
В этой теме нельзя размещать новые ответы.

Wiz Khalifa

Компетентный

Здравствуйте, скриптеры SA-MP. Сегодня для молодых скриптеров покажу, как осуществить перевод сервера из файлов в базу данных MySQL. Вообще что такое MySQL?

MySQL — Система Управления Базами Данных, сокращённо (СУБД). СУБД используется как сервер, обращаются к нему через программку phpMyAdmin. MySQL поддерживает многочисленные типов таблиц, по этому и ценится. Так же базы данных на много быстрее всяких там файлов, которые хранят в себе различную информацию, в данном случае будем переводить аккаунты в базу для SA-MP.

Ну, теперь начнём применять базу данных. Для начала нам конечно же понадобится Apache сервер , плагин и инклуд Mysql.


Устанавливаем Apache, и на рабочем столе увидите 3 ярлыка. Start, Stop, Restart.[/
CENTER]
http://sampru.ru/292-denwer.html (НЕ РЕКЛАМА)
(НЕ РЕКЛАМА)

Устанавливаем Apache, и на рабочем столе увидите 3 ярлыка. Start, Stop, Restart.


Запускаем Денвер, щёлкаем по ярлыку Start Denwer. Если денвер правильно установлен, то он запуститься. Далее идём в свой любимый браузер Firefox, Opera, Google Chroome в адресной строке набираем localhost в окне появится не большой списочек программ, нам нужна PhpMyAdmin. Мы зашли в основную программу, где создают базы и таблицы. Нам необходимо создать новую базу. Пишем любое название в поле и нажимаем создать. База готова, теперь нужно ей присвоить пользователя, нажимаем на строчку Привилегии, находим пользователя «root“ убираем пароль, и выбираем для этого пользователя базу данных которая нам необходима.


Теперь в своей базе нам нужно создать таблицу вот такого вида.



userid - ид игрока
username - ник
password — пароль

С базой мы закончили, переходим непосредственно к моду.

Ставим плагин, Windows mysql.dll, Linux mysql.so
Добавляем инклуд a_mysql.inc

В начале вставляем:​
PHP:
#define SQL_HOST "localhost"//сам хост
#define SQL_USER "root"//пользователь, которого мы задавали в базе.
#define SQL_PASS ""//пароль мы убрали у пользователя, без него полегче.
#define SQL_DB "Ваше Название"//Ваше название базы
Подключаемся к базе: Вставляем этот кусок кода в самый конец
​
PHP:
forward ConnectMySQL();
public ConnectMySQL()
{
    mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS))//подключаемся
 
        if(mysql_ping() == 1)//проверка подключились ли к базе
        {
            mysql_debug(1);
        printf("[MYSQL]: Подключение к `%s` выполнено!", SQL_DB);
    } 
    else
    {
        printf("[MYSQL]: [ERROR]: Подключение к `%s` не выполнено", SQL_DB);
    }
    return 1;
}
Mysql способна, к чтению(SELECT), к записи(INSERT) и обновлению(UPDATE) данных. К чему это всё я говорю, да к тому, нам же необходимо сделать регистрацию, авторизацию и обновление (сохранение) данных игрока.

Регистрация.
​
PHP:
 case 2: 
 {
 if (! strlen (inputtext) || strlen (inputtext)  32)
 {
 return ShowPlayerDialog (playerid,2,1,"Регистрация на Sent_Styles“,"Вы забыли ввесте пароль!nЧто-бы начать играть необходимо зарегестрироваться.nПожалуйста введите пароль ниже…“,"Далее“,"»); 
 }
format (qwery,512,"INSERT INTO `users` (`name`,`pass`) VALUES ('%s','%s') ", PlayerInfo[playerid][pName], inputtext); 
mysql_query (qwery); 
 //Дальнейшие действия регистрации 
 mysql_real_escape_string (inputtext, PlayerInfo[playerid][pPass]); 
 return 1; 
 }
Авторизация.
​
PHP:
 case 1:
                    {
                                BaseGet("pass",PlayerInfo[playerid][pPass]);//Запрос для получения пароля из бд ,в переменную .
                                if(!strlen(inputtext)){ShowPlayerDialog(playerid,1,1,"Авторизация на Sent_Styles","Вы забыли ввести пароль.nЧто-бы начать играть необходимо авторизоваться.nПожалуйста введите пароль ниже...","Далее","");}
                                if(strcmp(PlayerInfo[playerid][pPass],inputtext, true) == 0)
                                {
                                        //Действия при правильном вводе пароля 
                                        return 1;
                                }
                                else ShowPlayerDialog(playerid,1,1,"Авторизация на Sent_Styles","Вы не правильно ввели пароль.nЧто-бы начать играть необходимо авторизоваться.nПожалуйста введите пароль ниже...","Далее","");
                return 1;
                    }
Обновление (Сохранение) Данных.​
PHP:
 public OnPlayerDisconnect(playerid, reason)
{
BaseSetInt("users","level",PlayerInfo[playerid][pLevel],"Name",PlayerInfo[playerid][pName]);
/*
format(query,128,"UPDATE `users` SET `level` = '%d' WHERE `Name` = '%s'",PlayerInfo[playerid][pLevel],PlayerInfo[playerid][pName]);
mysql_query(query);
*/
//Дальнейшие действия 
return 1;
}
PHP:
    BaseSetInt(base[],fields[],perms,opredelitel[],name[])
        {
                new query[256];
                format(query,512,"UPDATE `%s` SET `%s` = '%d' WHERE `%s` = '%s'",base,fields,perms,opredelitel,name);
                mysql_query(query);
        }
/*==============================================================================*/
        BaseGet(fields[],perms[])
        {
                new fetch[128];
                mysql_fetch_field_row(fetch,fields);
                strmid(perms, fetch, 0, strlen(fetch), 255);
        }
/*==============================================================================*/
        BaseGetInt(fieldi[],&permi)
        {
                new fetch[128];
                mysql_fetch_field_row(fetch,fieldi);
                permi = strval(fetch);
        }
/*==============================================================================*/
        BaseGetFloat(fieldf[],&Float:permf)
        {
                new fetch[256];
                mysql_fetch_field_row(fetch,fieldf);
                permf = floatstr(fetch);
        }
/*==============================================================================*/
        BaseSetFloat(base[],fields[],Float:perms,opredelitel[],name[])
        {
                new query[128];
                format(query,sizeof(query),"UPDATE `%s` SET `%s` = '%f' WHERE `%s` = '%s'",base,fields,perms,opredelitel,name);
                mysql_query(query);

        }

BaseSet(base[],fields[],perms[],opredelitel[],name[])
{
        mysql_real_escape_string(perms,perms);
        new query[512];
        format(query,512,"UPDATE `%s` SET `%s` = '%s' WHERE `%s` = '%s'",base,fields,perms,opredelitel,name);
        mysql_query(query);

}
Всё! Мы перенесли сохранение данных игрока из файлов в базу данных Mysql, урок перевод сервера на MySQL закончен.


​
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу