• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Furriel

Notice: Undefined index

7 mensagens neste tópico

Olá,

Estou a criar um formulário para inserir numa base de dados os dados de um funcionário.

Deixo aqui o código:

<html>
<head>
<title>Untitled Document</title>
</head>

<body>

<form action="index.php?menu=ins" method='POST'>
Código: <input type="text" name="cod_func" maxlength="5" /><br/>
    Nome: <input type="text" name="nome" maxlength="50" /><br/>
    Data de Nascimento: <input type="text" name="dn" maxlength="10" /><br/>
    Observações:<br/><textarea cols="45" rows="5" name="obs"></textarea><br/>
    Morada: <input type="text" name="morada" maxlength="100" /><br/>
    Bilhete de Identidade: <input type="text" name="bi" maxlength="10" /><br/>
    Nº Identificação Fiscal: <input type="text" name="nif" maxlength="9" /><br/>
    Função: <select name="funcao">
  				<option value="gerente">Gerente</option>
  				<option value="caixa">Caixa</option>
  				<option value="armazenista">Armazenista</option>
  				<option value="atendimento">Atendimento</option>
		</select><br/>
    Ordenado Base: <input type="text" name="ordenado_base" maxlength="10" /><br/>
    Regalias: <input type="text" name="regalias" maxlength="10" /><br/>
    Sexo: <select name="sexo">
    			<option value="M">Masculino</option>
                <option value="F">Feminino</option>
          </select><br/>
    Horário: <input type="text" name="horario" maxlength="30" /><br/>
    Data Início: <input type="text" name="data_inicio" maxlength="10" size="10" /><br/>
    Data Fim: <input type="text" name="data_fim" maxlength="10" size="10" /><br/><br/>
    <input type="submit" value="Criar Funcionário" name="cria_func" />
    
</form>

<?php
$cod_func = $_POST['cod_func'];
$nome = $_POST['nome'];
$dn = $_POST['dn'];
$obs = $_POST['obs'];
$morada = $_POST['morada'];
$bi = $_POST['bi'];
$nif = $_POST['nif'];
$funcao = $_POST['funcao'];
$ordenado_base = $_POST['ordenado_base'];
$regalias = $_POST['regalias'];
$sexo = $_POST['sexo'];
$horario = $_POST['horario'];
$data_inicio = $_POST['data_inicio'];
$data_fim = $_POST['data_fim'];

$ligacao = mysql_connect("localhost", "root", "") or die("Não foi possível estabelecer a conexão.");
mysql_select_db("levis_strauss") or die("Não foi possível aceder à base de dados");
$query = "INSERT INTO funcionario VALUES ('$cod_func','$nome','$dn','$obs','$morada','$bi','$nif','$funcao','$ordenado_base','$regalias','$sexo','$horario','$data_inicio','$data_fim')";

if ($_POST['cod_func'] == null) 
{
	echo "O código é um campo obrigatório";
}
elseif (mysql_query($query, $ligacao))
{
	echo "Dados adicionados com sucesso";
}
else
{
	echo "Não foi possível adicionar o funcionário.";
}

mysql_close($ligacao);

?> 

</body>
</html>

O problema é que quando inicia a página pela primeira vez aparece o aviso:

Notice: Undefined index: cod_func in ...

Pelas pesquisas que já efectuei seria necessário colocar o isset antes das variáveis, mas quando faço o código não funciona, parece que as variáveis ficam sempre a null.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tu só queres actualizar a base de dados depois do utilizador introduzir os dados.

Não queres fazer o php na mesma altura em que mostras o formulário (vazio).

Como o método do teu form é POST, podes meter o php dentro de

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    /* código php para actualizar a base de dados */
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado pela rápida resposta.

Resultou na perfeição.

Mas estou com um outro problema do mesmo género. Dá-me o mesmo erro mas a situação é um pouco diferente.

    <?php
$menu = $_GET['menu'];

switch($menu)
{
case "home":
	include 'inicio.php';
break;
case "ins":
	include 'form_ins_func.php';
break;
case "pesq":
	include 'form_pesq_func.php';
break;
default:
	include 'inicio.php';
break;
}

?>

Não se sabe qual o valor da variável "menu".

Pelas minhas pesquisas vi que posso usar o seguinte código

error_reporting(E_ALL ^ E_NOTICE);

E esta mensagem não aparece mais mas gostava de corrigir mesmo o problema sem "remendos".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

   $menu = isset($_GET['menu']) ? $_GET['menu'] : 'none';

Como não tens um case "none", se o $_GET['menu'] não existir, o switch faz o default.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mais uma vez obrigado, funcionou na perfeição.

Percebi o que querias dizer em relação ao case não ter uma opção none.

Mas não percebi a forma como o código que escreveste traduz isso.

Qual o significado do "?" e do ": none" na expressão?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o "?:" é o operador ternário (ou lá como se diz): http://www.php.net/manual/en/language.operators.comparison.php

é o mesmo que um if / else, mas escrito duma forma mais compacta.

if ($mes == "Fev") {
  $dias = 28;
} else {
  if (in_array($mes, array("Abr", "Jun", "Set", "Nov"))) {
    $dias = 30;
  } else {
    $dias = 31;
  }
}

$dias = ($mes == "Fev") ? 28 : (in_array($mes, array("Abr", "Jun", "Set", "Nov")) ? 30 : 31);

Não testado. Aquele in_array pode ter erro de sintaxe.

Concretamente para a versão acima, o if / else seria:

/* $menu = isset($_GET['menu']) ? $_GET['menu'] : 'none'; */
if (isset($_GET['menu'])) {
  $menu = $_GET['menu'];
} else {
  $menu = 'none';
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, fiquei completamente esclarecido :)

Bom exemplo esse dos dias do mês.

Mais uma vez obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora