Ir ao conteúdo
  • Cadastre-se

Dúvida com WHERE em PHP


Urubu_Nicolas

Posts recomendados

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

?>

Link para o comentário
Compartilhar em outros sites

  • Moderador

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

Link para o comentário
Compartilhar em outros sites

  • Moderador



<?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

Link para o comentário
Compartilhar em outros sites

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??

Link para o comentário
Compartilhar em outros sites

  • Moderador


<?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: [email protected]"

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

Link para o comentário
Compartilhar em outros sites

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...