Ir ao conteúdo
  • Cadastre-se

PHP Erro: "Notice: Undefined index:" no PHP


Posts recomendados

Olá,

 

Estou com um "bug" estranho. O erro é este: "Notice: Undefined index:".

 

Pelo que pesquisei, meu formulário em HTML e a página que o formulário HTML chama no "action" do form teriam que estar tudo certinho pra esse erro desaparecer. Mas aqui, está, teoricamente tudo "certinho" os campos e a página do "action".

 

Segue os códigos:

 

- Formulário:

 

<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans titre</title>
<style type="text/css">
<!--
.Style6 {font-size: 13px}
-->
</style>
</head>

<body>
<form id="form1" name="form1" method="POST" action="logar.php">
  <table width="41%" border="0">
    <tr>
      <td colspan="2"><div align="center"><strong>Usuario</strong></div></td>
    </tr>
    <tr>
      <td><span class="Style6">Login:</span></td>
      <td><span class="Style6">
        <label>
        <input name="login" type="text" id="login" />
        </label>
      </span></td>
    </tr>
    <tr>
      <td><span class="Style6">Senha:</span></td>
      <td><span class="Style6">
        <label>
        <input name="senha" type="password" id="senha" />
        </label>
      </span></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><span class="Style6">
        <label>
        <input type="submit" name="Submit" value="OK" />
        </label>
      </span></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><span class="Style6"><a href="esquece_senha.php">Esquece senha </a></span></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><span class="Style6"><a href="cadastro.php">Cadastro</a></span></td>
    </tr>
  </table>
</form>
</body>
</html>

 

- logar.php:

 

<?php
include("config.php");

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

//$login = "usuario";
//$senha = "teste";
echo $login;
/* Verifica se existe usuario, o segredo ta aqui quando ele procupa uma 
linha q contenha o login e a senha digitada */
$sql_logar = "SELECT * FROM user WHERE login = '$login' && senha = '$senha'";
$exe_logar = mysqli_query($conexao, $sql_logar) or die (mysql_error());
$fet_logar = mysqli_fetch_array($exe_logar);
$num_logar = mysqli_num_rows($exe_logar);

//Verifica se n existe uma linha com o login e a senha digitado
if ($num_logar == 0){
   echo "Login ou senha invalido.";
   echo "<br><a href='javascript:window.history.go(-1)'>Clique aqui para volta.</a>";   
} 
elseif($fet_logar['activo'] == "N"){
   echo "Usuario não ativado, verifique seu e-mail para ativa a conta.";
   echo "<br><a href='javascript:window.history.go(-1)'>Clique aqui para volta.</a>"; 
}
else{
   //Cria a sessão e manda pra pagina principal.php
   session_start();
   echo "Teste";
   $_SESSION['login'] = $login;
   $_SESSION['senha'] = $senha;
   header("Location:principal.php");
}
?>

 

- Principal.php

 

<?php
include("config.php");
include("restrito.php");
$_SESSION['login'] = "tentandoColocarValorNaVariavelDiretamentePraTeste";
$login_username = $_SESSION['login'];

$sql_busca = "SELECT * FROM user WHERE login = '$login_username'";
$exe_busca = mysqli_query($conexao, $sql_busca) or die (mysql_error());
$fet_busca = mysqli_fetch_array($exe_busca);
?>
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans titre</title>
</head>

<body>
Ola <? echo $fet_busca['login'];?>.
Ola <? echo $login_username; ?>

<br>
<a href="logout.php">Logout</a>
</body>
</html>

 

 

Qual a principal caracteristica que se nota deste erro? Resposta: "Não está sendo carregado o $login e $senha que vem do formulário com o $_POST['campo']."

 

 

Se alguem souber olhando os códigos acima onde está o erro eu agradeço. Estou tentando aqui encontrar o "erro".

 

Obrigado.

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Insurgent3 Então.. o erro é característico de que o arquivo php não recebeu os dados.

 

Tente fazer um teste só com o echo nas variáveis:

 

crie um arquivo teste.php

Nele coloque assim:

<?php
    $login = $_POST["login"];
    $senha = $_POST["senha"];
    
    echo "$login e $senha";
?>

Se ele mostrar o usuário e senha digitado, é sinal de que funciona.

Só um detalhe, no eu código, eu mudaria a aspas simples por duplas.

 

$_POST['login']  para  $_POST["login"]

O session_start() deve ser a primeira coisa lá no topo do arquivo.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Moderador

@Insurgent3 Qual o programa que estás usando em localhost?  Eu recomendo sempre usar o EasyPHP DEVserver 17.  Rodar o apache e a versão 7 do php.( tudo é configurável na dashboard do easyphp.

 

Não consigo ver um problema naquela parte do código. Deveria funcionar. seja por POST ou GET.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Olá,

 

Obrigado mais uma vez.

 

Ainda não consegui resolver. Mas uma coisa que acabei de perceber e descobrir é que está funcionando a passagem das variáveis pelo formulário se eu digitar o login e/ou senha errados. Mas se eu digitar o valor que esta no banco de dados ele nao pega os valores do formulário.


Estranho.

 

E esse código eu peguei da internet, fiz pouquíssimas modificações.

 

Se alguém souber o que é eu agradeço.

 

Obrigado.

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Insurgent3 Então, era isso que eu queria saber, quando perguntei pela primeira vez.

 

Se você diz que os dados estão passando quando erra, isso é sinal de que o formulário realmente está mandando os dados.

 

Se quando põe certo e não funciona provável que o erro seja na sintaxe sql.

Me chamou a atenção esta instrução:

$sql_logar = "SELECT * FROM user WHERE login = '$login' && senha = '$senha'";

Experimente trocar para:

$sql_logar = "SELECT * FROM user WHERE login = '$login' AND senha = '$senha'";

O SQL não usa &&, mas sim a palavra AND, OR e etc.

 

Fora isso,  experimenta seguir a estrutura de validador de login deste post:

Eu explico ali como validar e outras coisinhas.

Link para o comentário
Compartilhar em outros sites

Olá,

 

Esta dando erro ainda e o erro é que as variáveis do formulário estão vazias.

 

Imagem:

 

http://image.ibb.co/ceAKNn/logar_img.png

 

 

Código: logar.php

 

<?php
session_start();
include("config.php");

$login = $_POST["login"];
$senha = $_POST["senha"];

//$login = "Paulo";
//$senha = "senhacorreta";

if (empty($login)) 
{
   echo "Variável Login Vazia: $login";
   echo "<br>";
}
if (empty($senha))
{
   echo "Variável Senha Vazia: $senha";
   echo "<br>";
}

echo $login;
echo $senha;
echo "teste";
/* Verifica se existe usuario, o segredo ta aqui quando ele procupa uma 
linha q contenha o login e a senha digitada */
$sql_logar = "SELECT * FROM user WHERE login = '$login' AND senha = '$senha'";
$exe_logar = mysqli_query($conexao, $sql_logar) or die (mysql_error());
$fet_logar = mysqli_fetch_array($exe_logar);
$num_logar = mysqli_num_rows($exe_logar);

//Verifica se n existe uma linha com o login e a senha digitado
if ($num_logar == 0){
   echo "Login ou senha invalido.";
   echo "<br><a href='javascript:window.history.go(-1)'>Clique aqui para volta.</a>";   
} 
elseif($fet_logar['activo'] == "N"){
   echo "Usuario não ativado, verifique seu e-mail para ativa a conta.";
   echo "<br><a href='javascript:window.history.go(-1)'>Clique aqui para volta.</a>"; 
}
else{
   //Cria a sessão e manda pra pagina principal.php
   
   echo "Teste1";
   $_SESSION['login'] = $login;
   $_SESSION['senha'] = $senha;
   header("Location:principal.php");
}
   echo "Teste";
   
//	$login = "Paulo";
//$senha = "senhacorreta";
  // $_SESSION["login"] = $login;
   //$_SESSION["senha"] = $senha;
   //header("Location:principal.php");
?>

 

 

Sinceramente não sei o que fazer e como resolver. Não sei se é algum arquivo de configuração ou não.

 

Se alguém souber o motivo eu agradeço.

 

Obrigado.

 

Link para o comentário
Compartilhar em outros sites

Boa noite sr @Insurgent3

Tente corrigir o os comandos de acesso banco de dados.

Ao invés de usar mysqli_*
Use "new mysqli"
config.php

if($_SERVER[SERVER_ADDR] == "127.0.0.1") {
   $my_sql = "localhost"
} else {
   $my_sql = "mysql.hospedagem.com";
}
$mysqli = new mysqli($my_sql, "$user", "$pass", "$mydb");


e no logar você pode deixar assim tb

 

<?php
session_start();
ini_set("display_errors",'0');
include("config.php");

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

echo $login . "<br>";

$sql_logar = "SELECT activo FROM user WHERE login = '$login' AND senha = '$senha'";
$exe_logar = $mysqli->query($sql_logar);
$far_logar = $exe_logar->fetch_array();
$fas_logar = $exe_logar->fetch_assoc();
$num_logar = $exe_logar->num_rows;

if ($num_logar ==0) {
    $_SESSION = array();
    session_destroy();
    echo "<br>Login ou senha invalido.<pre>";
    echo "</pre><a href='javascript:window.history.go(-1)'>Clique aqui para volta.</a>";
    exit();
} else if($fas_logar['activo'] == "N"){
    echo "Usuario não ativado, verifique seu e-mail para ativa a conta.";
    echo "<br><a href='javascript:window.history.go(-1)'>Clique aqui para volta.</a>";
    exit();
} else {
///   .... Seu Código de logim bem sucedido
        session_start();
        echo "Teste";
        $_SESSION['login'] = $login;
        $_SESSION['senha'] = $senha;
        print_r($_SESSION);
    }
}
$mysqli->close();
exit();
?>


Nos testes aqui de casa deram certo.

Link para o comentário
Compartilhar em outros sites

  • Moderador

@diegofsti

Não recomendo que esconda os avisos de erro.   Pois se estiver certo, não apresentará o erro!

 

@Insurgent3 Não deixei de notar que você instalou no C:\arquivos de programas o easyphp.   Não sei qual seu windows, mas do 7 para cima tem certos programas que precisam de permissão e/ou acesso pelo administrador.

 

Nesse caso, eu recomendo que faça o backup dos seus arquivos na pasta eds-www e desinstale o easyphp.  Passe o Ccleaner para limpar os resquícios dele e reinstale em outro lugar que não seja do sistema.  Por exemplo em outra partição, ou HD.   No pior das hipóteses, se você tiver somente um HD e uma partição como o C:  aí você instala ele ali na raiz mesmo(isso somente se você não tiver outras partições ou HD)

 

Faça o teste aí. Aqui eu uso o easyPHP, instalado em uma partição D: com acesso total. Pode parecer besta, mas as vezes uma simples coisa pode travar tudo e não funcionar.( não quer dizer que isso vá resolver o seu problema porque pela descrição, o formulário não está enviado dados.

 

Vamos tentar um teste mais simples para ver mesmo se funciona.

 

Dentro da pasta eds-www crie uma nova pasta chamada Teste.

Dentro desta pasta "Teste"  crie um arquivo html com um formulário simples:

PS: esta estrutura com o lang e o doctype é do HTML5

formulario.html

<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<title>Teste</title>
</head>
<body>
 <form method="POST" action="recebeDados.php">
    <input type="text" name="nome" placeholder="Nome" />
    <input type="text" name="idade" placeholder="Idade" />
    <input type="submit" value="OK" />
 </form> 
</body>
</html>

 

recebeDados.php

<?php
   $nome  = $_POST["nome"];
   $idade = $_POST["idade"]; 

   echo "meu nome é $nome e tenho $idade anos";

Sim, desta forma, sem fechar a tag do PHP. O porque disto é que o php interpreta o código, mas se porventura tiver algum erro de sintaxe ele dará um fatal error.

 

Se tudo funcionar bem, a frase por exemplo:  " meu nome é fulano e tenho 35 anos "   deverá aparecer.

To achando isso muito estranho, porque se fosse erro no php ele acusaria, até no console mostra os erros.

Link para o comentário
Compartilhar em outros sites

Entendi sr @DiF,, porém,, 

se deixar display_erros 1

 

será necessário corrigir todas as definições,,

Notice: Use of undefined constant SERVER_ADDR - assumed 'SERVER_ADDR' in /var/www/html/config.php on line 10
Notice: Use of undefined constant SERVER_ADDR - assumed 'SERVER_ADDR' in /var/www/html/config.php on line 10
Notice: Undefined variable: fas_logar in /var/www/html/logar.php on line 10 

o que,, para uma simples home particular,, toma muito tempo,, pode sim pegar modelos já preparados e realizar as devidas alterações,, 


Sr @Insurgent3,, arrumei o código que fiz,, emendando com o teu,, talvez lhe ajude melhor a entender este post..
 

<pre>
<?php
session_start();
include("config.php");

$login = $_POST['login'];
$senha = $_POST['senha'];
$tabla = "usuario";

$sql_logar = "SELECT * FROM ".$tabla." WHERE user = '".$login."' AND pass = '".$senha."'";
$exe_logar = $mysqli->query($sql_logar);
$num_logar = $exe_logar->num_rows;

if ($num_logar == 0) {
	$_SESSION = array();
	session_destroy();
	echo "<br>Login ou senha invalido.<pre>";
	echo "</pre><a href='javascript:window.history.go(-1)'>Clique aqui para volta.</a>";
	exit();
} else if($fas_logar['activo'] == "N"){
	echo "Usuario não ativado, verifique seu e-mail para ativa a conta.";
	echo "<br><a href='javascript:window.history.go(-1)'>Clique aqui para volta.</a>";
	exit();
} else {
	session_start();
	$sql_combina = "describe ". $tabla;
	$combina = $mysqli->query($sql_combina);
	$combine = $exe_logar->fetch_array();
	$count = $combina->num_rows;
	$i = 0;
	while($fas_logar = $combina->fetch_array()){
		echo $fas_logar[0] . ": " . $combine[$i] ."<br>";
		$i++;
	}
}

$mysqli->close();
exit();
?>

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!