PHP - Variáveis não definidas ao abrir pagina. Como evitar?

4 respostas
M

Olá Pessoal!

As vezes, construo alguma coisa em php que, durante o uso todo tá certinho, redondo, contudo, quando a página carrega do zero, várias mensagens aparecem de variaveis não definidas. Tudo volta ao normal quando utilizo o select da pagina para filtrar os dados.

Como evitar estas mensagens? Já utilizei algumas alternativas mas que não ficaram boas.

Exemplo de mensagens:

Notice: Undefined index: idMaterial in C:\xampp\htdocs\sisagenda\contEstoque.php on line 79

Notice: Undefined variable: codprod in C:\xampp\htdocs\sisagenda\contEstoque.php on line 100

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\sisagenda\contEstoque.php on line 102
Preencha os campos de busca.
Notice: Undefined index: idMaterial in C:\xampp\htdocs\sisagenda\contEstoque.php on line 129

Como disse: basta acionar o select e escolher uma opção que tudo funciona redondo. Tenho apenas que evitar que elas apareçam.

Código do problema:

    <?php
    include "conectame.php";

        $sql = "SELECT * FROM produtos WHERE tipo = 'P'";
        $rs = mysql_query($sql) or die(mysql_error());
    ?>
    
    
    Edição de Dados de Agendamento
    

    
     
    
    

Controle de Estoque


Escolha ... <?php while($row = mysql_fetch_array($rs)){ echo ("$row[codprod] - $row[nome]"); } echo ""; ?>

<?php if(isset($_POST['submit'])){ $sql = mysql_query("select * from produtos where codprod='".$_POST['idMaterial']."'") or die(mysql_error()); while($row = mysql_fetch_array($sql)){ $codprod = $row['codprod']; $emb = $row['Embalagem']; $nome = $row['nome']; $fab = $row['fabricante']; echo ""; echo""; echo ""; echo""; echo ""; echo""; } } echo "
Produto:"; echo $nome; echo"Embalagem:"; echo $emb; echo"Fabricante:"; echo $fab; echo"
"; echo""; echo "
"; ?>

Entradas

<?php $pesq = "SELECT * FROM entradas WHERE cod_prod = $codprod"; $sql = mysql_query($pesq); $numlinhas = mysql_num_rows($sql); if ($numlinhas > 0) { $totalentrada = 0 ?> <?php while($row = mysql_fetch_array($sql)){ $data=date("d/m/Y", strtotime($row['DATAMOV'])); $valor = 'R$ ' . number_format($row['VALOR'], 2,',','.'); $valorcli = 'R$ ' . number_format($row['VR_CLIENTE'], 2,',','.'); echo ""; echo""; echo""; echo""; echo""; echo""; echo""; echo""; echo ""; } } else { echo "Preencha os campos de busca."; } $sumqtde = mysql_query("SELECT SUM(QUANTENTRADA) FROM entradas where cod_prod='".$_POST['idMaterial']."'"); while($sum = mysql_fetch_array($sumqtde)){ $somaentradas = number_format($sum['SUM(QUANTENTRADA)'], 0,',','.'); } ?>
Data QuantEntr Destino Cod_Est Valor Vr_Cliente Fornecedor
$data$row[QUANTENTRADA]$row[DESTINO]$row[COD_EST]$valor$valorcli$row[FORNECEDOR]

Saídas

<?php $pesq = "SELECT * FROM saidas WHERE cod_prod = $codprod"; $sql = mysql_query($pesq); $numlinhas = mysql_num_rows($sql); if ($numlinhas > 0) { ?> <?php while($row = mysql_fetch_array($sql)){ $data=date("d/m/Y", strtotime($row['DATAMOV'])); echo ""; echo""; echo""; echo""; echo""; echo ""; } } else { echo "Preencha os campos de busca."; } $sumsaida = mysql_query("SELECT SUM(QUANTSAIDA) FROM saidas where cod_prod='".$_POST['idMaterial']."'"); while($sum = mysql_fetch_array($sumsaida)){ // $soma = 'R$ ' . number_format($sum['SUM(QUANTSAIDA)'], 2,',','.'); $somasaidas = number_format($sum['SUM(QUANTSAIDA)'], 0,',','.'); } ?>
Data Quant.Saida Destino Cod_Est
$data$row[QUANTSAIDA]$row[DESTINO]$row[COD_EST]

<?php echo ""; echo ""; echo ""; echo "
Total de entradas: ".($somaentradas)."Total de saídas: ".($somasaidas)."
"; echo "Total de estoque atual de ".$nome.": ".($somaentradas - $somasaidas); ?>

Nota: a indentação não ficou das melhores. Ainda vou me acostumar com este editor.

4 Respostas

N

Boa tarde Messias,

Analisando seus fontes, tem bastante pontos de melhorias que serão necessários.

Da uma estudada no padrão MVC e também eu sugiro você utilizar a framework CodeIgniter para PHP, ela é muito produtiva e fácil.

Outro ponto é a segurança do Site, você precisa tratar as
variáveis do POST, contra os ataques XSS e SQL injection, utilizando as funções
de PHP strip_tags, addslashes, htmlspecialchars e outras tratativas.

R

Você poderia utilizar PDO, ao invés de mysqli… Seu site esta muito vulnerável a SQL Injection

M

Valeu Vinicius.
Vou observar com cuidado sua sugestão.

Obrigado.

M

Valeu ninja.

Vou dar uma olhada e ver o que posso fazer para prevenir invasões.

Obrigado!

Criado 5 de fevereiro de 2016
Ultima resposta 7 de fev. de 2016
Respostas 4
Participantes 3