Notice: Undefined index é um erro bastante comum do PHP. Ele está relacionado aos métodos POST e GET, no recebimento de formulários. A mensagem de erro, normalmente, é:
Notice: Undefined index: nome in /home/meusitemodelo/public_html/teste.php on line 3
O erro é causado quando tentamos chamar uma variável $_POST ou $_GET que não foi enviada através do formulário. Para cada campo <input> no HTML, é necessário haver um parametro name, identificando o nome do campo, que irá virar a variável dentro do PHP.
Por exemplo, para que este campo seja enviado pelo formulário:
<input type="text" name="cliente">
Dessa forma, ele será recebido no PHP:
$_POST['cliente'];
A mensagem de erro Undefined index pode ser causada por alguns motivos:
- Motivo 1: Falta do parametro name no formulário
- Motivo 2: Campos com nome diferente no formulário html e no PHP
- Motivo 3: Diferença ou falta dos métodos POST x GET no formulário
Em suma, explicaremos cada um deles a seguir, incluíndo a solução necessária.
Motivo 1: Falta do parametro “name” no form do html
Primeiramente, todo campo input no formulário HTML precisa ter o parametro name especificado. Assim, este é o nome da variável que o PHP irá identificar.
Exemplo: <input type=”text” name=”cliente”>
Solução: certifique-se de que todos os input’s do seu formulário possuem o parametro name, e de que os valores são exatamente os que você está tentando chamar no PHP.
Modo errado:
<input type="text">
E no PHP:
$_POST['clientes'];
Modo correto:
<input type="text" name="cliente">
E no PHP:
$_POST['clientes'];
Motivo 2: Campos com nome diferente no formulário html e no PHP
Você pode estar chamando no PHP um nome diferente do parametro name no formulário.
Modo errado:
<input type="text" name="cliente">
E no PHP:
$_POST['clientes'];
Em suma, a simples diferença no nome dos campos (“cliente” no formulário, e “clientes“ no PHP) já é suficiente para gerar o erro.
Solução: altere o formulário no html, e use sempre o mesmo nome.
Modo correto:
<input type="text" name="cliente">
E no PHP:
$_POST['cliente'];
Motivo 3: Diferença ou falta dos métodos POST x GET no formulário
Quando estamos desenvolvendo, é muito comum errarmos o método do formulário e do PHP. Dessa forma, se o método do formulário html <form method=”___”> for POST, devemos chamar a variável no PHP sempre como $_POST[‘nome’], e sempre que for GET, chamamos por $_GET[‘nome’]. Por isso, o método correto do formulário precisa sempre ser especificado. Por padrão, quando o formulário não possui o method=”GET” ou method=”POST” especificado, ele é enviado como GET.
Modo errado:
<form action="teste.php" method="GET"> <input type="text" name="cliente"> <input type=submit> </form>
E no PHP:
$_POST['cliente'];
Em resumo, apesar dos nomes dos campos serem os mesmos, no formulário e no PHP, a forma de se chamar a variável precisa ser a mesma em relação ao método (method) no formulário.
Modo correto usando POST:
<form action="teste.php" method="POST"> <input type="text" name="cliente"> <input type=submit> </form>
E no PHP:
$_POST['cliente'];
Modo correto usando GET:
<form action="teste.php" method="GET"> <input type="text" name="cliente"> <input type=submit> </form>
E no PHP:
$_GET['cliente'];
Muito obrigado!! Solucionou meu problema 😀
Ola, meu problema também é com essa mensagem, porem eu não estou passando de um HTML para um PHP e sim de um PHP para outro. Segrue o código abaixo:
Arquivo PHP 1
<?php
include("conecta.php");
$sqllista = "select * from tb_arquivos";
$retorno = mysqli_query($conexao,$sqllista) or die(mysql_error());
echo "”;
echo “”;
echo “”.””.”NOME DO ARQUIVO”.””;
echo “”.””.”DATA DO ARQUIVO”.””;
echo “”.””.”EXCLUSÃO”.””;
echo “”.””.”VISUALIZAÇÃO”.””;
while ($lista = mysqli_fetch_array($retorno)) {
echo “”;
//echo “”.$lista[“cod_arq”].””;
echo “”.$lista[“nom_arq”].””;
echo “”.””.$lista[“data_arq”].””;
echo “”.”“.”“;
echo “”.”“.”“;
echo $lista[“nom_arq”];
echo “”;
}
“”;
}
Arquivo PHP 2
Mas não imprime nada e ja vi no Banco de dados que o mesmo esta alimentado.
Se alguém puder ajudar agradeço muito. Obrigado.
Simples, claro e excelente.
Falou a minha língua.
Parabéns pelo post.
Atingiu na mosca o objetivo.
Sucesso e Obrigado.