Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Fox Hz

[Resolvido] Notice: Undefined Variable

Recommended Posts

Olá pessoal,

 

Estou com uma dúvida simples, mas está causando uma dor de cabeça.

 

Estou desenvolvendo um sistema básico usando como base o PHP. Até ai tudo bem, ele funciona normalmente. Porém mesmo funcionado de acordo com a programação ele emite o erro "Notice: Undefined Variable". Sei que o erro deve-se a setar uma variável vazia antes de ser utilizada, mas vejamos o exemplo:

 

<?php 
	session_start();
$_SESSION['categoria']=$_POST['categoria'];
$_SESSION['veiculo']=$_POST['veiculo'];		
$_SESSION['airbag']=$_POST['airbag'];
$_SESSION['arcondicionado']=$_POST['ar'];
$_SESSION['freios']=$_POST['freios'];
$_SESSION['trioeletrico']=$_POST['trio'];
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>
<head>
		<title>.:: Bem Vindo ao Pegasus Rent a Car - Adicionais ::.</title>
</head>
<body>
<center>
		<table border='1'>
						<form action="detalhecarro.php" method="POST">
						<tr>
						<td>Air Bag</td>
						<td><input type="checkbox" name="airbag"></td>
						</tr>
						<tr>
						<td>Ar Condicionado</td>
						<td><input type="checkbox" name="ar"></td>
						</tr>
						<tr>
						<td>Freios ABS</td>
						<td><input type="checkbox" name="freios"></td>
						</tr>
						<tr>
						<td>Trio Elétrico</td>
						<td><input type="checkbox" name="trio"></td>
						</tr>
						<tr>
						<td><center><input type="submit" value="Confirmar"></td>
						<td><center><input type="reset" value="Limpar"></td>
						</tr>
						</form>
		</table>
</body>
</html>			

 

Os erros estão entre as sessões, que, como foi dito, o PHP emite a mensagem pelo fato da variável estar vazia. Porém o cliente ainda não especificou tal informação até o momento, tanto que se dermos procedimento até o final tudo funciona normalmente. A questão é: está fora está correta? posso deixar o Notice sem algum problema? Como resolver?

 

Agradeço desde já obrigado,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isto acontece porque você está definindo um valor que não existe a variavel.

Você pode resolver de duas forams, ocultando os erros E_NOTICE:

ini_set('error_reporting', E_ALL^E_NOTICE);

 

Ou então, verificar se a variavel já está presente, o que é o recomendado:

if(isset($_POST['categoria']){
  $_SESSION['categoria'] = $_POST['categoria']
}

 

uma forma mais prática seria:

foreach($_POST as $chave => $valor){
 if(isset($_POST[$chave]){
   $_SESSION[$chave] = $valor
 }
}

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma outra forma, seria adicionar um hidden field no form, assim só criaria as sessions após o envio do form OU usar um if($_POST), abaixo como ficaria...

 

<?php 
session_start();

if(isset($_POST['go']) == 1) {
$_SESSION['categoria']=$_POST['categoria'];
$_SESSION['veiculo']=$_POST['veiculo'];         
$_SESSION['airbag']=$_POST['airbag'];
$_SESSION['arcondicionado']=$_POST['ar'];
$_SESSION['freios']=$_POST['freios'];
$_SESSION['trioeletrico']=$_POST['trio'];
}
?>
<form action="detalhecarro.php" method="POST">
<input type="hidden" name="go" value="1" />
</form>

 

<?php 
session_start();

if($_POST) {
$_SESSION['categoria']=$_POST['categoria'];
$_SESSION['veiculo']=$_POST['veiculo'];         
$_SESSION['airbag']=$_POST['airbag'];
$_SESSION['arcondicionado']=$_POST['ar'];
$_SESSION['freios']=$_POST['freios'];
$_SESSION['trioeletrico']=$_POST['trio'];
}
?>

 

Dependendo do que tu for usar, basta apenas o foreach que o JCMAIS citou acima, mas lembre-se de inserir um if($_POST) antes dele, caso contrario ele carrega de primeira o foreach :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php 
session_start();

if($_POST) {
$_SESSION['categoria']=$_POST['categoria'];
$_SESSION['veiculo']=$_POST['veiculo']; 		
$_SESSION['airbag']=$_POST['airbag'];
$_SESSION['arcondicionado']=$_POST['ar'];
$_SESSION['freios']=$_POST['freios'];
$_SESSION['trioeletrico']=$_POST['trio'];
}
?>

 

Dependendo do que tu for usar, basta apenas o foreach que o JCMAIS citou acima, mas lembre-se de inserir um if($_POST) antes dele, caso contrario ele carrega de primeira o foreach :thumbsup:

 

 

pode usar tambem

if (!empty($_POST)){	
  	$_SESSION['categoria']=$_POST['categoria'];
  	$_SESSION['veiculo']=$_POST['veiculo']; 		
  	$_SESSION['airbag']=$_POST['airbag'];
  	$_SESSION['arcondicionado']=$_POST['ar'];
  	$_SESSION['freios']=$_POST['freios'];
  	$_SESSION['trioeletrico']=$_POST['trio'];
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

Usei como base o exemplo do nosso colega abaixo:

 

<?php 
session_start();

if(isset($_POST['go']) == 1) {
$_SESSION['categoria']=$_POST['categoria'];
$_SESSION['veiculo']=$_POST['veiculo'];         
$_SESSION['airbag']=$_POST['airbag'];
$_SESSION['arcondicionado']=$_POST['ar'];
$_SESSION['freios']=$_POST['freios'];
$_SESSION['trioeletrico']=$_POST['trio'];
}
?>
<form action="detalhecarro.php" method="POST">
<input type="hidden" name="go" value="1" />
</form>

 

Até então resolveu o erro das variáveis vazias que apresentavam o erro do "Undefined Variable". Porém, a ultima parte do procedimento, seria onde ele puxava todos os dados do cliente via $SESSION, e agora não está puxando devido ao código para corrigir "Undefined Variable". Estou tentando resolver, segue abaixo:

 

<?php
	session_start();
$_SESSION['nome']=$_POST['nome'];
$_SESSION['cpf']=$_POST['cpf'];
$_SESSION['rg']=$_POST['rg'];
$_SESSION['telefone']=$_POST['telefone'];
$_SESSION['celular']=$_POST['celular'];
$_SESSION['email']=$_POST['email'];
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>
<head>
		<title>.:: Bem Vindo ao Pegasus Rent a Car - Confirmar ::.</title>
</head>
<body>
<center>
<?php
$localretirada=$_SESSION['localretirada'];
$localdevolucao=$_SESSION['localdevolucao'];
$dataretirada=$_SESSION['dataretirada'];
$horario1=$_SESSION['horario1'];
$datadevolucao=$_SESSION['datadevolucao'];
$horario2=$_SESSION['horario2'];
$categoria=$_SESSION['categoria'];
$veiculo=$_SESSION['veiculo'];
$airbag=$_SESSION['airbag'];
$arcondicionado=$_SESSION['arcondicionado'];
$freios=$_SESSION['freios'];
$trio=$_SESSION['trioeletrico'];
$airbag=$_SESSION['airbag'];
$arcondicionado=$_SESSION['arcondicionado'];
$freios=$_SESSION['freios'];
$trioeletrico=$_SESSION['trioeletrico'];
$basica=$_SESSION['basica'];
$basicap=$_SESSION['basicap'];
$premium=$_SESSION['premium'];
$premiump=$_SESSION['premiump'];
$abebes=$_SESSION['abebes'];
$acrianca=$_SESSION['acrianca'];
$condutor=$_SESSION['condutor'];
$gps=$_SESSION['gps'];
$avista=$_SESSION['avista'];
$cartao=$_SESSION['cartao'];
$boleto=$_SESSION['boleto'];
$nome=$_SESSION['nome'];
$cpf=$_SESSION['cpf'];
$rg=$_SESSION['rg'];
$telefone=$_SESSION['telefone'];
$celular=$_SESSION['celular'];
$email=$_SESSION['email'];

echo	"<table border='1'>
						<form action='dadosretirada5.php' method='POST'>
						<tr>
						<td>Local de Retirada</td>
						<td>$localretirada</td>
						</tr>
						<tr>
						<td>Data</td>
						<td>$dataretirada</td>
						</tr>
						<tr>
						<td>Horário</td>
						<td>$horario1</td>
						</tr>
						<tr>
						<td>Local de Entrega</td>
						<td>$localdevolucao</td>
						</tr>
						<tr>
						<td>Data</td>
						<td>$dataretirada</td>
						</tr>
						<tr>
						<td>Horário</td>
						<td>$horario2</td>
						</tr>
						<tr>
						<td>Veículo</td>
						<td>$veiculo</td>
						</tr>
						<tr>
						<td>Detalhes</td>
						<td>Airbag: $airbag<br>Ar Condicionado: $arcondicionado<br> Freios ABS: $freios<br> Trio Elétrico: $trio</td>
						</tr>
						<tr>
						<td>Proteção</td>
						<td>[Dados dos Proteção]</td>
						</tr>
						<tr>
						<td>Acessórios</td>
						<td>Assento para Bebes: $abebes<br> Assento para Crianças: $acrianca<br> Condutor Adicional: $condutor<br> Navergador GPS: $gps<br></td>
						</tr>
						<tr>
						<td>Pagamento</td>
						<td>$avista</td>
						</tr>
						<tr>
						<td>Termos de Contrato</td>
						<td><input type='checkbox' name='termos'></td>
						</tr>
						<tr>
						<td><center><input type='submit' value='Confirmar'></td>
						</tr>
		</table>"
?>		
</body>
</html>

 

Acho que tem muita coisa ai que não era para nem existir, hehe. Podem me auxiliar com isso por favor?

 

Desde já sou grato a todos que estão me ajudando, muito obrigado.

 

Até,

Compartilhar este post


Link para o post
Compartilhar em outros sites

$localretirada=$_SESSION['localretirada'];
$localdevolucao=$_SESSION['localdevolucao'];
$dataretirada=$_SESSION['dataretirada'];
$horario1=$_SESSION['horario1'];
$datadevolucao=$_SESSION['datadevolucao'];
$horario2=$_SESSION['horario2'];
$categoria=$_SESSION['categoria'];
$veiculo=$_SESSION['veiculo'];
$airbag=$_SESSION['airbag'];
$arcondicionado=$_SESSION['arcondicionado'];
$freios=$_SESSION['freios'];
$trio=$_SESSION['trioeletrico'];
$airbag=$_SESSION['airbag'];
$arcondicionado=$_SESSION['arcondicionado'];
$freios=$_SESSION['freios'];
$trioeletrico=$_SESSION['trioeletrico'];
$basica=$_SESSION['basica'];
$basicap=$_SESSION['basicap'];
$premium=$_SESSION['premium'];
$premiump=$_SESSION['premiump'];
$abebes=$_SESSION['abebes'];
$acrianca=$_SESSION['acrianca'];
$condutor=$_SESSION['condutor'];
$gps=$_SESSION['gps'];
$avista=$_SESSION['avista'];
$cartao=$_SESSION['cartao'];
$boleto=$_SESSION['boleto'];
$nome=$_SESSION['nome'];
$cpf=$_SESSION['cpf'];
$rg=$_SESSION['rg'];
$telefone=$_SESSION['telefone'];
$celular=$_SESSION['celular'];
$email=$_SESSION['email'];

 

Tudo isso ai você pode trocar por apenas esta linha utilizando o conceito de variaveis variaveis

 

foreach ($_SESSION as $key => $value){$$key = $value;}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tudo isso ai você pode trocar por apenas esta linha utilizando o conceito de variaveis variaveis

 

foreach ($_SESSION as $key => $value){$$key = $value;}

Posso substituir todas essas sessões com esta linha de comando? Ok, vou tentar aqui colega.

 

Obrigado,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tudo isso ai você pode trocar por apenas esta linha utilizando o conceito de variaveis variaveis

 

foreach ($_SESSION as $key => $value){$key = $value;} 

Posso substituir todas essas sessões com esta linha de comando? Ok, vou tentar aqui colega.

 

Obrigado,

 

Inclusive os posts voce pode capturar e jogar na session do mesmo jeito

foreach ($_POST as $key => $value){$_SESSION[$key] = $value;} 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Kra você adicionou este campo no formulário ?!

 

<input type="hidden" name="go" value="1" />

 

Só para pegar os dados do formulario e gravar na session?

 

é mais facil verificar se chegou os posts e converter tudo...

 

if (!empty($_POST)){ 
foreach ($_POST as $key => $value){$_SESSION[$key] = $value;} 
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

+ desta forma ele fica restrito há criar o nome da session igual ao nome do campo/var

 

:thumbsup:

 

Mais é isso que ele quer não?

 

Veja o primeiro post

 

Olá pessoal,

 

Estou com uma dúvida simples, mas está causando uma dor de cabeça.

 

Estou desenvolvendo um sistema básico usando como base o PHP. Até ai tudo bem, ele funciona normalmente. Porém mesmo funcionado de acordo com a programação ele emite o erro "Notice: Undefined Variable". Sei que o erro deve-se a setar uma variável vazia antes de ser utilizada, mas vejamos o exemplo:

 

<?php 
	session_start();
$_SESSION['categoria']=$_POST['categoria'];
$_SESSION['veiculo']=$_POST['veiculo'];		
$_SESSION['airbag']=$_POST['airbag'];
$_SESSION['arcondicionado']=$_POST['ar'];
$_SESSION['freios']=$_POST['freios'];
$_SESSION['trioeletrico']=$_POST['trio'];
?>

 

 

 

E ainda vai ser bem melhor para poder se organizar... imagina o post com um nome e a session com outro e tals... o que ele pode fazer tambme é adicionar prefixo...

 

if (!empty($_POST)){ 
foreach ($_POST as $key => $value){$_SESSION['PrefixoQualquer_' . $key] = $value;} 
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal,

 

Então, eu segui as dicas de todos mas o problema ainda continua. Alegando que a variável se encontra vazia, e quando você preenche o campo o erro não aparece. Bom, talvez esteja fazendo algo errado, não tenho certeza. Peço que por favor, expliquem de uma forma simples, sem muitos termos técnicos, já que não sou tão bom quanto vocês. Agradeço a participação de cada um, muito obrigado.

 

Até,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Adiciona isto no começo do código:

 

<?php
session_start();
//Verifica se existe as variaveis $_POST
if($_POST) {
  $_SESSION['nome']=$_POST['nome'];
  $_SESSION['cpf']=$_POST['cpf'];
  $_SESSION['rg']=$_POST['rg'];
  $_SESSION['telefone']=$_POST['telefone'];
  $_SESSION['celular']=$_POST['celular'];
  $_SESSION['email']=$_POST['email'];
}
?>
//Restante do teu código

 

Depois que você fazer isto, faça o teste e cole o erro do notice inteiro a linha indica no erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui estão os erros colega:

 

Notice: Undefined index: nome in C:\wamp\www\detalhes.php on line 15

 

Notice: Undefined index: cpf in C:\wamp\www\detalhes.php on line 16

 

Notice: Undefined index: rg in C:\wamp\www\detalhes.php on line 17

 

Notice: Undefined index: telefone in C:\wamp\www\detalhes.php on line 18

 

Notice: Undefined index: celular in C:\wamp\www\detalhes.php on line 19

 

Notice: Undefined index: email in C:\wamp\www\detalhes.php on line 20

 

Se houvesse os campos preenchidos para mandar os dados a SESSION eles não dariam erro. Pois é isto que pretendo fazer, quando o usuário não preencher um dado, ele não apresentar como variável vazia, sendo que alguns dados são opcionais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se o cliente não preencher o campo ou chechbox, quero que não apareça o erro de "Notice: Undefined Variable" apenas isso. Algo simples, que não dou jeito. :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso então você teria que validar os dados antes de criar as sessions

 

if($_POST) {
 // Faça para todos os campos p/ você entender como vai funcionar
 if($_POST['valor'] != "") {
    $_SESSION['valor'] = $_POST['valor'];
 }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como posso fazer a validação se não há variáveis além das $SESSION's?

 

No caso, teria que criar outra variável especifica para o campo?

 

$usuario=$_POST['usuario'] -> Desta forma?

 

Obrigado,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Kra, você recebe esse valor como ? Não é atraves do $_POST ?!

 

Explica o passo-a-passo do funcionamento disso, pq $_POST['usuario'] é a variavel referente ao valor do campo do formulario USUARIO, se não estiver nada digitado neste campo qnd você clicar em ENVIAR nao vai entrar nenhum valor na session mesmo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.