Показать сообщение отдельно
Старый 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
Просмотров: 1974
Размер:	5.5 Кб
ID:	9474  
Вложения
Тип файла: zip score.zip (1.2 Кб, 991 просмотров)
Тип файла: zip MySQLtest.zip (3.5 Кб, 1040 просмотров)
(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)