Jump to content
Sign in to follow this  
Furriel

Notice: Undefined index

Recommended Posts

Furriel

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.

Share this post


Link to post
Share on other sites
pmg

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 */
}


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Furriel

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

Share this post


Link to post
Share on other sites
pmg

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


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Furriel

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?

Share this post


Link to post
Share on other sites
pmg

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


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.