manoaj 12 Denunciar post Postado Março 7, 2013 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
Alaerte Gabriel 662 Denunciar post Postado Março 7, 2013 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
Ricardo Saraiva 84 Denunciar post Postado Março 7, 2013 Só acresentando o que Alaerte Gabriel disse. Tambem poderia ser feito com ajax. Compartilhar este post Link para o post Compartilhar em outros sites
manoaj 12 Denunciar post Postado Março 7, 2013 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
Ricardo Saraiva 84 Denunciar post Postado Março 7, 2013 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
manoaj 12 Denunciar post Postado Março 7, 2013 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
Alaerte Gabriel 662 Denunciar post Postado Março 8, 2013 Exato, pode seguir as Dicas do HINOM, pois é a forma correta de verificar se uma sessão já fora iniciada. Compartilhar este post Link para o post Compartilhar em outros sites
manoaj 12 Denunciar post Postado Março 8, 2013 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
angelorubin 142 Denunciar post Postado Março 8, 2013 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
Alaerte Gabriel 662 Denunciar post Postado Março 8, 2013 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
manoaj 12 Denunciar post Postado Março 12, 2013 como assim antes de qualquer saída HTML... Compartilhar este post Link para o post Compartilhar em outros sites
Alaerte Gabriel 662 Denunciar post Postado Março 12, 2013 Você não pode declarar o header depois de saídas HTML, ou seja, não pode utilizar o html antes da função header. Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Março 12, 2013 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
hinom 5 Denunciar post Postado Março 13, 2013 Dicas para uso de variáveis de sessão Compartilhar este post Link para o post Compartilhar em outros sites