Ir para conteúdo

Arquivado

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

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?

Compartilhar este post


Link para o post
Compartilhar em outros 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:

Compartilhar este post


Link para o post
Compartilhar em outros 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");
    }

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa. Estão sendo exibidos sim, assim:

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

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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"
...

}
}

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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%

Compartilhar este post


Link para o post
Compartilhar em outros 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

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.