Ir para conteúdo

POWERED BY:

Arquivado

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

AfroFlash

[Resolvido] Sistema de Login - Nao sei qual é o erro...

Recommended Posts

Ola a todos do iMasters.

 

Sou iniciante em php então peguei varias apostilas na internet para estudar e uma delas tem um exemplo prático de como fazer um sistema simples de login(inclusive este exemplo foi criado pela iMasters).

 

Bom, fiz tudo o que mandava na apostila, criei o arquivo conecta.php e consegue conectar ao banco sem erros, já fiz um insert de usuario no banco e está tudo Ok. Criei a página com o formulário de login, um arquivo ver_sessao.php para as areas restritas e uma pagina de área restrita que é opcoes.php(pagina para cadastrar clientes e gerenciar clientes).

 

O meu problema é que na hora de testar a página de login(index.php), eu coloco o login e a senha corretas e clico em entrar, mas ele não redireciona para a página opcoes.php e volta na mesma página(index.php) com o formulário em branco. O browser não aponta nenhum erro nem nada. Eu acho que o problema está na sessao, mas como sou iniciante nao sei o que posso fazer para arrumar isso.

 

Aqui estão os códigos.

 

- index.php(Página de Login):

<?
include "conecta.php";

if(($apelido_login) and ($senha_login)) {

$sql = mysql_query("select * from tb_user where apelido='$apelido_login' AND senha='$senha_login'",$con) or die ("ERRO no comando SQL:");
if(mysql_num_rows($sql) > 0) {
$id_imasters = mysql_result($sql,0,"id_user");
$apelido_imasters = mysql_result($sql,0,"apelido");
$senha_imasters = mysql_result($sql,0,"senha");
session_start("imasters");

session_register("id_imasters","apelido_imasters","senha_imasters");
header("location: opcoes.php");
}
}
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Tutorial iMasters - index.php</title>
</head>

<body>
<form name="frm_login" method="post" action="<? echo $PHP_SELF; ?>">
<table width="40%" border="0" cellspacing="0" cellpadding="0">
<tr>
	<td colspan="2"><b><font face="Arial, Helvetica, sans-serif" size="3">IDENTIFICAÇÃO</font></b></td>
</tr>
<tr>
	<td width="33%" height="25"><font face="Arial, Helvetica, sans-serif" size="2">Apelido:</font></td>
	<td width="77%" height="25"><font face="Arial, Helvetica, sans-serif" size="2">
	<input type="text" name="apelido_login" /></font></td>
</tr>
<tr>
	<td width="33%" height="25"><font face="Arial, Helvetica, sans-serif" size="2">Senha:</font></td>
	<td width="67%" height="25"><font face="Arial, Helvetica, sans-serif" size="2">
	<input type="password" name="senha_login" /></font></td>
</tr>
<tr>
	<td colspan="2"><input type="submit" name="entrar" value="Entrar >>" /></td>
</tr>
</table>
</form> 
</body>
</html>

- ver_sessao.php:

<?
session_start("imasters");
if(!(session_is_registered("id_imasters") AND
session_is_registered("apelido_imsters") AND
session_is_registered("senha_imasters"))) {
echo "Esta é uma área RESTRITA";
exit;
}
?>

- conecta.php(acho que tá funcionando tudo certo):

<?
$dbname="imasters";
$usuario="usuario";
$password="senha";

if(!($id = mysql_connect("localhost",$usuario,$password))) {
echo "<p align=\"center\"><big><strong>Não foi possível estabelcer uma conexão com o gerenciador MySQL. Favor Contactar o Administrador.</strong></big></p>";
exit;
}
if(!($con=mysql_select_db($dbname,$id))) {
echo "<p align\"center\"><big><strong>Não foi possível estabelecer uma conexão com o Banco de Dados. Favor Contactar o Administrador.</strong></big></p>";
exit;
}
?>

- Opcoes.php:

Por enquanto é só uma pagina em html com o codigo
<? include "ver_sessao.php" ?>

Alguem pode me dar uma luz?

já tentei fazer algumas mudanças mas nenhuma vez funcionou xD

 

Agradeço a todos.

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?

include "conecta.php";

 

$apelido=$_POST['$apelido']; //pq o form tem method="post"

$senha=$_POST['$senha']; //pq o form tem method="post"

 

 

if( !empty($apelido) && !empty($senha) ) {

 

$sql = mysql_query("select * from tb_user where apelido='$apelido' AND senha='$senha'",$con) or die ("ERRO no comando SQL:");

if(mysql_num_rows($sql) > 0) {

$id_imasters = mysql_result($sql,0,"id_user");

$apelido_imasters = mysql_result($sql,0,"apelido");

$senha_imasters = mysql_result($sql,0,"senha");

session_start("imasters");

 

session_register("id_imasters","apelido_imasters","senha_imasters");

header("location: opcoes.php");

}

}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa! Brigadão pelo script NunoMGF, eu troquei o meu script pelo seu, mas mesmo assim não tá redirecionando pra próxima página, continua acontecendo a mesma coisa T_T

 

Será q é algum problema com o meu Apache/PHP? a Versão que eu uso do PHP é 5.1 que vem no pacote WAMP5.

 

Alguem sabe o que pode estar acontecendo? ><

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aparentemente o erro é no script de login. Vamos conferir isso primeiro.

$sql = "SELECT * FROM `tb_user` WHERE `apelido` = '{$apelido_login}' AND `senha` = '{$senha_login}' ";

echo $sql; /* depois você comenta esse echo.. se tiver tudo certo */
$q = mysql_query( $sql )or die( mysql_error() );
$num =  mysql_num_rows( $q )
if( $num > 0) {
$id_imasters = mysql_result($q, 0, 'id_user');
$apelido_imasters = mysql_result($q, 0, 'apelido');
$senha_imasters = mysql_result($q, 0, 'senha');

session_start();

$_SESSION['id_imasters'] = $id_imasters;
$_SESSION['apelido_imasters'] = $apelido_imasters;
$_SESSION['senha_imasters'] = $senha_imasters;
//header('Location: opcoes.php');
}
Informe se voltou algum erro, ou os resultados dos echos que eu coloquei.

Compartilhar este post


Link para o post
Compartilhar em outros sites

voltou

Parse error: syntax error, unexpected $end in C:\wamp\www\imasters\login.php on line 57

 

<?
include "conecta.php";

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


if(($apelido_login) and ($senha_login)) {

$sql = "SELECT * FROM `tb_user` WHERE `apelido` = '{$apelido_login}' AND `senha` = '{$senha_login}' ";

echo $sql; /* depois você comenta esse echo.. se tiver tudo certo */
$q = mysql_query( $sql )or die( mysql_error() );
$num =  mysql_num_rows( $q );
if( $num > 0) {
$id_imasters = mysql_result($q, 0, 'id_user');
$apelido_imasters = mysql_result($q, 0, 'apelido');
$senha_imasters = mysql_result($q, 0, 'senha');

session_start();

$_SESSION['id_imasters'] = $id_imasters;
$_SESSION['apelido_imasters'] = $apelido_imasters;
$_SESSION['senha_imasters'] = $senha_imasters;
//header('Location: opcoes.php');
?>

A linha 57 é a linha que acaba com </html>

fize errado? ><

Compartilhar este post


Link para o post
Compartilhar em outros sites

humm...verdade^^"

 

arrumei agora o echo aparece quando eu tiro a condiçao: if(($apelido_login) and ($senha_login)) {

 

quando eu coloco essa condiçao, o echo nao aparece.

 

<?
include "conecta.php";

$apelido=$_POST['$apelido']; //pq o form tem method="post"
$senha=$_POST['$senha']; //pq o form tem method="post"

if(($apelido_login) and ($senha_login)) {
$sql = "SELECT * FROM `tb_user` WHERE `apelido` = '{$apelido_login}' AND `senha` = '{$senha_login}' ";

echo $sql; /* depois você comenta esse echo.. se tiver tudo certo */
$q = mysql_query( $sql )or die( mysql_error() );
$num =  mysql_num_rows( $q );
if( $num > 0) {
$id_imasters = mysql_result($q, 0, 'id_user');
$apelido_imasters = mysql_result($q, 0, 'apelido');
$senha_imasters = mysql_result($q, 0, 'senha');

session_start();

$_SESSION['id_imasters'] = $id_imasters;
$_SESSION['apelido_imasters'] = $apelido_imasters;
$_SESSION['senha_imasters'] = $senha_imasters;
//header('Location: opcoes.php');
}
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ops.. nem me atentei à condição..

mas diz oq aparece no echo..

 

if(($apelido != '' ) and ($senha != '' )) {

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta parte do código está correta??? Veja que você coloca o nome como $apelido, e depois você usa $apelido_login... É pra ser assim mesmo???

$apelido=$_POST['$apelido']; //pq o form tem method="post"
$senha=$_POST['$senha']; //pq o form tem method="post"

if(($apelido_login) and ($senha_login)) {

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ops.. nem me atentei à condição..

mas diz oq aparece no echo..

 

if(($apelido != '' ) and ($senha != '' )) {

sem a condiçao mostra o echo: SELECT * FROM `tb_user` WHERE `apelido` = '' AND `senha` = ''

e o formulario de login.

 

com a sua condição, o echo nao aparece, só aparece o formulario de login e nao é redirecionado para a pagina pq a header ta como comentário neh?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Humm... matias_rezende

 

mudei:

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

para:

$apelido=$_POST['apelido_login']; 
$senha=$_POST['senha_login'];

Agora sim, quando eu coloco um usuario e uma senha qualquer, aparece o echo: SELECT * FROM `tb_user` WHERE `apelido` = '' AND `senha` = ''

Compartilhar este post


Link para o post
Compartilhar em outros sites

Também..

mas identificamos outro erro ali, como o matias_rezende disse. Poste o HTML do teu formulário.

 

Tem que ficar igual cara..

$apelido=$_POST['apelido_login'];
$senha=$_POST['senha_login'];
a chave desse array, é o name dos inputs do form.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postando o html do meu formulario:

<form name="frm_login" method="post" action="<? echo $PHP_SELF; ?>">
<table width="40%" border="0" cellspacing="0" cellpadding="0">
<tr>
	<td colspan="2"><b><font face="Arial, Helvetica, sans-serif" size="3">IDENTIFICAÇÃO</font></b></td>
</tr>
<tr>
	<td width="33%" height="25"><font face="Arial, Helvetica, sans-serif" size="2">Apelido:</font></td>
	<td width="77%" height="25"><font face="Arial, Helvetica, sans-serif" size="2">
	<input type="text" name="apelido_login" /></font></td>
</tr>
<tr>
	<td width="33%" height="25"><font face="Arial, Helvetica, sans-serif" size="2">Senha:</font></td>
	<td width="67%" height="25"><font face="Arial, Helvetica, sans-serif" size="2">
	<input type="password" name="senha_login" /></font></td>
</tr>
<tr>
	<td colspan="2"><input type="submit" name="entrar" value="Entrar >>" /></td>
</tr>
</table>
</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então está Okay, rode assim:

<?php
include "conecta.php";

$apelido = $_POST['apelido_login'];
$senha = $_POST['senha_login']; 

	if(( $apelido != '' ) and ( $senha != '' )) 
	{
		$sql = "SELECT * FROM `tb_user` WHERE `apelido` = '{$apelido}' AND `senha` = '{$senha}' ";

		// echo $sql; /* depois você comenta esse echo.. se tiver tudo certo */
		$q = mysql_query( $sql )or die( mysql_error() );
		$num =  mysql_num_rows( $q );
		
		if( $num > 0 )
		{
			$id_imasters = mysql_result($q, 0, 'id_user');
			$apelido_imasters = mysql_result($q, 0, 'apelido');
			$senha_imasters = mysql_result($q, 0, 'senha');

			session_start();

			$_SESSION['id_imasters'] = $id_imasters;
			$_SESSION['apelido_imasters'] = $apelido_imasters;
			$_SESSION['senha_imasters'] = $senha_imasters;

			header('Location: opcoes.php');
		}
	}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

humm.. não deu ><

continua dando a mesma coisa... parece que o header nao funciona aqui xDD

Será que o problema tá no BD? eu acho que não pq eu consigo criar um guestbook com um banco de dados entao acho que tá okay.

 

login.php:

<?php
include "conecta.php";

$apelido = $_POST['apelido_login'];
$senha = $_POST['senha_login'];

	if(( $apelido != '' ) and ( $senha_login != '' ))
	{
		$sql = "SELECT * FROM `tb_user` WHERE `apelido` = '{$apelido}' AND `senha` = '{$senha}' ";

		// echo $sql; /* depois você comenta esse echo.. se tiver tudo certo */
		$q = mysql_query( $sql )or die( mysql_error() );
		$num =  mysql_num_rows( $q );
		
		if( $num > 0 )
		{
			$id_imasters = mysql_result($q, 0, 'id_user');
			$apelido_imasters = mysql_result($q, 0, 'apelido');
			$senha_imasters = mysql_result($q, 0, 'senha');

			session_start();

			$_SESSION['id_imasters'] = $id_imasters;
			$_SESSION['apelido_imasters'] = $apelido_imasters;
			$_SESSION['senha_imasters'] = $senha_imasters;

			header('Location: opcoes.php');
		}
	}
?>


<html>
<head>
<title>Tutorial iMasters - index.php</title>
</head>

<body bgcolor="#FFFFFF" text="#000000">
<form name="frm_login" method="post" action="<? echo $PHP_SELF; ?>">
<table width="40%" border="0" cellspacing="0" cellpadding="0">
<tr>
	<td colspan="2"><b><font face="Arial, Helvetica, sans-serif" size="3">IDENTIFICAÇÃO</font></b></td>
</tr>
<tr>
	<td width="33%" height="25"><font face="Arial, Helvetica, sans-serif" size="2">Apelido:</font></td>
	<td width="77%" height="25"><font face="Arial, Helvetica, sans-serif" size="2">
	<input type="text" name="apelido_login" /></font></td>
</tr>
<tr>
	<td width="33%" height="25"><font face="Arial, Helvetica, sans-serif" size="2">Senha:</font></td>
	<td width="67%" height="25"><font face="Arial, Helvetica, sans-serif" size="2">
	<input type="password" name="senha_login" /></font></td>
</tr>
<tr>
	<td colspan="2"><input type="submit" name="entrar" value="Entrar >>" /></td>
</tr>
</table>
</form> 
</body>
</html>

O create table da minha tabela tb_user:

CREATE TABLE `tb_user` (
  `id_user` int(11) NOT NULL auto_increment,
  `apelido` varchar(60) default NULL,
  `senha` varchar(20) default NULL,
  PRIMARY KEY  (`id_user`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha aqui de novo... A variável está errada de novo...

$apelido = $_POST['apelido_login'];
$senha = $_POST['senha_login'];

	if(( $apelido != '' ) and ( $senha_login != '' ))// é $senha ou $senha_login???

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

aeee brigadaum matias_rezende!

 

agora sim funcionou...foi redirecionada para a pagina opcoes.php certinho...

só que agora aparece a mensagem de área restrita...acho que o start_session nao funcionou huEHEHUEHUEHUehu vou tentar arrumar aqui e volto a postar se funcionou...

mais uma vez obrigado por todos que tentaram me ajudar heheheh^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.