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'];