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.