Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
Urubu_Nicolas

Dúvida com WHERE em PHP

Recommended Posts

Olá comunidade Clube do Hardware. Estou querendo fazer um login que pode ser informado o Usuário ou E-mail (em mesmo input) e a senha. Escrevi o seguinte código, porém ele até faz o login, porém se digitar o usuário e colocar uma senha falsa ele entra igual.

<?php

if(isset ($_POST['entrar']) == 'entrar'){

/* Pega Dados */
$login = sqlinj($_POST['login']);
$senha = md5(sqlinj($_POST['senha']));

$sql = mysql_query("SELECT fx_user, fx_email, fx_senha FROM fx_users WHERE fx_user = '$login' OR fx_email = '$login' AND fx_senha = '$senha'") or die (mysql_error());

if(mysql_num_rows ($sql) == true){

while($ln = mysql_fetch_array($sql)){
$_SESSION['login'] = $ln['fx_user'];
$_SESSION['senha'] = $ln['fx_senha'];

header("Location: $urlbase/painel/");

} // Fecha Loop

}else{ // Fecha Consulta

echo "<script>alert('Ops! Dados inválidos!');</script>";

} // Fecha mensagem de erro login false
} // Fecha Código de Login

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala nicolas, quer uma dica? nao mescle os dois.. use um ou outro... eu dou preferência ao usar o email.

pela razao que os usuarios nao esquecem seus emails.. mas um nome de usuario pode ser esquecido se nao usado por muito tempo.. por essa razao.. sempre em minhas aplicaçoes eu utilizo o email como login... facilitando a vida do usuario.. em ter que lembrar só da senha....

ja me aconteceu de eu me cadastrar com um nome de usuario.. e me esquecer depois.. mas todos os sites que eu logo com o meu email.. nunca esqueci!.. o google por exemplo loga com o email, o hotmail.. também loga usando o email.

abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Bom dif, valeu pela dica. Porém só por curiosidade como ficaria o código, como posso organizar??

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites



    <?php
    session_start();
    if(isset ($_POST['entrar']) == 'entrar'){

    /* Pega Dados */
    $login = sqlinj($_POST['login']);
    $senha = md5(sqlinj($_POST['senha']));

    $sql = mysql_query("SELECT fx_id_users ,fx_email, fx_senha FROM fx_users WHERE fx_email = '$login' AND fx_senha = '$senha'") or die (mysql_error());

    if(mysql_num_rows ($sql) == 0){
    echo "<script>alert('Ops! Dados inválidos!'); history.go(-1);</script>"; exit;

    }else{

    $ln = mysql_fetch_array($sql);
    $idUsuario = $ln["fx_id_users"]; //coloque dentro dos colchetes o campo auto increment da sua tabela que representa o ID

    $_SESSION['codUsuario'] = $idUsuario;
    $_SESSION['login'] = $login;

    header("Location: $urlbase/painel/");

    } // Fecha else
    } // Fecha IF do isset post entrar

    ?>

    tenta assim. é como sempre uso..primeiro declara o inicio da sessao la em cima.. você esqueceu. depois você compra no if se o numero de linhas for zero, ele apresenta a mensagem de erro.. senao, ele entra no bloco de else.

    nao é preciso fazer um while ali dentro do else como você tava fazendo. também nao se usa a senha ali. você precisa resgatar a id do usuario que esta logando e armazenar em uma variavel de sessao e armazenar em uma variavel de sessao o login do usuario. basicamente é isso..

    eu nao vi ali o arquivo de conexao com o banco.. ou você esqueceu de por.. ou nao colocou aqui no forum.

    abraço

    Editado por dif
    esquci de acrescentar o history.go(-1) e o exit; no bloco do if do erro.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Na verdade queria saber como ficaria o código com o login de usuário e email. Porém acho que me expressei mau. Porém foi de bastante ajuda, pois vi que tinha várias falhas no código, obrigado dif! A que mais me chamou atenção foi o porque eu usei um while, não é necessário :D:D.

    O session_start() eu havia colocado no inicio do documento é que na verdade isto apenas um fragmento do código! Mas a do while :D:D:D.

    Mas assim , como ficaria código com login de usuário, e-mail e senha??

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites


    <?php
    session_start();

    $login = addslashes($_POST["login"]);
    $senha = md5(addslashes($_POST["senha"]));

    if(empty($login) or empty($senha)){
    echo"<script>
    alert('Preencha os campos vazios');
    history.go(-1);
    </script>";
    exit;
    }

    include'conexao.php';

    $sql = "Select idUsuario, login, email, senha from usuario where [COLOR="Red"][B]((login ='$login') OR (email='$login'))[/B][/COLOR] AND senha='$senha'";
    $dados = mysql_query($sql);

    $registros = mysql_num_rows($dados);
    if($registros == 0){
    echo"<script>
    alert('Usuario inválido');
    history.go(-1);
    </script>";
    exit;
    }else{
    $linha = mysql_fetch_array($dados);
    $idUser = $linha["idUsuario"];
    $_SESSION["idUsuario"] = $idUser;
    $_SESSION["usuario"] = $login;

    header("Location: painel/index.php");
    }

    ?>

    bem.. eu fiz um exemplo aqui.. testado e funcionando. repare em vermelho e negrito.. as procedencias dos parenteses.. você tem que agrupar o login e email para usar a clausula OR e combinar com o AND da senha.

    nao ta exatamente igual ao teu.. mas este exemplo funciona. e fiz assim: quando você loga com o login e uma senha falsa.. ou email e uma senha falsa ele apresenta a mensagem usuario inválido .

    quando você loga com o login, eu fiz ele informar na pagina restrita a mensagem: "parabens você logou com: Admin"

    quando você loga com o email, eu diz ele informar na pagina restrita a mensagem: "parabens você logou com: admin@admin.com"

    para fazer isso eu fiz assim:

    painel/index.php


    <?php
    session_start();

    if(! isset($_SESSION["usuario"]))
    header("location: /index.html");
    else
    $login = $_SESSION["usuario"];


    echo "Parabens voce logou com: $login !";

    ?>


    é isso acho q com tudo isso você pode resolver seu problema!

    abraço

    Editado por dif

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário

    Entre para seguir isso  





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

    Direitos autorais

    Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

    ×