Ir para conteúdo

POWERED BY:

Arquivado

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

manoaj

forma correta de validar formulario

Recommended Posts

pessoal to fazendo um sistema de login e queria saber qual a melhor forma ou a forma correta de se validar o formulario e os dados que o usuario digitou.

 

eu normalmente faço essa validação na mesma pagina logo abaixo do formulario .

mas qual a forma correta em paginas separadas e usando o action do form ou na mesma pagina.

 

e se for em paginas separadas como faço para exibir os erros como( a senha digitada é incorreta) na mesma pagina que o form esta?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tecnicamente falando não existe "a forma correta"... o que tem que ocorrer é a forma que o usuário "não deixa de preencher os campos".

 

Caso seja na página separada, você pode trabalhar com QUERY STRING, no seu condicional IF ao verificar os dados, caso esteja errado você usa a função header passando o parâmetro do erro via get... exemplo:

 

header('Location: pagina_do_fom.php?erro=senha');

E na página do form você verificar se existe a variável $_GET['erro'] e se o valor for senha você exibe o erro de senha incorreta, o mesmo ocorre para o login, ambos 1 a cada processo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

entendi e quanto a verificar se usuario esta logado tem algo errado seu fizer assim ou esta correto

 

 

<?php

// A sessão precisa ser iniciada em cada página diferente
if (!isset($_SESSION)){
     session_start();
}
// Verifica se não há a variável da sessão que identifica o usuário
if (!isset($_SESSION['UsuarioID'])) {
    // Destrói a sessão por segurança
    session_destroy();
    // Redireciona o visitante de volta pro login
    header("Location: index.php"); exit;
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

entendi e quanto a verificar se usuario esta logado tem algo errado seu fizer assim ou esta correto

 

 

<?php

// A sessão precisa ser iniciada em cada página diferente
if (!isset($_SESSION)){
     session_start();
}
// Verifica se não há a variável da sessão que identifica o usuário
if (!isset($_SESSION['UsuarioID'])) {
    // Destrói a sessão por segurança
    session_destroy();
    // Redireciona o visitante de volta pro login
    header("Location: index.php"); exit;
}

?>

 

 

Só não entendi o por que dessa parte do código.

 

if (!isset($_SESSION)){
     session_start();
}

coloca somente

 

 session_start();

Compartilhar este post


Link para o post
Compartilhar em outros sites

pq se já existir uma sessão vai dar erro tipo aqui tava dando kkk

 

 

#6

referente a isso:

 

 

 

 

if (!isset($_SESSION)){ session_start();}

 

a lógica está correta..

 

apenas aconselho a trocar por isso

 

 

        if( session_id() == '' )        {            session_start();        }

Compartilhar este post


Link para o post
Compartilhar em outros sites

blz só queria saber mais uma coisinha sobre o assunto logo dedpois que o codigo faz toda verificação e autenticação do usuario ´que efetuou o login eu tenho que mandar ele para pagina restrita e nessa pagina pegar os dados dele atravez da session . mas a duvida é qual a forma correta de redirecionar ele apos ele ter efetualo login tipo vejo muita gente falar pra não uusar o header('location')

qual a forma correta header location ou javascript para redirecionar o usuario para pagina restrita ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde,

 

Segundo o manual é correto utilizar header() para o redirecionamento.

 

Tomando alguns cuidados:

 

header() is used to send a raw HTTP header. See the » HTTP/1.1 specification for more information on HTTP headers.

Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include, or require, functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com javascipt, por exemplo você o risco de o usuário estar com o suporte ao JS desabilitado, travando assim o seu redirecionamento. Toda via, não é "incorreto" utilizar-se do JS para efetuar um redirecionamento, mais sim "arriscado".

 

o header é uma forma correta e nítida de se efetuar um redirecionamento. Com ele você faz o envio direto de cabeçalhos HTTP para o browser... Os cuidados que você deve ter é que esta função deve ser utilizada antes de qualquer saída HTML... só ficar esperto nisso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Saídas HTML são, por exemplo, [inline]echo[/inline]

 

Note que tudo que não estiver dentro dos blocos de [inline]<?php ?>[/inline] é uma saída textual.

 

Um caso comum onde você pode ter problemas é assim:

 

db_conn.php

<?php

$hostname = 'localhost';
$username = 'root';
$password = 'root';
$database = 'my_application';

$conn = new PDO("mysql:host={$hostname}", $username, $password);
$conn->exec("Use {$database};");

?>

Note que há uma quebra de linha depois do [inline]?>[/inline]. Esta quebra de linha é enviada para a saída padrão. Isso quer dizer que a sua resposta já tem um [ENTER].

 

Então, o seguinte script

 

index.php

 

<?php

include 'db_conn.php';

const OK = 0;
const METHOD_NOT_ALLOWED = 1;
const USER_NOT_FOUND = 2;
const INCORRECT_PASSWORD = 3;

function login(PDO $db, $onlyPost = true) {
    if ($onlyPost and $_SERVER['REQUEST_METHOD'] !== 'POST') {
        return METHOD_NOT_ALLOWED;
    }
    $query = "select id, name, password from user where email = ?";
    $stmt = $db->prepare($query);
    $stmt->execute(array(isset($_POST['email']) ? $_POST['email'] : ''));
    if (false === ($user = $stmt->fetchObject())) {
        return USER_NOT_FOUND;
    }
    $password = isset($_POST['senha']) ? $_POST['senha'] : '';
    if (crypt($password, $user->password) !== $user->password) {
        return INCORRECT_PASSWORD;
    }
    session_status() === PHP_SESSION_NONE and session_start();
    $_SESSION['user'] = $user;
    return OK;
}

function error_message() {
    $messages = array(
        METHOD_NOT_ALLOWED => 'Por favor, utilize o formulário de login.',
        USER_NOT_FOUND => 'Usuário inexistente.',
        INCORRECT_PASSWORD => 'Senha incorreta.'
    );
    $_SESSION['error_message'] = $messages[func_get_arg(1)];
    header('412 Precondition Failed', true);
    header('Location: error.php', true);
}

set_error_handler('error_message', E_USER_ERROR);

if (OK !== ($login_status = login($conn))) {
    trigger_error($login_status, E_USER_ERROR);
}

 

 

gerará um erro de headers_already_sent devido à quebra de linha no final do arquivo db_conn.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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