Поиск по этому блогу

пятница, 29 июля 2011 г.

ExtJs 3.1 + PHP + Firebird. Шаблон формы авторизации.


Задача: Рыба формы авторизации. Пользователь вводит данные, которые отправляются php скрипту, обрабатываются, после чего юзер получает ответ. 

login.php
<?php
     // список библиотек, стилей, которые надо подключить
     include('extjslibsu.inc');     // здесь мы просто подключаем наши библиотеки    
?>

<!--включаем скрипт login-form.js -->
        <script type="text/javascript" src="login-form.js"></script>
    </head>
    <body>
        <!-- form will render to this element !!! НЕ ЗАБЫВАЕМ -->  
        <div id="login-form"></div>
    </body>
</html>

login-form.js
Форма обычная, с двумя полями ввода: имя и пароль (name, pwd)
Ext.onReady(function(){

Ext.QuickTips.init();
// Создаем форму
var loginForm = new Ext.FormPanel ({
labelWidth: 75,
url:'checklogin.php', // когда форма принимается (submitted) данные формы перенаправляются на сервер, этому скрипту
frame:true,
title: 'Введите данные',
bodyStyle:'padding:5px 5px 0',
width: 350,
defaults: {width: 230},
defaultType: 'textfield',
items: [{
fieldLabel: 'Имя',
name: 'name',
allowBlank:false
},{
fieldLabel: 'Пароль',
name: 'pwd',
allowBlank:false
}
],
// Добавим две кнопки: принять и отменить
buttons: [{
text: 'Принять',
// обработчик 
handler: function (form,action) {
// при нажатии на эту кнопку данные будут переданы php скрипту
loginForm.getForm().submit({
waitMsg: 'Идет проверка...', // Сообщение ожидания
timeout: 100, // срок ожидания ответа в секундах

success: function (form,action) { // Успешная проверка
Ext.MessageBox.alert ('Сообщение', 'Добро пожаловать !');
// а так можно получить текст ответа целиком
//Ext.MessageBox.alert ('Message', action.response.responseText);
},
failure: function (form,action) { // Проверку не прошел
Ext.MessageBox.alert ('Ошибка', action.result.errorMessage);
} });
}
} ,{
text: 'Отмена',
handler: function () {
// просто очищаем поля формы
loginForm.getForm().reset();
}
}]

});
// finally render the form
loginForm.render ('login-form'); // render form
});

Серверная часть
checklogin.php
<?php
$host="127.0.0.1:C:/XAMPP/xampp/BD/pubob.fdb";
$username="SYSDBA";
//$password="1212";
$password="masterkey";
$result = 0;

$dbh = @ibase_connect($host, $username, $password);
if ($dbh == FALSE)
{
$errmsg = 'Ошибка соединения '. ibase_errmsg();
// ... обрабатываем эту ошибку
}

$stmt = " select IDUSER, KODPFR "
." from EE_USER "
." where "
." UNAME = '".$_POST['name']."' "
." and PWD = '".$_POST['pwd']."'";
$sth = ibase_query($dbh, $stmt);

while ($row = ibase_fetch_object($sth)) {
// ...пишем в базу, в сессию и прочая
//echo $row->IDUSER, "\n";
// ...
$result = 1;
}
ibase_free_result($sth);
ibase_close($dbh);

// отправляем результат выполнения нашего скрипта (проверки) клиенту
if ($result==1) {
echo '{"success": "true"}'; // успешно
}
else {
// ошибка авторизации
echo "{success: false, errorMessage:\"Мы вас не узнали\"}";
}
?>

Для данных в формате JSON в серверном коде достаточно определить поле errorMessage
а в клиентском коде js чтобы получить доступ к этому полю написать action.result.errorMessage
Получить полную строку ответа от сервера можно Ext.MessageBox.alert ('Message', action.response.responseText);