Jump to content


Photo

Variável Indefinida (Notice)


  • Faça o login para participar
5 replies to this topic

#1 == MotoBoy ==

== MotoBoy ==

    12 Horas

  • Usuários
  • 133 posts
  • Sexo:Masculino
  • Localidade:Fortaleza (CE)

Posted 26/03/2011, 12:20

Olá Forum,

Bom, irei ser bem direto. Eu uso um formulário só, tanto para ações de Inclusões e Atualizações de registros. Quando o usuário está editando um determinado registro, eu envio um array com os dados devidos para população dos campos, no formato:

$rows = array(
    'nome' => 'Nome de alguém',
    'email' => 'E-mail de Alguém'
    ...
)

Então, nos meus campos de texto, eu faço:

<input type="text" value="<?php echo $obj->imprimirValor($rows['nome']) ?>"> />

No método $obj->imprimirValor($rows['nome']), eu apenas verifico se o argumento enviado é nulo ou vazio, para não mostrar o notice de Variável Indefinida.

Quanto estou atualizando registros funciona 100%, mas quando eu vou inserir um registro, esse array vai vazio, pois será feito um novo registro, portanto, não haverá nada dentro desse array, daí, os notices são disparados em todos os campos de entrada.

Minha dúvida é: Como faço para que esse tratamento seja feito no método imprimirValor($valor) ? Não quero mostrar nenhum notice e não vale usar o "@" para ocultar os erros.

Abraços a todos e desde já agradeço a atenção !

Edição feita por: == MotoBoy ==, 26/03/2011, 12:21.


#2 Lusigmas

Lusigmas

    Novato no fórum

  • Usuários
  • 17 posts
  • Sexo:Feminino
  • Localidade:São Paulo / SP

Posted 26/03/2011, 14:49

Olá MotoBoy,

você forneceu pouca informação, poste os códigos.

Abs.

#3 André Manoel

André Manoel

    Doutor

  • Usuários
  • 996 posts
  • Sexo:Masculino
  • Localidade:Brasilia

Posted 26/03/2011, 15:23

Bem... pelo que eu entendi ... esse $row é como se fosse uma linha da tabela certo?
Quando você está inserindo um dado esse $row vem com todos os campos vazios?
Ou esses campos não existem dentro do $row quando você está inserindo?

Bem... respondendo a essas duas perguntas fica mais fácil te ajudar.
Agora em relação a não exibir o notice de uma variável você pode fazer o seguinte...

Dentro do método imprimirValor você pode fazer o seguinte:
function imprimirValor(  $variavel = null ){

    if( !empty( $variavel ) ){
        echo $variavel;
    }else{
        echo "";
    }

}


Aí você evita o notice.
Iniciando na Ajuda On line...

Posted Image Meu post lhe ajudou? Reputar/votar é uma das formas de agradecer.

#4 == MotoBoy ==

== MotoBoy ==

    12 Horas

  • Usuários
  • 133 posts
  • Sexo:Masculino
  • Localidade:Fortaleza (CE)

Posted 27/03/2011, 13:02

Olá Senhores, primeiramente muito obrigado pela atenção, irei passar agora todas as informações ok ?

$row é realmente um linha da tabela especificada, e quando usuário está executando a ação de inserção, o mesmo vem como: $row = array();

O método imprimirValor está semelhante o que foi postado pelo amigo André Manoel, mas ainda sim o notice está sendo mostrado. Respondendo ao Lusigmas, realmente não tem tanto código para mostrar, pois o que realmente teria que mostrar é o método imprimirValor, que como falei, é semelhante ao que foi mostrado pelo André Manoel.

Eu acho que o problema, é porque quando chamo:

<?php echo $row['nome'] ?>

O ínidice 'nome' não existe, daí gera o notice. Mas tem como isso ser contornado ? Estou utilizando o Zend Framework, se algum de vós conhecer alguma função, helper para fazer tal façanha, fiquem a vontade em mostrar ok ?

Bom é isso, espero ter esclarecido minha dúvida mais ainda. Abraços a Todos !

Edição feita por: == MotoBoy ==, 27/03/2011, 13:03.


#5 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 27/03/2011, 13:56

Você não pode resolver esse problema dentro do método. Precisa fazer na chamada, o que é trabalhoso demais pra se fazer sempre.

$obj->imprimirValor(isset($rows['nome']) ? $rows['nome'] : '');

Outra opção é dividir os dados em dois parâmetros e ir pela idéia do André Manoel.

function imprimirValor($row, $campo){

if(isset($row[$campo])){
echo $row[$campo];
}else{
echo "";
}

}
...
$obj->imprimirValor($rows, 'nome');


#6 André Manoel

André Manoel

    Doutor

  • Usuários
  • 996 posts
  • Sexo:Masculino
  • Localidade:Brasilia

Posted 29/03/2011, 01:28

Cara você está usando Zend Framework?

Me mostre como você está querendo fazer esse insert... desde o controller até a view...

Trabalho a bastante tempo com o Zend Framework. Vou te mostrar uma coisa que vc vai ficar doido! Bom demais... mas antes coloque o código que vc está utilizando aí...
Iniciando na Ajuda On line...

Posted Image Meu post lhe ajudou? Reputar/votar é uma das formas de agradecer.




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq