Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > FAQ

FAQ Часто задаваемые вопросы

Ответ
 
Опции темы
Старый 10.03.2010, 17:34   #1
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Счастье Создание и работа с удаленной базой данных MySQL через PHP

Создание и работа с удаленной базой данных MySQL через PHP

В данной статье я постараюсь подробно описать как создать базу данных MySQL на сервере, как создать PHP скрипт для работы с этой базой данных, как создать приложение для мобилы, которое будет обращаться к нашему PHP скрипту.

К примеру, перед нами стоит банальная задача: У нас есть некая мобильная игра и нам хотелось бы чтобы таблица результатов к этой игре хранилась на удаленном сервере. Если у вас немного другие задачи, неважно. Принцип один и тот же. Нужно с мобильника передать информацию PHP скрипту чтобы он записал её в базу данных и наоборот, обратиться к PHP скрипту чтобы он нам выдал какую-то информацию из базы данных. Это не обязательно может быть таблица результатов. Вы, к примеру, можете сделать онлайн регистрацию для вашей программы и на сервере, к примеру, будет хранится информация типа имя/пароль и PHP скрипт будет только хранить эту информацию и выдавать ответ можно ли запускать программу или нет. Всё это лишь мелкие детали, принцип кругом один и тот же. Так что тут мы покажем всё это на примере хранения таблицы рекордов.

Прежде всего нам нужно выбрать хостинг. Подойдет далеко не любой.
Нам нужен хостинг с поддержкой PHP, MySQL, FTP. А таких мало, поверьте мне.
Я нашел бесплатный хостинг для примера. Но вам всё же советую воспользоваться платным хостингом.
Поверьте, лучше заплатить 10$ и получить качественный хостинг без рекламы и тормозов, чем мучиться с бесплатным.

Я нашел для примера бесплатный хостинг на http://hostmonster.org.ua/

Итак, я создал бесплатный сайт www.mptest.hmsite.net
При регистрации мне дали такую информацию:
Адрес MySQL сервера: sql301.hmsite.net
Пользователь MySQL: hoste_5225350
Пароль для MySQL: 123456mp
Адрес FTP сервера: ftp.hmsite.net
Логин FTP: hoste_5225350
Пароль FTP: 123456mp

При регистрации вас попросят подтвердить ваш email. Думаю с этим проблем не возникнет, просто перейдите по ссылке в пришедшем письме.

C помощью контрольной панели (http://cpanel.hmsite.net/) я создал базу данных под названием "mybase" (её тут же перекрестили в "hoste_5225350_mybase")
Если на вашем хостинге нет контрольной панели и нет никаких инструментов по работе с базами данных, не беда. Можно всё сделать и с помощью одного только PHP.

Теперь приступаем к созданию PHP скрипта.

Для начала основы синтаксиса MySQL запросов.
Для создания нашей базы данных нужно дать серверу команду:
CREATE TABLE `scores` (`idINTEGER UNSIGNED NOT NULL DEFAULT NULL AUTO_INCREMENT, `usernameTEXT NOT NULL, `pointsINT NOT NULLPRIMARY KEY(`id`));"); 
В этом случае в нашей базе данных создастся таблица под названием "scores" с тремя колонками:
id - тут хранится уникальный ID номер записи в таблице, MySQL сервер сам присваивает номера нашим записям (INT)
username - тут хранится имя пользователя (TEXT)
points - тут будут храниться набранные очки (INT)

Для добавления записи в нашу таблицу нужно дать серверу команду типа:
INSERT INTO `scoresVALUES (0'vasya'12345); 
В этом случае в таблицу "scores" добавится запись с именем пользователя "vasya" и очки его "12345".
ID номер в таблице будет вставлен автоматически сервером.

Для получения таблицы рекордов нужно передать команду:
SELECT `username`, `pointsFROM `scores`; 
то есть мы тут перечисляем какие колонки (username, points) нужно отображать и указываем имя таблицы (scores).
Но в таблице могут содержаться сотни тысяч записей, а нам нужно вывести список из 10 пользователей с наибольшим количеством очков,
поэтому наш запрос нужно немного усовершенствовать:
SELECT `username`, `pointsFROM `scoresORDER BY 2 DESC LIMIT 10
тут мы дополнительно указываем, что нужно сделать сортировку по второму столбику (ORDER BY 2) в порядке убывания значений (DESC)
причем выводить нужно только первые 10 значений (LIMIT 10).

В принципе, этих знаний уже хватит для создания скрипта. Если перед вами стоят другие задачи или вы заинтересовались остальными поддерживаемыми
командами MySQL сервера - советую почитать книгу по MySQL потому как все команды сервера описать в данной статье не представляется возможным.

Итак, создаем файл score.php и в любом текстовом редакторе пишем там такие строки:
<?

$host = "sql301.hmsite.net"; // Адрес нашего MySQL сервера
$user = "hoste_5225350"; // Имя пользователя
$pass = "123456mp"; // Пароль
$base = "hoste_5225350_mybase"; // Название базы данных

$action = "none"; // Значение действия по умолчанию

if (isset($_GET['action'])) $action = $_GET['action']; // Если в GET запросе передается параметр action, то записать его в переменную $action

if ($action == "install") // Если передали команду "install" (установка таблицы)
{
    $conn = mysql_connect($host, $user, $pass) or die("Could not connect"); // Попытка соединиться с MySQL сервером
    //mysql_create_db($base); // Создаем базу данных если она не создана, то уберите кавычки в начале строки
    mysql_select_db($base) or die("Can't select database."); // Выбираем нашу базу данных
    $result = mysql_db_query($base, "CREATE TABLE ".$base.".`scores` (`id` INTEGER UNSIGNED NOT NULL DEFAULT NULL AUTO_INCREMENT, `username` TEXT NOT NULL, `points` INT NOT NULL, PRIMARY KEY(`id`));"); // Передаем команду на создание таблицы
    echo "Database created!"; // Выводим сообщение, что создание прошло успешно
}

if ($action == "get")
{
    $conn = mysql_connect($host, $user, $pass) or die("Could not connect"); // Попытка соединиться с MySQL сервером
    mysql_select_db($base) or die("Can't select database."); // Выбираем нашу базу данных
    $result = mysql_db_query($base, "SELECT `username`, `points` FROM `scores` ORDER BY 2 DESC LIMIT 10;"); // Делаем запрос на выдачу таблицы результатов
    while($row = mysql_fetch_array($result)) // Цикл пока есть значения в нашем сполученном списке строк
    {
        $name = $row['username']; // Отделяем имя пользователя
        $points = $row['points']; // Отделяем количество очков
        echo $name."|".$points."|"; // Выводим на экран имя и очки разделяя их символом |
    }
}

if ($action == "save") // Если передали команду "save" (запись рекорда в таблицу)
{
    $name = $_GET['name']; // извлекаем имя пользователя
    $points = $_GET['points']; // извлекаем количество очков
     $conn = mysql_connect($host, $user, $pass) or die("Could not connect"); // Попытка соединиться с MySQL сервером
    mysql_select_db($base) or die("Can't select database."); // Выбираем нашу базу данных
    $result = mysql_db_query($base, "INSERT INTO `scores` VALUES (0, '".$name."', ".$points.");"); // Добавляем запись в таблицу
    if ($result != false) echo "Saved!"; // Выводим сообщение, что добавление записи прошло успешно
    else echo "Save error"; // Ошибка записи
}

?>
Я постарался прокомментировать каждую строку в скрипте, так что вам должно быть всё понятно.
Для переделки скрипта под ваш хостинг нужно будет только изменить первые 4 строчки скрипта, где указываются адрес сервера, логин, пароль, название базы данных и проч.

Теперь нам понадобится FTP доступ к нашему сайту.
Для соединения с сайтом я использую Total Commander. Вы же можете легко применить и другой FTP клиент.

Итак, в TC нажимаем Ctrl+F или выбираем пункт FTP - Соединиться с FTP сервером
В появившемся окне нажимаем кнопку "Добавить..." и вводим в поля нужные значения.



и жмем кнопку "Ок". В появившемся окне выбираем имя нашей учетной записи и жмем "Соединиться".



Если все параметры вы ввели правильно и соединение прошло успешно, то в одной из панелей вы увидите папку под названием "htdocs".
Именно в эту папку нам и нужно закачать наш скрипт score.php
С удаленными папками на FTP сервере можно работать как и с обычными.
Для закачки файла просто перетащите его из одного окошка в другое.

Теперь запускаете ваш любимый браузер. У кого Opera, у кого FireFox. На худой конец сгодится и IE.

СОЗДАНИЕ ТАБЛИЦЫ В БАЗЕ ДАННЫХ
Для создания базы данных нужно в браузере набрать ссылку типа
http://mptest.hmsite.net/score.php?action=install 
если установка пройдет удачно, то вы увидите в браузере строку "Database created!" иначе - сообщение с причинами неудачи.

ДОБАВЛЕНИЕ ЗАПИСИ В ТАБЛИЦУ
Теперь попробуйте добавить запись в таблицу. Для этого в браузере пишем запрос типа:
http://mptest.hmsite.net/score.php?action=save&name=vasya&points=0 
если запись прошла удачно, то вы увидите в окошке браузера строку "Saved!".

ЗАПРОС ЗАПИСЕЙ ИЗ ТАБЛИЦЫ
Ну а теперь попробуем запросить таблицу результатов. Для этого в браузере пишем в строке адреса такое:
http://mptest.hmsite.net/score.php?action=get 
если запрос отработается удачно, то в окне браузера мы увидим строку "vasya|0|". Что и требовалось.

Теперь пишем программу для MIDlet Pascal:
Program MySQLtest;
Uses parse;
Var 
connhttp;
sstring;
ihgtinteger;
Begin
    
    
// Пример отправки рекорда на сервер
    
{
    if 
not OpenHttp(conn'http://mptest.hmsite.net/score.php?action=save&name=midlet&points=10'then Halt;
    
SetHttpMethod(connGET);
    if 
SendHttpMessage(conn) <> 200 then Halt;
    }
    
    
// Пример запроса таблицы рекордов с сервера
    
if not OpenHttp(conn'http://mptest.hmsite.net/score.php?action=get'then Halt;
    
SetHttpMethod(connGET);
    if 
SendHttpMessage(conn) <> 200 then Halt;
    
s:=GetHttpResponse(conn);
    
    
// Выводим таблицу результатов на экран
    
hgt := GetStringHeight('X') / 2// Высота шрифта
    
parse.line(s'|'); // Парсим результат
    
for i:=0 to 3 do
    
begin
        DrawText
(parse.get(i) + ' - ' parse.get(i+1), 5hgt);
        
i:=i+1;
    
end;
    
Repaint;    
    
Delay(5000);
End
В KEmulator работает нормально. Хотя возможно придется и использовать библиотеку типа Lib_web.
Миниатюры
Нажмите на изображение для увеличения
Название: 1.PNG
Просмотров: 1968
Размер:	5.5 Кб
ID:	9474  
Вложения
Тип файла: zip score.zip (1.2 Кб, 981 просмотров)
Тип файла: zip MySQLtest.zip (3.5 Кб, 1032 просмотров)
(Offline)
 
Ответить с цитированием
Эти 16 пользователя(ей) сказали Спасибо odd за это полезное сообщение:
AVIZO (11.03.2010), Bananbl4 (31.08.2010), BlackOut (18.03.2010), cherepets (11.03.2010), DIMMON4IK (10.03.2010), Dream (10.03.2010), midlet_pascal (26.01.2012), MotoMustanger (15.03.2010), neon (25.08.2012), Phantom (10.03.2010), psih1 (14.04.2010), Reks888 (18.03.2010), scimitar (16.03.2010), Twice (20.04.2011), VladEvil (06.04.2011), VM (11.03.2010)
Старый 10.03.2010, 19:31   #2
DIMMON4IK
Знающий
 
Аватар для DIMMON4IK
 
Регистрация: 21.07.2009
Адрес: Украина
Сообщений: 219
Написано 44 полезных сообщений
(для 78 пользователей)
Хорошо Ответ: Создание и работа с удаленной базой данных MySQL через PHP

Odd, спасибо за очень хорошую статью
__________________


(Offline)
 
Ответить с цитированием
Старый 15.03.2010, 23:32   #3
MotoMustanger
Нуждающийся
 
Регистрация: 13.11.2006
Сообщений: 60
Написано одно полезное сообщение
Ответ: Создание и работа с удаленной базой данных MySQL через PHP

Прикольно получается! А таким способом можно будет создать сервак для ява-игры?
(Offline)
 
Ответить с цитированием
Старый 16.03.2010, 02:21   #4
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Ответ: Создание и работа с удаленной базой данных MySQL через PHP

Сообщение от MotoMustanger Посмотреть сообщение
Прикольно получается! А таким способом можно будет создать сервак для ява-игры?
Да, можно всё что угодно. Правда высокой скорости не обещаю, поэтому игра должна быть не слишком динамичной. Так можно хранить:
- имя / пароль (для всяких регистраций сервисов)
- карты или уровни для многоуровневых игр
- можно сделать форум, чат или некий аналог аськи (общение между пользователями)
- всякие сервисы по выдаче информации (гороскопы, прогнозы погоды, новости)
- и проч.

Если вас интересует эти или ещё какие-то направления, то напишите пожелание что вы хотите сделать и я напишу пример PHP скрипта.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо odd за это полезное сообщение:
im_zorg (10.04.2010), kizup (30.11.2012)
Старый 18.03.2010, 22:15   #5
MotoMustanger
Нуждающийся
 
Регистрация: 13.11.2006
Сообщений: 60
Написано одно полезное сообщение
Ответ: Создание и работа с удаленной базой данных MySQL через PHP

Я то в php и mysql не сильно шарю. Интересно было бы узнать пример php чата. Причем данные из архива таблицы должны постоянно удаляться чтобы не засорять сервер.
(Offline)
 
Ответить с цитированием
Старый 19.03.2010, 02:41   #6
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Ответ: Создание и работа с удаленной базой данных MySQL через PHP

Сообщение от MotoMustanger Посмотреть сообщение
Я то в php и mysql не сильно шарю. Интересно было бы узнать пример php чата. Причем данные из архива таблицы должны постоянно удаляться чтобы не засорять сервер.
На самом деле отличий от таблицы результатов мало.
Там пользователь/очки, а в чате пользователь/сообщение.
Там сортировать нужно по количеству очков.
В чате - по дате и времени сообщения.

Ладно, я скоро выложу пример PHP скриптов чата и примет программы на мидлет паскале для чата. Тем более что там нужно будет добавить функцию автоматического удаления старых сообщений, можно ещё добавить пример регистрации.
(Offline)
 
Ответить с цитированием
Старый 31.03.2010, 00:24   #7
bubon
AnyKey`щик
 
Регистрация: 25.11.2007
Сообщений: 12
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Создание и работа с удаленной базой данных MySQL через PHP

http://forum.boolean.name/showthread.php?t=1724&page=3 (www.boolean.name > Программирование игр для мобильных телефонов > JAVA Micro Edition > Программирование > собираю команду)
тут в сообщении от меня есть вложеные файлы на мидлетпаскале и пхп. давно делал но забросил. пхп часть и клиентская часть. (однорукий бандит)
(Offline)
 
Ответить с цитированием
Старый 04.04.2010, 18:25   #8
MotoMustanger
Нуждающийся
 
Регистрация: 13.11.2006
Сообщений: 60
Написано одно полезное сообщение
Ответ: Создание и работа с удаленной базой данных MySQL через PHP

1) код
msg:=formgettext(tb_id);
if 
not OpenHttp(conn'http://***.hmsite.net/score.php?action=save&name=myname&date='+'['+GetHour(time)+':'+minute+':'+second+']:'+'&msg='+msgthen SetFormTitle('Error!');
SetHttpMethod(connGET);
if 
SendHttpMessage(conn) <> 200 then SetFormTitle('Error2!'); 
на эмуляторе работает хорошо, а вот на телефоне вылетает с ошибкой Error2! - ошибка отправки. Что тут надо исправить чтобы на телефоне со слабым инетом тоже работало?

Еще возникло несколько проблем с кодировкой:
2) Через браузер русские символы просматривает только cp1251. Ставил в базе и скрипте cp1251, utf8 кодировки, но KEmulator и мобильный принимают кракозябры, английские символы отображается нормально.

3) При посылке сообщения на сервер через эмулятор с текста почему-то удаляются все пробелы. Через браузер все нормально.

Последний раз редактировалось MotoMustanger, 05.04.2010 в 01:15.
(Offline)
 
Ответить с цитированием
Старый 10.04.2010, 10:54   #9
im_zorg
Знающий
 
Регистрация: 25.10.2009
Сообщений: 338
Написано 53 полезных сообщений
(для 61 пользователей)
Ответ: Создание и работа с удаленной базой данных MySQL через PHP

Сообщение от odd Посмотреть сообщение
Да, можно всё что угодно. Правда высокой скорости не обещаю, поэтому игра должна быть не слишком динамичной. Так можно хранить:
- имя / пароль (для всяких регистраций сервисов)
- карты или уровни для многоуровневых игр
- можно сделать форум, чат или некий аналог аськи (общение между пользователями)
- всякие сервисы по выдаче информации (гороскопы, прогнозы погоды, новости)
- и проч.

Если вас интересует эти или ещё какие-то направления, то напишите пожелание что вы хотите сделать и я напишу пример PHP скрипта.
Хотелось бы пример mysql сервера для java игры с примером на мидлет паскале(Хотя бы просто точки обменивались координатами). Ну и
- имя / пароль (для всяких регистраций сервисов)
(Offline)
 
Ответить с цитированием
Старый 14.04.2010, 17:11   #10
psih1
Знающий
 
Аватар для psih1
 
Регистрация: 20.03.2010
Сообщений: 271
Написано 16 полезных сообщений
(для 32 пользователей)
Ответ: Создание и работа с удаленной базой данных MySQL через PHP

СПС Я долго ждал этой статьи
(Offline)
 
Ответить с цитированием
Старый 19.04.2011, 20:38   #11
Twice
Оператор ЭВМ
 
Регистрация: 19.12.2010
Сообщений: 42
Написано 5 полезных сообщений
(для 7 пользователей)
Ответ: Создание и работа с удаленной базой данных MySQL через PHP

Сообщение от odd Посмотреть сообщение
Ладно, я скоро выложу пример PHP скриптов чата и примет программы на мидлет паскале для чата. Тем более что там нужно будет добавить функцию автоматического удаления старых сообщений, можно ещё добавить пример регистрации.
Ждем
(Offline)
 
Ответить с цитированием
Старый 19.04.2011, 20:43   #12
im_zorg
Знающий
 
Регистрация: 25.10.2009
Сообщений: 338
Написано 53 полезных сообщений
(для 61 пользователей)
Ответ: Создание и работа с удаленной базой данных MySQL через PHP

Сообщение от Twice Посмотреть сообщение
Ждем
Не даждемся))
__________________
Я вернулсо в мидлет паскаль О_о уже написал новый проект Сайт моей компании: http://mpcompany.ucoz.com/ Сайт проекта "Путник" : http://putnik-project.ru/
(Offline)
 
Ответить с цитированием
Старый 20.04.2011, 13:02   #13
PassCall
Разработчик
 
Аватар для PassCall
 
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений
(для 319 пользователей)
Плохо Ответ: Создание и работа с удаленной базой данных MySQL через PHP

Я вот подумыываю сделать свою игру (KillemAll, мож кто видел) под онлайн. На 2-3 человек. Вот вопросы:
- Итак, каждый такт работы игры будет генерится текстовая строка 1xxxyyyaaa, в которой
1 - ID действия (в данном случае, передача координат)
x - координата x,
y - координата y,
a - угол поворота.

Плюс при выстреле будет генериться строка, содержащая информацию о том, под каким углом летит пуля.

Это ещё 4 байта: 2aaa
2 - ID действия (из противника вылетает пулся под указанным углом)
aaa -угол

Допустим, фпс - 10, игрок в среднем выпускает по 1 пуле в секунду.

Получаем: 10*10+4=104 байта в секунду. Пусть для игры человеку хватает 10-20 минут. 104*60*10(20)=62 400 (124 800).

Вопросы:
1. Не будет ли тормозить передача данных, если отправлять эти данные слишком часто (10-20 раз в секунду)?
2. Не жалко ли отдавать за 20 минут игры >=125КБ трафика (для тех, у кого "встроенный", траффик интернет)?
3. Всякие процедуры по скорости перемещения героя и столкноения с препятствиями вычисляет телефон.
То есть какой хакер может ломануть игру и поставит, скажем, мега скорость.
Выход - завставить производить все вычисления на сервере, а телефону отправлять лишь данные (например - телефон отправляет запрос (хочет узнать не столкнулся ли герой с препятствием). Сервер проверяет это и отправляет телефону отзыв ('1' - да столкнулся, стой на месте; '0' - все нормально, беги дальше.)). Но это же дополнительный трафик! Что посоветуете?

Вот.
Буду рад если кто ответит.
__________________
Мечта программиста: запрограммировать процесс программирования.

Всё гениальное - просто.

http://passcall.ucoz.com
(Offline)
 
Ответить с цитированием
Старый 20.04.2011, 15:57   #14
cherepets
Бывалый
 
Регистрация: 18.08.2009
Сообщений: 745
Написано 146 полезных сообщений
(для 215 пользователей)
Ответ: Создание и работа с удаленной базой данных MySQL через PHP

PassCall, я примерно тем же самым сейчас занимаюсь + у меня есть законченная (но косячная) ммо Doom story2.

И так, делюсь опытом:
1) Зачеркни свои вычисления, в них ты не учел то, что каждый раз будет отправляться на сервер куча заголовков хттп и прочей хрени. Да и возвращать тебе будут не только твою строку. В общем мета-данных в нашем случае оказывается больше, чем самих данных.
2) С учетом п.1, лагов мобильного интернета и того что запрос выполняется и ответ генерируется не мгновенно, то расчитывай на 1 обмен данными в 1.5-2 секунды.
3) Все вычисления повесить на серв - слишком сложно, можно попробовать сделать как я в cherry classic. Слишком нереалистичные данные (слишком большой урон противнику, слишком далекое перемещение за короткий срок) стоит отвергать сервером и клиентом стоит проверять, что эти данные не подвергаются внезапному слишком большому изменению.

Возможно первых 2х проблем можно избежать если у тебя внешний ИП и ты разберешься с сокетами.
(Offline)
 
Ответить с цитированием
Старый 20.04.2011, 18:11   #15
PassCall
Разработчик
 
Аватар для PassCall
 
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений
(для 319 пользователей)
Ответ: Создание и работа с удаленной базой данных MySQL через PHP

Как я понял, передача данных в реальном времени - безнадежная затея?
А жаль =(
__________________
Мечта программиста: запрограммировать процесс программирования.

Всё гениальное - просто.

http://passcall.ucoz.com
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 00:44.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com