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.


 
	 
					 
			
			








