Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Formulário de Login


viper33

Pergunta

Tenho o seguinte form de login

<table width="50%" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#efefef" class="fundo">

<tr>

<th width="34%" scope="col">&nbsp;</th>

<th height="41" scope="col"><span class="fonte">CONTROLE DE ACESSO</span></th>

</tr>

<tr>

<th width="34%" scope="col"><img src="img/Cadeado.png" width="128" height="128" alt="cadeado" /></th>

<td align="center"><form action="confirma_login.php" method="post" name="form_login" target="" id="login">

<p>

<label><span class="fonte">Usuário</span>

<input type="text" name = "login" id="login" size="20" maxlength="20" />

</label>

</p>

<p>

<label><span class="fonte">Senha</span>

<input type="password" name = "senha" id="senha" size="20" maxlength="20" />

</label>

</p>

<p>

<label>

<input type="submit" name="Enviar" id="Enviar" value="Enviar" />

<input type="submit" name="Cancelar" id="Cancelar" value="Cancelar" />

</label>

</p>

</form></td>

</tr>

<tr>

<th scope="col">&nbsp;</th>

<td align="center"></td>

</tr>

</table>

E o form de confirmação de login abaixo:

<?php

$login = @$_POST['login'];

$senha = @$_POST['senha'];

include ("conexao.php");

$resultado= mysql_query ("SELECT * FROM tbusu WHERE login='$login'");

$linhas = mysql_num_rows ($resultado);

if ($linhas==0)

{

echo "<html><body>";

echo "<p align =\"center\">Esse usuário não existe!<p>";

echo "<p align =\"center\"><a href =\"login.php\">Voltar</a></p>";

echo "</body></html>";

}

else

{

if($senha != mysql_result($resultado,0,"senha"))

{

echo "<html><body>";

echo "<p align =\"center\">A senha está incorreta!<p>";

echo "<p align =\"center\"><a href =\"login.php\">Voltar</a></p>";

echo "</body></html>";

}

else

{

setcookie ("login",$login);

setcookie ("senha",$senha);

header ("location: index.php");

}

}

Mas sempre dá a mensagem que a senha está incorreta. Onde estou errando?

A senha existe no banco e estou digitando-a corretamente.

Grato.

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0
Dá um echo no mysql_result($resultado,0,"senha") para ver o que está vindo do banco...

Serra, eu fiz o que você falou mas deu a mesma mensagem e o echo no mysql não retornou nada.

Mas testei o sql da seguinte forma no banco e aparece o resultado: SELECT * FROM `tbusu` WHERE login = "malccsi";

Parece que o erro está no sql do form: "SELECT * FROM tbusu WHERE login='$login'"

Alguma outra sugestão?

Grato.

Link para o comentário
Compartilhar em outros sites

  • 0

Se o echo do mysql não retornou nada então está correto o if falhar...

Troque isso:

$resultado= mysql_query ("SELECT * FROM tbusu WHERE login='$login'");

$linhas = mysql_num_rows ($resultado);

Por isso:

$resultado= mysql_query ("SELECT * FROM tbusu WHERE login='$login'");

$linhas = mysql_num_rows ($resultado);

$dados = mysql_fetch_assoc($resultado);

print_r($dados);

exit;

Isso vai fazer com que tudo que está vindo na query seja exibido...

Link para o comentário
Compartilhar em outros sites

  • 0
Se o echo do mysql não retornou nada então está correto o if falhar...

Troque isso:

$resultado= mysql_query ("SELECT * FROM tbusu WHERE login='$login'");

$linhas = mysql_num_rows ($resultado);

Por isso:

$resultado= mysql_query ("SELECT * FROM tbusu WHERE login='$login'");

$linhas = mysql_num_rows ($resultado);

$dados = mysql_fetch_assoc($resultado);

print_r($dados);

exit;

Isso vai fazer com que tudo que está vindo na query seja exibido...

Coloquei o que me passou e continuou da mesma forma. Fiz um teste digitando um login que não existe no banco e retorna a mensagem de que esse usuário não existe. Ou seja, até essa parte deu certo.

Link para o comentário
Compartilhar em outros sites

  • 0

Antes da gente tentar arrumar tem que descobrir o problema, nada do que eu te passei até agora é pra resolver o problema e sim é pra encontrar onde está o erro, o print_r($dados); deve ter retornando um monte de coisas na tela, preciso disso pra saber o que está vindo do banco de dados...

Link para o comentário
Compartilhar em outros sites

  • 0
Antes da gente tentar arrumar tem que descobrir o problema, nada do que eu te passei até agora é pra resolver o problema e sim é pra encontrar onde está o erro, o print_r($dados); deve ter retornando um monte de coisas na tela, preciso disso pra saber o que está vindo do banco de dados...

Ok Serra. É que estou praticando o PHP porque preciso conhecer a linguagem. E você tem razão. Retornou isso aqui: Array ( [cdusu] => 1 [nmusu] => Wiliam Bonner [login] => malccsi [senha] => sistemas )

Quando coloco echo mysql_result($resultado,0,"senha"); aparece a senha que está no banco mas exibe a mensagem de senha incorreta!

Grato

Estou usando esse script para o banco:

CREATE TABLE `tbusu` (

`cdusu` int(11) NOT NULL auto_increment,

`nmusu` varchar(40) NOT NULL,

`login` varchar(20) NOT NULL,

`senha` varchar(20) NOT NULL,

PRIMARY KEY (`cdusu`),

UNIQUE KEY `login` (`login`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Link para o comentário
Compartilhar em outros sites

  • 0

Troca isso:

echo "<html><body>";

echo "<p align =\"center\">A senha está incorreta!<p>";

Por isso:

echo "<html><body>";

echo "Senha do formulário: |".$senha."|<br>Senha do banco: |".mysql_result($resultado,0,"senha")."|";

echo "<p align =\"center\">A senha está incorreta!<p>";

Link para o comentário
Compartilhar em outros sites

  • 0

Acho que consegui resolver:

Na minha conexão eu usava uma variável chamada $senha e uma variável $senha no form de verificação de login. Acho que a confusão estava aí. Troquei o name da senha do formulário de envio e funcionou.

Mas...no formulário de confirmação de login agora aparece o erro do cabeçalho que eu ainda não entendi como resolver:

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\SICC Serra\confirma_login.php:7) in C:\xampp\htdocs\SICC Serra\confirma_login.php on line 44

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\SICC Serra\confirma_login.php:7) in C:\xampp\htdocs\SICC Serra\confirma_login.php on line 45

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\SICC Serra\confirma_login.php:7) in C:\xampp\htdocs\SICC Serra\confirma_login.php on line 46

Essas linhas são:

setcookie ("login",$login);

setcookie ("password",$password);

header ("location: index.php");

Editado por viper33
Link para o comentário
Compartilhar em outros sites

  • 0

Finalmente resolvido:

O problema estava nesse cabeçalho do formulário de confirmação de login:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Untitled Document</title>

Depois que retirei esse código finalmente funcionou. Como eu estava trabalhando com 3 forms não conseguia entender direito o tal cabeçalho: quando definia header("location:./index.php"); eu pensava que a mensagem de erro que o PHP exibia, vinha do cabeçalho da página index.

Grato.

Observação: não deixem também nenhum espaço em branco antes do código PHP do formulário que recebe os dados.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      153k
    • Posts
      652,8k
×
×
  • Criar Novo...