E.Martins 0 Denunciar post Postado Maio 31, 2015 Boa noite, estou com problemas em um código PHP para fazer login comparando com o banco mysql, já tentei diversas formulas já procurei em varios foruns mais nada se enquadra a minha necessidade foi quando pensei em peguntar no Imasters para ver se alguem mim da uma luz. Ai vai o código: if (!empty($_POST) AND (empty($_POST['email']) OR empty($_POST['senha']))) { echo "Email e Senha são obrigatorios.";exit; } include =('connect.php'); $email = mysql_real_escape_string($_POST['email']); $senha = mysql_real_escape_string($_POST['senha']); $sql = "SELECT `id`, `nome`, `nivel` FROM `user_db` WHERE (`email` = '".$email."') AND (`senha` = '".sha1($senha)."') AND (`ativo` = 1) LIMIT 1"; $query = mysql_query($sql); if (mysql_num_rows($query) != 1) { echo "Usuario não encontrado!";exit; }else { // Salva os dados encontados na variável $resultado $resultado = mysql_fetch_assoc($query); // Se a sessão não existir, inicia uma if (!isset($_SESSION)) session_start(); // Salva os dados encontrados na sessão $_SESSION['UsuarioID'] = $resultado['id']; $_SESSION['UsuarioNome'] = $resultado['nome']; $_SESSION['UsuarioNivel'] = $resultado['nivel']; header("Refresh: 5; URL= ./index.php"); exit; } Espero que alguem que conheça melhor PHP , sou iniciante e desconeço algumas coisas. Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Maio 31, 2015 não existe sinal de igual depois do include. E nem precisa dos parênteses. Faça assim: include 'connect.php'; Explique exatamente qual é o problema com seu script. Se aparece mensagem de erro, cole-a aqui. Habilite todas as exibições de erro como mostrado neste tópico PS: funções mysql_* estão obsoletas desde o PHP 5.5. Prefira usar MySQLi ou PDO. Veja mais aqui: http://www.ultimatephp.com.br/php-por-que-nao-utilizar-funcoes-mysql Compartilhar este post Link para o post Compartilhar em outros sites
E.Martins 0 Denunciar post Postado Maio 31, 2015 Bem o que acontece é que não estou conseguindo puxar esse select bo banco mysql. $sql = "SELECT `id`, `nome`, `nivel` FROM `user_db` WHERE (`email` = '".$email."') AND (`senha` = '".sha1($senha)."') AND (`ativo` = 1) LIMIT 1"; Não esta retornando valores nessa select, já tentei varias formas mais mesmo assim não retorna, esse código é para um login, e a session só é criada se for capturado "id, nome, nivel", mais sempre retorna vazio o select. Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Junho 1, 2015 tente usar mysql_error(), como mostrado no link que mandei no post anterior também dê um echo/var_dump em $sql, para ver a consulta. Copie-a e execute-a diretamente no mysql. Veja se os resultados são retornados Compartilhar este post Link para o post Compartilhar em outros sites
E.Martins 0 Denunciar post Postado Junho 2, 2015 Fiz a conversão do mysql para mysqli e obtive esses erros: Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in F:\ServidoWeb\root\novo_login\login.php on line 1 //PHP include './connect/db_connect.php'; if (!empty($_POST) AND (empty($_POST['email']) OR empty($_POST['senha']))) { mysqli_error(); } // Create connection $connect = new mysqli($servername, $username, $password, $dbname) or die(mysqli_error()); $email = mysqli_real_escape_string($connect, $_POST['email']); $senha = mysqli_real_escape_string($connect, $_POST['senha']); $sql = mysqli_query($connect, "SELECT id, nome, nivel FROM user_db WHERE `email` = '$email', senha = '". sha1($senha) ."', ativo = 1 LIMIT 1"); if(mysqli_num_rows($sql) != 1){ echo "Usuario não cadastrado!"; exit; }else { // Salva os dados encontados na variável $resultado $resultado = mysqli_fetch_assoc($sql); // Se a sessão não existir, inicia uma if (!isset($_SESSION)) session_start(); // Salva os dados encontrados na sessão $_SESSION['UsuarioID'] = $resultado['id']; $_SESSION['UsuarioNome'] = $resultado['nome']; $_SESSION['UsuarioNivel'] = $resultado['nivel']; header("Refresh: 5; URL= ./panel"); exit; } veja se você entende, por que sou novo em php e fico sem entender. Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Junho 2, 2015 É o mesmo problema que descrevo aqui: http://rberaldo.com.br/as-mensagens-de-erros-mais-comuns-do-php/#mysql_result_resource Apenas use as funções mysqli_* em vez de mysql_* Provavelmente mysqli_query falhou e retornou false. Use mysqli_error() para verificar o erro retornado pelo MySQL Compartilhar este post Link para o post Compartilhar em outros sites
E.Martins 0 Denunciar post Postado Junho 2, 2015 Olha esse erro: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' senha = '2a8621c415c136111b4620a98d61cc6c3c4ae787', ativo = 1 LIMIT 1' at line 1 Deu pra intender que é um erro de sintaxe. Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Junho 2, 2015 as condições do WHERE devem ser separadas por AND ou OR, não por vírgulas Compartilhar este post Link para o post Compartilhar em outros sites
E.Martins 0 Denunciar post Postado Junho 3, 2015 o que já substitui, agora aparaceu outro erro. Notice: Undefined index: email in F:\ServidoWeb\root\novo_login\login.php on line 11 Notice: Undefined index: senha in F:\ServidoWeb\root\novo_login\login.php on line 12 pelo que entendi ta indefinido email e senha. include './connect/db_connect.php'; if (!empty($_POST) AND (empty($_POST['email']) OR empty($_POST['senha']))) { mysqli_error(); } // Create connection $connect = new mysqli($servername, $username, $password, $dbname) or die(mysqli_error()); $email = mysqli_real_escape_string($connect, $_POST['email']); $senha = mysqli_real_escape_string($connect, $_POST['senha']); $sql = "SELECT id, nome, nivel FROM user_db WHERE email = '". $email ."' AND senha = '". sha1($senha) ."' AND ativo = 1 LIMIT 1"; $query = mysqli_query($connect, $sql) or exit( mysqli_error()); if(mysqli_num_rows($query) != 1){ echo "Usuario não cadastrado!"; exit; }else { // Salva os dados encontados na variável $resultado $resultado = mysqli_fetch_assoc($query); // Se a sessão não existir, inicia uma if (!isset($_SESSION)) session_start(); // Salva os dados encontrados na sessão $_SESSION['UsuarioID'] = $resultado['id']; $_SESSION['UsuarioNome'] = $resultado['nome']; $_SESSION['UsuarioNivel'] = $resultado['nivel']; header("Refresh: 5; URL= ./panel"); exit; } Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Junho 3, 2015 Basta usar isset. Veja: http://rberaldo.com.br/as-mensagens-de-erros-mais-comuns-do-php/#undef_index Compartilhar este post Link para o post Compartilhar em outros sites
E.Martins 0 Denunciar post Postado Junho 10, 2015 Deixe falar como resolvi, na realidade o problema não estava no codigo e sim na criação do banco de dados, só alterei banco deixando o email como id "UNIQUE KEY". Passei só para deixar a solução para laguém que tenha o mesmo problema. Compartilhar este post Link para o post Compartilhar em outros sites