Ir para conteúdo

POWERED BY:

Arquivado

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

fabriciohp

[Resolvido] Problema com session

Recommended Posts

Alguém pode me dizer por que esse código não está funcionando? simplesmente não acontece nada após o submit.. carrega a mesma página.

 

<?php
if (getenv("REQUEST_METHOD") == "POST") {
	
	$name= addslashes($_POST['name']);
	$psw= addslashes($_POST['psw']);

$conexao = mysql_pconnect("localhost","user","senha") or die(mysql_error());
mysql_select_db("db1",$conexao) or die(mysql_error());


if (isset($_POST['submit'])) {
	if ($name && $psw) {
		$checa = mysql_query("SELECT name, psw FROM users WHERE name = '$name' AND psw = '$psw'");
		$confirma = mysql_num_rows($checa);
			if($confirma == 1) {
				$_SESSION['name'] = stripslashes($name);
				$_SESSION['psw'] = stripslashes($psw);
				reader("Location: index.php");
			} else
				$erro = "erro!";
	} else
		$erro2 = "erro2!";
}
}
if ($erro) {
   ?>
   <ul><?php echo $erro; ?></ul>
   <?php
}
if ($erro2) {
   ?>
   <ul><?php echo $erro2; ?></ul>
   <?php
}
?>

(form..)

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema deve ser a falta de action na página do formulário.

 

Carlos Eduardo

 

<form action="<?php echo $_SERVER['PHP_SELF']?>" method="POST">
<table>
	<tr>	
		<td align="left"><label for="usr"><a>Usuário</a></label></td>
		<td align="right"><input type="text" id="usr" name="name"></td>
	</tr>
	<tr>	
		<td align="left"><label for="psw"><a>Senha</a></label></td>
		<td align="right"><input type="password" id="psw" name="psw"></td>
	</tr>
	<tr>
		<td><input type="submit" value="Entrar"></td>
		<td align="right"><a href="cadastro.php">Cadastrar</a>
	</tr>
</table>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eis um erro que encontrei:

 

 if($confirma == 1) {
                                $_SESSION['name'] = stripslashes($name);
                                $_SESSION['psw'] = stripslashes($psw);
                                /**
                                * Erro no reader
                                * reader("Location: index.php");
                                */
                                  header("Location: index.php");
                        }

Creio que seja a causa do seu problema, a falta de action no form não é pois quando não se tem action o formulario é postado para a página atual, como o php está tratando o recebimento do form na mesma página esse não é o problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

a falta de action no form não é pois quando não se tem action o formulario é postado para a página atual

Quando eu falei sobre a falta do action, não tinha visto que o form e a validação estavam na mesma página.

 

Apache.

 

Se fosse IIS, diria que o problema é a função getenv, que não funciona no modo ISAPI. Fonte: http://br.php.net/getenv

 

Faça a alteração que o amigo sugeriu acima. Deve resolver.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eis um erro que encontrei:

 

 if($confirma == 1) {
                                $_SESSION['name'] = stripslashes($name);
                                $_SESSION['psw'] = stripslashes($psw);
                                /**
                                * Erro no reader
                                * reader("Location: index.php");
                                */
                                  header("Location: index.php");
                        }

Creio que seja a causa do seu problema, a falta de action no form não é pois quando não se tem action o formulario é postado para a página atual, como o php está tratando o recebimento do form na mesma página esse não é o problema.

 

Opa! arrumei isso mas continua a mesma coisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

a falta de action no form não é pois quando não se tem action o formulario é postado para a página atual

Quando eu falei sobre a falta do action, não tinha visto que o form e a validação estavam na mesma página.

 

Apache.

 

Se fosse IIS, diria que o problema é a função getenv, que não funciona no modo ISAPI. Fonte: http://br.php.net/getenv

 

Faça a alteração que o amigo sugeriu acima. Deve resolver.

 

Carlos Eduardo

 

Fiz isso e continua na mesma...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como está o código agora?

 

Carlos Eduardo

 

<?php
if (getenv("REQUEST_METHOD") == "POST") {
        
        $name= addslashes($_POST['name']);
        $psw= addslashes($_POST['psw']);

$conexao = mysql_pconnect("localhost","user","senha") or die(mysql_error());
mysql_select_db("db1",$conexao) or die(mysql_error());


if (isset($_POST['submit'])) {
        if ($name && $psw) {
                $checa = mysql_query("SELECT name, psw FROM users WHERE name = '$name' AND psw = '$psw'");
                $confirma = mysql_num_rows($checa);
                        if($confirma == 1) {
                                $_SESSION['name'] = stripslashes($name);
                                $_SESSION['psw'] = stripslashes($psw);
                                header("Location: index.php");
                        } else
                                $erro = "erro!";
        } else
                $erro2 = "erro2!";
}
}
if ($erro) {
   ?>
   <ul><?php echo $erro; ?></ul>
   <?php
}
if ($erro2) {
   ?>
   <ul><?php echo $erro2; ?></ul>
   <?php
}
?>

<h2>Login!</h2>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="POST">
<table>
        <tr>    
                <td align="left"><label for="usr"><a>Usuário</a></label></td>
                <td align="right"><input type="text" id="usr" name="name"></td>
        </tr>
        <tr>    
                <td align="left"><label for="psw"><a>Senha</a></label></td>
                <td align="right"><input type="password" id="psw" name="psw"></td>
        </tr>
        <tr>
                <td><input type="submit" value="Entrar"></td>
                <td align="right"><a href="cadastro.php">Cadastrar</a>
        </tr>
</table>
</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha... está faltando um session_start() ali antes de setar a $_SESSION['name'].

 

Outra coisa, como é o nome desta página? O que tem na index.php?

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha... está faltando um session_start() ali antes de setar a $_SESSION['name'].

 

Outra coisa, como é o nome desta página? O que tem na index.php?

 

Carlos Eduardo

 

Inclui o session_start() e nada..

 

Essa página é a login.php, na index tem divs e includes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos debugar...

 

<?php
// habilitamos todos os erros
ini_set('display_errors', 1); 
error_reporting(E_ALL);
if (getenv("REQUEST_METHOD") == "POST") 
{
echo 'Debug 1<br/>';
$name= addslashes($_POST['name']);
$psw= addslashes($_POST['psw']);
$conexao = mysql_pconnect("localhost","user","senha") or die(mysql_error());
mysql_select_db("db1",$conexao) or die(mysql_error());
if (isset($_POST['submit'])) 
{
	echo 'Debug 2<br/>';
	if ($name && $psw) 
	{
		echo 'Debug 3<br/>';
		$checa = mysql_query("SELECT name, psw FROM users WHERE name = '$name' AND psw = '$psw'");
		$confirma = mysql_num_rows($checa);
		if($confirma == 1) 
		{
			echo 'Debug 4<br/>';
			session_start();
			$_SESSION['name'] = stripslashes($name);
			$_SESSION['psw'] = stripslashes($psw);
			header("Location: index.php");
		} 
		else
		{
			$erro = "erro!";
		} 
	}
	else
	{
		$erro2 = "erro2!";
	}
}
}
if ($erro) 
{
  ?>
  <ul><?php echo $erro; ?></ul>
  <?php
}
if ($erro2) {
  ?>
  <ul><?php echo $erro2; ?></ul>
  <?php
}
?>

<h2>Login!</h2>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="POST">
<table>
       <tr>    
               <td align="left"><label for="usr"><a>Usuário</a></label></td>
               <td align="right"><input type="text" id="usr" name="name"></td>
       </tr>
       <tr>    
               <td align="left"><label for="psw"><a>Senha</a></label></td>
               <td align="right"><input type="password" id="psw" name="psw"></td>
       </tr>
       <tr>
               <td><input type="submit" value="Entrar"></td>
               <td align="right"><a href="cadastro.php">Cadastrar</a>
       </tr>
</table>
</form>

 

Coloque este código e veja se aparece algum erro.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos debugar...

 

<?php
// habilitamos todos os erros
ini_set('display_errors', 1); 
error_reporting(E_ALL);
if (getenv("REQUEST_METHOD") == "POST") 
{
echo 'Debug 1<br/>';
$name= addslashes($_POST['name']);
$psw= addslashes($_POST['psw']);
$conexao = mysql_pconnect("localhost","user","senha") or die(mysql_error());
mysql_select_db("db1",$conexao) or die(mysql_error());
if (isset($_POST['submit'])) 
{
	echo 'Debug 2<br/>';
	if ($name && $psw) 
	{
		echo 'Debug 3<br/>';
		$checa = mysql_query("SELECT name, psw FROM users WHERE name = '$name' AND psw = '$psw'");
		$confirma = mysql_num_rows($checa);
		if($confirma == 1) 
		{
			echo 'Debug 4<br/>';
			session_start();
			$_SESSION['name'] = stripslashes($name);
			$_SESSION['psw'] = stripslashes($psw);
			header("Location: index.php");
		} 
		else
		{
			$erro = "erro!";
		} 
	}
	else
	{
		$erro2 = "erro2!";
	}
}
}
if ($erro) 
{
  ?>
  <ul><?php echo $erro; ?></ul>
  <?php
}
if ($erro2) {
  ?>
  <ul><?php echo $erro2; ?></ul>
  <?php
}
?>

<h2>Login!</h2>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="POST">
<table>
       <tr>    
               <td align="left"><label for="usr"><a>Usuário</a></label></td>
               <td align="right"><input type="text" id="usr" name="name"></td>
       </tr>
       <tr>    
               <td align="left"><label for="psw"><a>Senha</a></label></td>
               <td align="right"><input type="password" id="psw" name="psw"></td>
       </tr>
       <tr>
               <td><input type="submit" value="Entrar"></td>
               <td align="right"><a href="cadastro.php">Cadastrar</a>
       </tr>
</table>
</form>

 

Coloque este código e veja se aparece algum erro.

 

Carlos Eduardo

 

Notice: Undefined variable: erro in \login.php on line 75

 

Notice: Undefined variable: erro2 in \login.php on line 80

 

 

75:

if ($erro)

80:

if ($erro2)

 

Fiz essa alteração e apareceu "Debug 1"

session_start();
				$_SESSION['name'] = stripslashes($name);
				$_SESSION['psw'] = stripslashes($psw);
				header("Location: index.php");
			} else
				echo "erro";
	} else
		echo "erro2!";
}
}

?>

<h2>Login!</h2>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá... perai... Você enviou os dados? Porque o script só vai fazer qualquer coisa depois de enviar o formulário. Enviou e não apareceu nada?

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá... perai... Você enviou os dados? Porque o script só vai fazer qualquer coisa depois de enviar o formulário. Enviou e não apareceu nada?

 

Carlos Eduardo

 

Sim, e deu aquilo que falei antes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá... então troca isto...

 

if (getenv("REQUEST_METHOD") == "POST") 

Por isto

 

if ($_SERVER['REQUEST_METHOD'] == "POST") 

Veja se funciona. Se funcionar, é porque não está rodando em Apache, e sim em ISAPI.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá... então troca isto...

 

if (getenv("REQUEST_METHOD") == "POST") 

Por isto

 

if ($_SERVER['REQUEST_METHOD'] == "POST") 

Veja se funciona. Se funcionar, é porque não está rodando em Apache, e sim em ISAPI.

 

Carlos Eduardo

 

Continua dando Debug 1.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha... agora é só debugar... Veja que ele teria que entrar até o Debug4, ou seja, não está entrando nos Ifs... tente entender o que está acontecendo... Por exemplo...

 

if (isset($_POST['submit'])) 
        {
                echo 'Debug 2<br/>';

Só vai entrar neste if se estiver setado o $_POST['submit']. Ele está sendo enviado? Existe algum input com este nome?

 

Carlos Eduardo

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.