Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Casas Junior

Conexão cai no 1º Acesso mas faz login no 2º

Recommended Posts

Boa tarde galera

 

A muito tempo tenho problema com meu sistema de login, acabei deixando de lado, mas como não é somente eu quem vai utilizar, acabou que tenho que achar o problema de uma vez, mas anda bem difícil..

 

Sempre quando faço o login pela 1ª vez no dia.. ele acessa avisa, que a conexão foi feita com sucesso, mas retorna para a tela de login.php novamente, entretanto, se eu digitar corretamente e novamente o usuário e senha (2ª vez), ele informa que deu sucesso e enfim passa para a área administrativa.. Se eu der logout e acessar novamente, vai embora, o problema é o 1º acesso no dia.

 

login.php

<form name="loginform" method="post" action="userauthentication.php">
		            <input name="usuario" type="text" placeholder="usuario" size="25" maxlength="50"/><br /><br /><input name="senha" type="password" placeholder="Senha"/><br /><br />
<input type="submit" value="Entrar" />

</form>

userauthentication.php

<?php
$host = "REMOVIDO";
$user = "REMOVIDO";
$pass = "REMOVIDO";
$banco = "REMOVIDO";
$conn = mysqli_connect($host, $user, $pass, $banco);
    
    if(!$conn){
        die("Falha na conexao: " . mysqli_connect_error());
    }
?>
<html>
<head>
<title>testeeeeeeee</title>
<script type="text/javascript">
function loginsuccessfully() {
	setTimeout("window.location='admarea.php?usuario=<?php echo $_POST['usuario'] ?>'", 1000);
}

function loginfailed() {
setTimeout("window.location='login.php'", 1000);	
}
</script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<?php
	$usuario=$_POST['usuario'];
	$senha=$_POST['senha'];
$sql = mysqli_query($conn, "SELECT * FROM masterdata WHERE usuario = '$usuario' and senha = '$senha'") or die (mysqli_error());
$row = mysqli_fetch_assoc($sql);
	if($row > 0) {
session_start();
	$_SESSION[ 'usuario' ] = $row[ 'usuario' ]; //armazenando usuario


	$_SESSION[ 'dados_user' ] = $row; //armazenando tudo em forma de array associativo


	echo "<center>Autenticação OK! Você será redirecionado, Aguarde!</center>";
	echo "<script>loginsuccessfully()</script>";
} else {
	echo "<center>Senha ou Usuário invalidos</center>";
	echo "<script>loginfailed()</script>";
}
?>
</body>
</html>

admarea.php

<?php include("classe/conexao.php");

$consulta = "SELECT * FROM usuarios";
$con = $mysqli->query($consulta) or die($mysqli->error);

$usuario=$_GET['usuario'];
?>
<?php
session_start();
if((!isset ($_SESSION['usuario']) == true) and (!isset ($_SESSION['senha']) == true)){
	unset($_SESSION['usuario']);
	unset($_SESSION['senha']);
	header('location:login.php');
}
?>
<!DOCTYPE html>
<html>
<head>
<title>teste</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
Teste
</body>
</html>

 

Será que ha alguma anomalia nesse meu código, que está causando isso?

Isso ocorre para qualquer navegador.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Comece alterando a posição do session_start() ele deve estar sempre antes da liberação do buffer, dito de outra forma, antes que você enviei qualquer coisa para o navegador, para simplificar, coloque no topo do código sempre.

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 horas atrás, ESerra disse:

Comece alterando a posição do session_start() ele deve estar sempre antes da liberação do buffer, dito de outra forma, antes que você enviei qualquer coisa para o navegador, para simplificar, coloque no topo do código sempre.

 

Obrigado ESerra pela dica, adaptei conforme orientação.

 

Entretanto ainda fica a dúvida, por que será que ainda só conecta depois da 2º tentativa de login?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem algo estranho no seu código. De acordo com o código que você colocou acima, você não criou uma sessão para a senha  no arquivo userauthentication.php, assim por exemplo:

$_SESSION['senha'] = $row[ 'senha' ];

 

E no  admarea.php você chama a sessão senha, que não criou, na autenticação:

if((!isset ($_SESSION['usuario']) == true) and (!isset ($_SESSION['senha']) == true)){

Esse if tem muitos parenteses , você pode colocar assim:

if (!isset($_SESSION["usuario"]) and !isset($_SESSION["senha"])) {

Não precisa colocar true nem parenteses em volta do isset. Não sei se vai resolver o seu problema, mas parece que fora isso e a questão da segurança, está tudo certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nesses casos nada melhor do que o "//" e o "echo"...

 

Se você faz a autenticação e esta voltando para a página de login você simplesmente tem que

ver qual chamada esta fazendo este retorno e assim ter mais clareza de onde esta o problema.

 

São 2 as chamadas para a pagina login.php, aqui:

On 6/29/2018 at 2:53 PM, Casas Junior said:

setTimeout("window.location='login.php'", 1000);

e aqui:

On 6/29/2018 at 2:53 PM, Casas Junior said:

header('location:login.php');

 

Comenta uma delas, reinicia o pc e faz o teste, se continuar com o problema, descomente

a anterior e comente a proxima, ai voce tem uma noção de qual pagina esta o problema e

fica mais facil de resolver. Depois de achar qual página (userauthentication.php ou

admarea.php) esta dando problema, vá comentando e dando echo nas linhas...

 

Eu particularmente nao gosto de usar javascript para redirecionamentos assim,

tirando ela ficaria muito mais facil para trabalhar... use o header(); e ao inves de recuperar

a variável usuário via POST, recupere ela da session().

 

<?php
	$usuario=$_POST['usuario'];
	$senha=$_POST['senha'];

	if(!isset($usuario) or !isset($senha)){
		// Se nao forem passados usuário e senha
		// Nem tente conexão, já redireciona para o login
		header('location:login.php');
	}

	// Se ja exite o arquivo de conexão você nao
	// precisa criar denovo, facilita a manutenção
	require_once("classe/conexao.php");

	$sql = mysqli_query($conn, "SELECT * FROM masterdata WHERE usuario = '$usuario' and senha = '$senha'") or die (mysqli_error());
	$row = mysqli_fetch_assoc($sql);
	if($row > 0) {
		session_start();
		$_SESSION[ 'usuario' ] = $row[ 'usuario' ]; //armazenando usuario
		$_SESSION[ 'dados_user' ] = $row; //armazenando tudo em forma de array associativo
		header('location:admarea.php');
	}else{
		header('location:login.php');
	}
?>

Caramba, depois de escrever isso tudo vi que você passa o parametro usuario como POST no

javascript e na hora de receber no adm area você recebe via GET, nem sei como ta funcionando rsrsrs...

De qualquer forma vai um palpite no admarea.php também:

 

<?php

session_start();

$usuario = $_SESSION['usuario'];

if(isset($usuario)){
	header('location:login.php');
}

require_once("classe/conexao.php");

$consulta = "SELECT * FROM usuarios";

$con = $mysqli->query($consulta) or die($mysqli->error);


?>
<!DOCTYPE html>
<html>
<head>
<title>teste</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
Teste
</body>
</html>

 

Escrevi mais ou menos so para dar uma noção mas nao testei, tem mais algumas coisas a serem

feitas para melhorar o codigo como receber as variáveis de forma terciária, diminuir os colchetes

e etc, mas isso é mais estética, o que realmente me parece bem preoculpante é a falta de tratamento

nas entradas dos dados, antes de fazer a consulta e a forma que a senha esta sendo armazenada (texto puro)...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quero agradecer ao ESerra, luiz14 MichellHenrique pelo apoio em tentar solucionar o problema.

 

MichellHenrique, fiquei alguns dias para responder as suas orientações, porque também não estava dando certo e eu fiz vários testes diferentes, nesse seu formato e também não resolvia.

 

Hoje 4:40h da manhã, me levantei da cama, tive uma ideia e deu certo, acho que eu sonhei com isso.. pq eu já não tava mais encontrando a resposta pra esse problema "bizarro".

 

Como não dava mensagem nenhuma, eu nunca iria descobrir que o problema era cookie, mas me veio do nada esse arquivo na minha cabeça, que eu já tinha usado outra vez, pra resolver problema de cookie:

 

php.ini

output_buffering = on

 

E resolveu o problema!! 

Bizarro!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia 

 

A primeira coisa que eu iria lhe sugerir é criar uma classe para conexão ao BD para você não ter que toda vez abrir uma conexão manualmente.

 

A segunda coisa seria separar o PHP do HTML. Temos varias maneiras de fazer isso, usando TPL, JavaScript e etc. 

 

Outra coisa seria você criar uma classe usuário e criar um método verificar login (exemplo) para verificar o login e senha do usuário. 

 

Caso a senha digitada no campo senha seja = a senha do BD você redireciona o usuário para tela de adm. 

 

Segue um exemplo das classes que eu uso: 

 

 

Classe para conexão: 

 

<?php

namespace Livro\Database;

use PDO;
use Exception;

/**
 * Cria conexões com bancos de dados

 */
final class Connection{
    /**
     * Não podem existir instâncias de TConnection
     */
    private function __construct() {}

    /**
     * Recebe o nome do conector de BD e instancia o objeto PDO
     */
    public static function open($name)
    {
        // verifica se existe arquivo de configuração para este banco de dados
        if (file_exists("App/Config/{$name}.ini"))
        {
            // lê o INI e retorna um array
            $db = parse_ini_file("App/Config/{$name}.ini");
        }
        else
        {
            // se não existir, lança um erro
            throw new Exception("Arquivo '$name' não encontrado");
        }

        // lê as informações contidas no arquivo
        $user = isset($db['user']) ? $db['user'] : NULL;
        $pass = isset($db['pass']) ? $db['pass'] : NULL;
        $name = isset($db['name']) ? $db['name'] : NULL;
        $host = isset($db['host']) ? $db['host'] : NULL;
        $type = isset($db['type']) ? $db['type'] : NULL;
        $port = isset($db['port']) ? $db['port'] : NULL;

        // descobre qual o tipo (driver) de banco de dados a ser utilizado
        switch ($type)
        {
            case 'pgsql':
                $port = $port ? $port : '5432';
                $conn = new PDO("pgsql:dbname={$name}; user={$user}; password={$pass};
                        host=$host;port={$port}");
                break;
            case 'mysql':
                $port = $port ? $port : '3306';
                //$conn = new PDO("mysql:host={$host};port={$port};dbname={$name}", $user, $pass);
                //echo "teste";
                $conn = new PDO("mysql:host=$host;dbname=$name;charset=utf8",$user,$pass);
                break;
            case 'sqlite':
                $conn = new PDO("sqlite:{$name}");
                break;
            case 'ibase':
                $conn = new PDO("firebird:dbname={$name}", $user, $pass);
                break;
            case 'oci8':
                $conn = new PDO("oci:dbname={$name}", $user, $pass);
                break;
            case 'mssql':
                $conn = new PDO("mssql:host={$host},1433;dbname={$name}", $user, $pass);
                break;
        }
        // define para que o PDO lance exceções na ocorrência de erros
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        return $conn;
    }
}

 

 

 

Arquivo para informar qual banco de dados quero usar: 

<?php

  /*host = localhost
  name = estoque//App/Database/livro.db
  user = root
  pass = ''
  type = mysql*/

  host = 127.0.0.1
  name = estoque
  user = root
  pass = ''
  type = mysql


?>
 

Se eu quiser usar outro banco de dados do trocar essa configuração. 

 

 

 

 

classes para fazer busca no banco de dados de maneira orientada a objeto. As três classes são necessárias:

 

<?php
namespace Livro\Database;

/**
 * Classe abstrata para permitir definição de expressões

 */
abstract class Expression
{
    // operadores lógicos
    const AND_OPERATOR = 'AND ';
    const OR_OPERATOR = 'OR ';

    // marca método dump como obrigatório
    abstract public function dump();
}

 

<?php
namespace Livro\Database;
require 'Filter.php';
/**
 * Permite definição de critérios

 */
class Criteria extends Expression
{
    private $expressions; // armazena a lista de expressões
    private $operators;     // armazena a lista de operadores
    private $properties;    // propriedades do critério

    /**
     * Método Construtor
     */
    function __construct()
    {
        $this->expressions = array();
        $this->operators = array();
    }

    /**
     * Adiciona uma expressão ao critério
     * @param $expression = expressão (objeto Expression)
     * @param $operator   = operador lógico de comparação
     */
    public function add(Expression $expression, $operator = self::AND_OPERATOR)
    {
        // na primeira vez, não precisamos de operador lógico para concatenar
        if (empty($this->expressions))
        {
            $operator = NULL;
        }

        // agrega o resultado da expressão à lista de expressões
        $this->expressions[] = $expression;
        $this->operators[]    = $operator;
    }

    /**
     * Retorna a expressão final
     */
    public function dump()
    {
        // concatena a lista de expressões
        if (is_array($this->expressions))
        {
            if (count($this->expressions) > 0)
            {
                $result = '';
                foreach ($this->expressions as $i=> $expression)
                {
                    $operator = $this->operators[$i];
                    // concatena o operador com a respectiva expressão
                    $result .= $operator. $expression->dump() . ' ';
                }
                $result = trim($result);
                return "({$result})";
            }
        }
    }

    /**
     * Define o valor de uma propriedade
     * @param $property = propriedade
     * @param $value    = valor
     */
    public function setProperty($property, $value)
    {
        if (isset($value))
        {
            $this->properties[$property] = $value;
        }
        else
        {
            $this->properties[$property] = NULL;
        }
    }

    /**
     * Retorna o valor de uma propriedade
     * @param $property = propriedade
     */
    public function getProperty($property)
    {
        if (isset($this->properties[$property]))
        {
            return $this->properties[$property];
        }
    }
}

 

<?php

namespace Livro\Database;

/**
 * Permite definir filtros de seleção

 */
class Filter extends Expression
{
    private $variable; // variável
    private $operator; // operador
    private $value;    // valor

    /**
     * Instancia um novo filtro
     * @param $variable = variável
     * @param $operator = operador (>,<)
     * @param $value      = valor a ser comparado
     */
    public function __construct($variable, $operator, $value)
    {
        // armazena as propriedades
        $this->variable = $variable;
        $this->operator = $operator;

        // transforma o valor de acordo com certas regras
        // antes de atribuir à propriedade $this->value
        $this->value     = $this->transform($value);
    }

    /**
     * Recebe um valor e faz as modificações necessárias
     *   para ele ser interpretado pelo banco de dados
     * @param $value = valor a ser transformado
     */
    private function transform($value)
    {
        // caso seja um array
        if (is_array($value))
        {
            // percorre os valores
            foreach ($value as $x)
            {
                // se for um inteiro
                if (is_integer($x))
                {
                    $foo[]= $x;
                }
                else if (is_string($x))
                {
                    // se for string, adiciona aspas
                    $foo[]= "'$x'";
                }
            }
            // converte o array em string separada por ","
            $result = '(' . implode(',', $foo) . ')';
        }
        // caso seja uma string
        else if (is_string($value))
        {
            // adiciona aspas
            $result = "'$value'";
        }
        // caso seja valor nullo
        else if (is_null($value))
        {
            // armazena NULL
            $result = 'NULL';
        }

        // caso seja booleano
        else if (is_bool($value))
        {
            // armazena TRUE ou FALSE
            $result = $value ? 'TRUE' : 'FALSE';
        }
        else
        {
            $result = $value;
        }
        // retorna o valor
        return $result;
    }

    /**
     * Retorna o filtro em forma de expressão
     */
    public function dump()
    {
        // concatena a expressão
        return "{$this->variable} {$this->operator} {$this->value}";
    }
}
 

 

 

 

Exemplo de uso: 

 

 

<?php

  /*
    A diferença entre a Active Record e Row Data table é que active record possui meotodo de nogocio e RDG não
   */
  class Produto{

    private static $con;
    private $data;

    function __get($prop){
      return $this->data[$prop];
    }


    function __set($prop, $value){
      $this->data[$prop] = $value;
    }


    public static function setConnection(PDO $con){
      self::$con = $con;
    }

    public function find($id){

      $sql = "SELECT * FROM produto WHERE id = '$id'";

      print $sql."<BR />";
      $result = self::$con->query($sql);
      return $result->fetchObject(__CLASS__);
    }


    public function all($filter = ''){

      $sql = "SELECT *  FROM produto ";
      if ($filter) {
        $sql.="WHERE $filter";
      }

      print $sql."<br />";
      $result = self::$con->query($sql);
      return $result->fetchAll(PDO::FETCH_CLASS, __CLASS__);
    }

    public function delete(){

      $sql = "DELETE FROM produto WHERE id = '{$this->id}'";
      print $sql."<br />";
      return self::$con->query($sql);
    }

    public function save(){

      if (empty($this->data['id'])) {

        $id = $this->getLastId() + 1;
        $sql= "insert into produto (id,descricao,estoque, preco_custo,preco_venda,codigo_barras,data_cadastro,origem) ".
        "values ('{$id}',".
        "'{$this->descricao}',".
        "'{$this->estoque}',".
        "'{$this->preco_custo}',".
        "'{$this->preco_venda}',".
        "'{$this->codigo_barras}',".
        "'{$this->data_cadastro}',".
        "'{$this->origem}')";

      }else{
        $sql= "update produto set ".
        "descricao      = '{$this->descricao}',".
        "estoque        = '{$this->estoque}',".
        "preco_custo    = '{$this->preco_custo}',".
        "preco_venda    = '{$this->preco_venda}',".
        "codigo_barras  = '{$this->codigo_barras}',".
        "data_cadastro  = '{$this->data_cadastro}',".
        "origem         = '{$this->origem}'".
        "where id       = '{$this->id}'";
      }

      print "$sql <br>";

      return self::$con->exec($sql);

    }

    public function getLastId(){
      $sql = "select max(id) as max from produto";
      $result = self::$con->query($sql);
      $data = $result->fetch(PDO::FETCH_OBJ);
      return $data->max;
    }

    public function getMargemLucro(){

      return (($this->prec_venda - $this->preco_custo) / $this->preco_custo) * 100;
    }

    public function registraCompra($custo,$quantidade){
      $this->custo = $custo;
      $this->estoque += $quantidade;
    }


  }

 ?>
 

 

 

 

 

Então como eu disse. Depois de feito, só chamar o método de onde precisar que você terá os dados em mãos. 

 

 

 

 

Espero poder ter dado uma visão do quanto orientação a objeto pode ajudar no seu caso. 

 

 

 

 

 

 

 

  

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na realidade output_buffering "resolver" o problema apenas indica que existe alguma coisa sendo enviada para o navegador antes do session_start()... 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tirar um tempo, analizar e resolver os erros é essencial, principalmente os problemas de segurança,

senha em texto puro no bd (salve usando hash e salt), prevenção contra inject e etc...


Como havia mencionado anteriormente nao testei o código e para variar ao passar os olhos no codigo

esses dias para tras por desencargo de consiência encontrei um erro e atualizei, mas ainda assim não

cheguei a testar na prática. Vale a pena dar uma estudada e dar uma melhorada no seu código. Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, plural, ativo. Nela tem cadastrado vários itens e seu respectivo plural. No campo ativo eu coloco a letra "S" para informar que esta palavra está ativa no sistema. Por exemplo: 1, casa, casas, S 2, mesa, mesas, S 3, cama, camas, S 4, moto, motos, S 5, rádio, rádios O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "variações" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, camas, moto 2, mesas, casas, radio 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela variações da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "variações" que contenham a palavra "casa". Porém se tiver algum registro com a palavra "casas" também tem que ser listado. Neste caso ele irá encontrar dois registros. Agora eu preciso que o php verifique os demais itens e faça a listagem apenas dos item que estão ativos (que contenham um "S" no campo ativo. Neste caso ele irá encontrar apenas um registro, pois o segundo registro contém a palavra "rádio". E "rádio" não está ativo na tabela itens. Como faço isso?
    • Por First
      Olá a todos!
       
      Quando eu tento fazer o login me mostra esse erro "Could not log you in."; Alguém sabe me ajudar a resolver esse problema no meu código?
      <?php require_once("core/init.php"); if (Input::exists()) { if (Token::check(Input::get("token"))) { $validate = new Validate(); $validation = $validate->check($_POST, array( "username" => array("required" => true), "password" => array("required" => true) )); if ($validation->passed()) { $user = new User(); $remember = (Input::get("remember")) === "on" ? true : false; $login = $user->login(Input::get("username"), Input::get("password"), $remember); if ($login) { Session::flash("home", "Welcome back!"); Redirect::to("index.php"); } else { echo "Could not log you in."; } } else { foreach ($validation->errors() as $error) { echo $error."<BR>"; } } } } ?> <form action="" method="POST"> <div class="field"> <label for="username">Username</label> <input type="text" name="username" id="username"> </div> <div class="field"> <label for="password">Password</label> <input type="password" name="password" id="password"> </div> <div class="field"> <label for="remember"> <input type="checkbox" name="remember" id="remember"> Remember me </label> </div> <input type="hidden" name="token" value="<?php echo Token::generate(); ?>"> <input type="submit" value="Log in"> </form>  
       
      Desde já obrigado.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.