четверг, 4 декабря 2008 г.

Учебник:Grid PHP SQL Часть 2

Создание PHP / SQL обеспечения
SQL таблицы
Я предполагаю, что вы уже немного знаете о PHP и SQL. Постараюсь затронуть только основы в этом учебнике. Ок, давайте создадим несколько очень простых SQL таблиц! Мы собираемся создать маленькую историю США, мы будем иметь дело с различными президентами США. Я создал две таблицы, PRESIDENTS (президенты) и PARTIES (партии) и добавил одного президента. (остальных добавим позже).
Скачайте файл с SQL. Вам надо будет запустить его в базе данных, чтобы к началу работы таблицы уже были созданы.

JSON формат.
Перед началом работы с PHP файлом, вам нужно знать, что мы будем использовать формат JSON. Подробнее о нем вы можете посмотреть в википедии.. JSON - это способ форматирования данных, как тот же XML или CSV. За исключением того, что он намного компактнее чем XML.
Пример JSON:
{"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}
]
}
}}

То же самое в XML будет выглядеть так:
<menu id="file" value="File">
<popup>
<menuitem value="New" onclick="CreateNewDoc()" />
<menuitem value="Open" onclick="OpenDoc()" />
<menuitem value="Close" onclick="CloseDoc()" />
</popup>

</menu>

И это сохраняет много места, спросите вы? Ну на самом деле это заметно на больших массивах данных... В любом случае, Ext понимает как JSON так и XML. Сейчас мы сконцентрируемся на JSON, так как большинство примеров, которые вы бы хотели увидеть будет использовать этот формат. Давайте запомним, что будем посылать форматированный в виде JSON массив нашему Ext скрипту. Мы сделаем это в нашем PHP файле с помощью функции JEncode().

PHP файл.

Ок, вот наш серверный скрипт. Давайте пройдемся по нему...
Во-первых серверу нужно подключится к базе данных. мы создадим очень простое подключение:
<?php
////////////////////////////////////////////////////////
// DATABASE.PHP
////////////////////////////////////////////////////////
mysql_connect("localhost", "username", "pwd") or
die("Could not connect: " . mysql_error());
mysql_select_db("db_name");


Вам нужно будет изменить имена компьютера, пользователя, пароль и имя базы данных на ваши.
Во-вторых нам нужно обрабатывать запросы от Ext. Мы будем из Ext передавать через $_POST в переменную "task" различные задачи. Итак, представьте что скрипт прислал на запрос в переменной $_POST['task'] и нам нужно его обработать.

  $task = '';
if ( isset($_POST['task'])){
$task = $_POST['task']; // получаем значение переменной из Ext
}
switch($task){
case "LISTING": // отдать весь список
getList();
break;
default:
echo "{failure:true}"; // простой 1-массив JSON - ответ : ошибка запроса.
break;
}

Отлично... Теперь, когда это сделано, давайте создадим функцию getList() которая будет посылать простой запрос нашей базе данных. Единственная проблема в том, что нам нужен для Ext формат JSON а SQL запрос возвращает массив. Итак, теперь мы должны представить скрипт, который будет конвертировать эти данные.
Ок, а вам это и не нужно делать... На самом деле в PHP версии 5.2 и выше эта функция уже реализована. Дааа... Но мы должны сделать так, чтобы скрипт работал на любой версии PHP, поэтому мы должны добавить файл JSON.php который будет осуществлять конвертирование для нас.

Отлично, возвращаемся к коду :
function getList() 
{
$query = "SELECT * FROM presidents pr, parties pa WHERE pr.IDparty = pa.IDparty";
$result = mysql_query($query);
$nbrows = mysql_num_rows($result);
if($nbrows>0){
while($rec = mysql_fetch_array($result)){
// render the right date format
$rec['tookoffice']=codeDate($rec['tookoffice']);
$rec['leftoffice']=codeDate($rec['leftoffice']);
$arr[] = $rec;
}
$jsonresult = JEncode($arr);
echo '({"total":"'.$nbrows.'","results":'.$jsonresult.'})';
} else {
echo '({"total":"0", "results":""})';
}
}

Как вы видите мы сложили все в большой массив $arr и передали его нашей JEncode() функции. Результат, $jsonresult - отличный JSON массив, готовый к отправке обратно скрипту Ext. Мы добавили количество записей и отправляем все обратно с помощью команды ECHO.
Запомните: Команда ECHO позволяет нам сделать отладку кода проще... Если вы знаете о чем я говорю, скачайте FIREBUG и используйте его по мере изучения учебника.
Кстати, мы добавили маленькую функцию codeDate которая просто преобразует формат даты из mm/dd/YYYY в YYYY-mm-dd формат. Мы сделали это для того чтобы напрямую посылать запрос к базе.
// Encodes a YYYY-MM-DD into a MM-DD-YYYY string
function codeDate ($date) {
$tab = explode ("-", $date);
$r = $tab[1]."/".$tab[2]."/".$tab[0];
return $r;
}

Ок, мы просто должны теперь написать функцию JEncode и все будет сделано!
function JEncode($arr){
if (version_compare(PHP_VERSION,"5.2","<"))
{
require_once("./JSON.php"); //if php<5.2 need JSON class
$json = new Services_JSON(); //instantiate new json object
$data=$json->encode($arr); //encode the data in json format
} else
{
$data = json_encode($arr); //encode the data in json format
}
return $data;
}
?>


Скачать сходные коды этой части учебника можно здесь

Источник: http://extjs.com/learn/Tutorial:Grid_PHP_SQL_Part2

3 комментария:

  1. увы, это лишь перевод, а у источника они теперь тоже не работают

    ОтветитьУдалить
  2. Ну хотя бы для создания таблиц в БД можно было текст выложить на странице, а не скачивать...

    ОтветитьУдалить