Tem um bom tempo que não programo em PHP
A algumas semanas me interesse pelo framework EXTJS então estou querendo usá-lo em meu TCC.
O maior problema é que os exemplos que encontro estão com PHP estruturado então acabo me enrolando um pouco para adaptar para o OO.
Spoiler
Então, estou agora tentando criar uma pré-tela solicitando login e Senha e checando no banco de dados.
Criei então a Classe AutLogin.php
<?php
class AutLogin {
public $nome, $senha;
function getNome() {
return $this->nome;
}
function AutLogin($nome,$senha) { // método construtor.
$this->nome = $nome;
//A senha será submetida a um hash, que é uma criptografia sem volta.
//$this->senha = md5($senha);
$this->senha = $senha;
}
function autentica() {
$con = new Conexao(); // Cria um novo objeto de conexão com o BD.
$nome = $this->nome;
$senha = $this->senha;
$query = "SELECT * FROM `usuarios` WHERE `usu_login` = '".$nome."' AND `usu_senha` = '".$senha."'";
echo $query;
$resultados = $con->execute($query);
if (mysql_num_rows($resultados)>0) {
$this->geraSessao($this);
$con->fecha();
return true;
}
else{
return false;
echo "Falha ao Conectar";
}
}
function geraSessao($usuario) {
session_start();
$_SESSION['usuario'] = $usuario;
}
function destruirSessao(){
return session_destroy();
}
}
?>
E o arquivo para include e receber os dados do form de execução da autenticação
<?php
include ("../class/AutLogin.php");
include ("../class/Conexao.php");
$username = $_POST["loginUsername"];
$password = $_POST["loginPassword"];
$usuario = new AutLogin($username,$password);
if ($usuario->autentica()) {
header("location:principal.php");
}
else {
header("location:login.php");
}
?>Usando um dos exemplos que achei modifiquei o seguinte arquivo para o login:
<html> <head> <title>Autenticação</title> <link rel="stylesheet" type="text/css" href="lib/ext3.2.1/resources/css/ext-all.css" /> <link rel="stylesheet" type="text/css" href="lib/ext3.2.1/examples/shared/icons/silk.css"/> <link rel="stylesheet" type="text/css" href="lib/ext3.2.1/examples/shared/examples.css"/> <link rel="stylesheet" type="text/css" href="lib/ext3.2.1/examples/ux/flashmessage/Ext.ux.MessageBox.flash.css"> <!-- LIBS --> <script type="text/javascript" src="lib/ext3.2.1/adapter/ext/ext-base.js"></script> <script type="text/javascript" src="lib/ext3.2.1/ext-all.js"></script> <script type="text/javascript" src="js/JanelaLogin.js"></script> <!-- ENDLIBS --> </head> <body> <div id="xxx"></div> </body> </html>(aqui o arquivo no ar http://www.l2jbrasil...teste/login.php)
E o JS que constrói a tela de login:
Ext.onReady(function()
{
Ext.QuickTips.init();
var login = new Ext.FormPanel(
{
labelWidth:80,
url:'include/LoginAction.php',
frame:true,
title : 'Autenticação',
defaultType:'textfield',
monitorValid:true,
iconCls : 'icone-cadeado',
items:[{
fieldLabel:'Usuário',
name:'loginUsername',
allowBlank:false,
blankText: 'Preencha este campo'
},{
fieldLabel:'Senha',
name:'loginPassword',
inputType:'password',
allowBlank:false
}],buttons:[{
text:'Login',
formBind: true,
iconCls : 'icone-porta-entrando',
// Aciona quando clica no botao
handler:function(){
login.getForm().submit({
method:'POST',
waitTitle:'Conectando',
waitMsg:'Enviando dados...',
success:function(){
Ext.Msg.alert('Status', 'Logado com Sucesso!', function(btn, text){
if (btn == 'ok'){
var redirect = 'principal.php';
window.location = redirect;
}
});
},
// Failure function, see comment above re: success and failure.
// You can see here, if login fails, it throws a messagebox
// at the user telling him / her as much.
failure:function(form, action){
if(action.failureType == 'server'){
obj = Ext.util.JSON.decode(action.response.responseText);
Ext.Msg.alert('Login Failed!', obj.errors.reason);
}else{
Ext.Msg.alert('Atenção!', 'Servidor de autenticação está inacessível : ' + action.response.responseText);
}
login.getForm().reset();
}
});
}
}]
});
// This just creates a window to wrap the login form.
// The login object is passed to the items collection.
var win = new Ext.Window({
layout:'fit',
width:300,
height:180,
closable: true,
resizable: false,
plain: true,
border: false,
items: [login]
});
win.show();
});
Então quando insiro os dados de login e senha fica toda vida tentando logar-se mas não loga.. então adicionei o login e senha por $_GET para testar o php:
http://www.l2jbrasil...=usu1&pass=usu1
Exibe-se então o seguinte erro:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/l2jbrasil/www/leonan/projfinal/teste/class/AutLogin.php on line 34
Warning: Cannot modify header information - headers already sent by (output started at /home/l2jbrasil/www/leonan/projfinal/teste/class/AutLogin.php:32) in /home/l2jbrasil/www/leonan/projfinal/teste/include/LoginAction.php on line 17
A SQL está correta e executa.
SELECT * FROM `usuarios` WHERE `usu_login` = 'usu1' AND `usu_senha` = 'usu1'
Aqui tá a classe de conexão(que funciona para as outras aplicações normalmente.
<?php
/**
* Classe para tabalhar com banco de dados
*/
class Conexao {
private $con; # objeto de conexão
public function __construct() {
# efetua conexão com servidor
$this->con = mysql_connect('localhost', 'root', '');
if (!$this->con) {
die('N�o foi poss�vel conectar-se com o servidor: ' . mysql_error());
}
# seleciona banco de dados
if (!mysql_select_db('TST_PEDIDOS', $this->con)) {
die ('N�o foi poss�vel selecionar o banco de dados: ' . mysql_error());
}
}
/**
* Fecha conexão
* @return void
*/
public function fecha() {
# fecha conexão
mysql_close($this->con);
}
/**
* Executa uma query no banco
* @param $sql (query a ser executada)
* @return true|false|array
*/
public function execute($sql) {
$sql = trim($sql);
$retorno = false;
# executa a query
$result = mysql_query($sql);
//print_r($sql);
# no caso de select, os dados são colocados em um array
if (is_bool($result))
$retorno = $result;
else {
while ($row = mysql_fetch_array($result)) {
# codifica resultado para utf8
array_walk($row, 'toUtf8');
$retorno[] = $row;
}
}
return $retorno;
} # execute
} # fim da classe
?>Desculpem-me esse ar de desespero, mas só quem já passou pelo TCC sabe do que estou falando.. rsrs
Grato desde já.
Forte Abraço
Edição feita por: Grundor, 24/03/2011, 23:09.










