Jump to content
Sign in to follow this  
dieef5

Atualizar banco de dados com campo vazio de formulário

Recommended Posts

Olá Amigos,

 

Tenho uma dúvida e precisava da ajuda dos amigos para me ajduar a resolver.

 

Tenho um código simples que lista meus produtos para atualizar os preços de 1x só de todos eles. Recebo os dados que vem do banco de dados no input para atualizar os valores normalmente.

<form name="update" method="post" action="<?php echo "$PHP_SELF?action=updateprices"; ?>">
Promoção Varejo: <input type="text" name="promo_varejo['.$row['produto_id'].']" value="'.$row["produto_valor_3"].'">
<button type="submit" class="save"><i class="fa fa-floppy-o"></i> Salvar</button>
</form>

Ele funciona corretamente se altero um valor por outro. EX: valor de 13,00 para 14,00 funciona. Porém, não atualiza o banco de dados se eu deixar o campo vazio.

 

Precisava que o banco de dados também fosse atualizado se eu deixar o campo vazio, porém não estou conseguindo fazer.

Alguém poderia me dar uma ajuda como posso fazer?

Share this post


Link to post
Share on other sites

$PHP_SELF? Qual versão do PHP está usando? Está com register_globals ativado? É uma bela brecha de segurança. Leia: http://php.net/manual/pt_BR/security.globals.php

Use $_SERVER['PHP_SELF']

 

Você não postou o trecho que faz as alterações no banco. Mostre como ele é feita e diga o que deve ser alterado no banco se o campo for vazio. Quer deixar um valor nulo no banco se o campo for deixado vazio? :unsure:

Share this post


Link to post
Share on other sites

Obrigado Beraldo alterei já.

 

O código que recebe o form é só esse:

if ($action == "updateprices") {
    foreach($_POST['promo_varejo'] as $id => $novo_varejo) {
        mysql_query("UPDATE products SET produto_valor_3=$novo_varejo WHERE products_id=$id");
    }

Share this post


Link to post
Share on other sites

Exiba as consultas dentro do loop, para ver se todas estão sendo executadas como você quer

 

 

foreach($_POST['promo_varejo'] as $id => $novo_varejo) {
        $sql = "UPDATE products SET produto_valor_3=$novo_varejo WHERE products_id=$id";
        var_dump($sql);
        mysql_query($sql);
    }

 

veja se as consultas para os campos vazios também são exibidos

 

 

PS: funções mysql_* estão obsoletas desde o PHP 5.5. Prefira usar MySQLi ou PDO. Veja mais aqui: http://www.ultimatephp.com.br/php-por-que-nao-utilizar-funcoes-mysql

Share this post


Link to post
Share on other sites

Opa. Estão sendo exibidos sim, assim:

string(58) "UPDATE products SET produto_valor_3= WHERE products_id=47"

Share this post


Link to post
Share on other sites

Ah, faltaram as aspas em $novo_varejo:

 

Faça assim:

 

$sql = "UPDATE products SET produto_valor_3='$novo_varejo' WHERE products_id=$id";

 

Veja se resolve.

 

Outra saída é fazer um if e passar NULL em vez de uma string vazia, caso $novo_varejo seja vazio. Pode testar com a função empty()

 

 

PS: seu código é vulnerável a SQL Injection. Não há filtragem dos dados informados

Share this post


Link to post
Share on other sites

Opa, obrigado pelo PS Beraldo, to ligado quanto a isso, sou designer mas gosto de programação então estou lendo e aprendendo apenas, o código eu uso apenas eu usarei somente na minha máquina, só p/ controle meu mesmo e para aproveitar e aprender php aos poucos quando sobra um tempinho.^^ mas depois ainda vou alterando o código :yes:

 

Colocando as Aspas todos os valores de todos os produtos que eu ainda não tinha mexido e estavam vazios foram atualizados para o valor de 0,00.. oO fazendo o if como vc falou ele também não alterou. Seria dessa forma? Se for não deu tb..

foreach($_POST['promo_varejo'] as $id => $promo_varejo) {
       
if (empty($_POST['promo_varejo'])){
$_POST['promo_varejo'] == "NULL"
...

}
}

Share this post


Link to post
Share on other sites

Você usou ==. Isso faz comparação, não atribuição. Faça assim:

 

 

foreach($_POST['promo_varejo'] as $id => $novo_varejo)
{
        $valor = empty( $novo_varejo ) ? "NULL" : "'" . $novo_varejo . "'";
        $sql = "UPDATE products SET produto_valor_3=$valor WHERE products_id=$id";
        var_dump($sql);
        mysql_query($sql);
    }

 

Veja se é esse o comportamento esperado

Share this post


Link to post
Share on other sites

é só voce dar uma olhada sobre conexões PDO que vai deixar seu sistema seguro por enquanto.

e usar funções para verificar caracteres etc.. assim fica bem seguro mas nada é 100%

Share this post


Link to post
Share on other sites

Agora deu certo Beraldo, muito obrigado pela ajuda. Como digo, nada melhor do que praticar para ir pegando a "malicia da coisa", rsrsrs

 

Obrigado pela dica Animes, vou estudar sobres PDO sim,

 

Abraço

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.