Jump to content
paladino_php

Salvar apenas checkbox selecionados

Recommended Posts

Preciso de uma ajuda pq tá f***. A situação é a seguinte, preciso salvar os dados de vários produtos simultaneamente. Para isso estou usando um input dinâmico:

 

... <td align="middle"><input type="checkbox" name="marcar[]" /></td> ...

 

cada linha corresponde a mais outras três opções: como alterar preço, garantia e ativar/desativar.

Ai que está, estou tendo dificuldades para recuperar os valores que estão vindo como um array. A minha dúvida é, como eu faço para trabalhar com esses dados.

 

Aqui, por exemplo:

 

// Conta o total de checkbox marcados
$marcados = count($_POST['marcar']);

// Esse foreach, acho que está errado...
for($i = 0; $i <= $marcados; $i++) {
   foreach($marcados as $dados) {
       echo $dados;
   }
}

// Como escrevo isso de outra forma sem ser resumido? :D
$idProd   = count($_POST['idProd']) ? $_POST['idProd'] : array();
$precoPro = count($_POST['precoProd']) ? $_POST['precoProd'] : array();

 

n sei se fui bem claro, a questão é, não estou conseguindo assimilar essa bagaça!!!! Por favor, se algum de vocês puder tirar um tempo para me ajudar a entender melhor o funcionamento do array dentro desse contexto das checkbox dinâmicas, fico muitooo grato.

 

Vlw.

Edited by paladino_php

Share this post


Link to post
Share on other sites

o valor q ira para o $_POST['marcar'] serão somente os valores marcados.

 

foreach($_POST['marcar'] as $item){
  echo $item;
}

  • +1 1

Share this post


Link to post
Share on other sites

Quanto a parte do foreach tenta algo como

 



extract($_POST);
    foreach(array($marcar) as $n1); //$marcar refere-se ao checkbox enviado via post
                                   //se mudar o nome da erro
    for($i = 0; $i < count($n1); $i++) {
       echo $n1;
    } 


Edited by Marcos Xavier

Share this post


Link to post
Share on other sites

Bacana pessoal, mas dai eu quero fazer o seguinte: - Quero percorrer o array para saber quais produtos foram modificados -. Depois disso eu executo a query que irá salvar apenas os produtos que foram alterados e que estão com o checkbox marcados. Os que n estão marcados automaticamente ficam de fora das alterações.

 

Desde já obrigado pela ajuda.

Share this post


Link to post
Share on other sites

Você conseguiu resolver o problema anterior ?

 

Tipo, quando você marcar ou desmarcar, no ato do envio ele já faz isso, só vai enviar os marcados... ou entendi errado ?

Share this post


Link to post
Share on other sites

Você conseguiu resolver o problema anterior ?

 

Tipo, quando você marcar ou desmarcar, no ato do envio ele já faz isso, só vai enviar os marcados... ou entendi errado ?

 

Então @Alaerte Gabriel, mais ou menos. Pra ser sincero com você não compreendi muito bem. Tipo, além de recuperar a checkbox, eu recupero outros campos. Por exemplo: se eu selecionar apenas um checkbox, não preciso de um array, correto? O problema é quando seleciono mais de um, ai fica confuso hehehe.

 

Devo passar todos os valores pelo foreach?

 

Pra ficar melhor de visualizar:

 

Checkbox---------Nome do produto----------Garantia---------Preço

---[x]-----------Computadore Intel--------3 meses----------1.380,00 // Esse produto deverá se modificado ao clicar no botão de submit

---[x]-----------Notebook-----------------2 anos-----------1.250,00 // Esse produto deverá se modificado ao clicar no botão de submit

---[x]-----------Celular------------------6 meses----------499,00 // Esse produto deverá se modificado ao clicar no botão de submit

Share this post


Link to post
Share on other sites

Você pode pegar todos os dados só pelo FOR...

 

Vamos por partes então pra eu poder entender melhor... O que você quer é pegar o valor de todos os CHECK, caso eles sejam selecionados, tanto faz, um ou 2 ou 3 ou 4 serem selecionados e depois inserir esses valores correto ?

Share this post


Link to post
Share on other sites

Certo, entendi. Agora, você está querendo inserir esses dados, ou atualizar um registros que já foi inserido ?

 

de qualquer forma eu vou fazer um exemplo com check, e você da uma olhada.

Edited by Alaerte Gabriel

Share this post


Link to post
Share on other sites

Vejamos então como pegar os valores:

 

Bem simples só pra tu entender:

 

<form name="teste" id="teste" action="" method="post">
 <p>
   <input type="checkbox" name="marcar[]" id="marcar[]" value="entendi1" /> 
 Entendi o problema

 <input type="checkbox" name="marcar[]" id="marcar[]" value="entendi2" /> 
 Entendi o problema

 <input type="checkbox" name="marcar[]" id="marcar[]" value="entendi3" /> 
 Entendi o problema

 <input type="checkbox" name="marcar[]" id="marcar[]" value="entendi4" /> 
 Entendi o problema</p>
 <p>
 <input type="submit" name="ok" id="ok" value="enviar" />
 </p>
</form>
<?php 
if($_SERVER['REQUEST_METHOD'] == 'POST')
{

if(isset($_POST['marcar']))
{

print 'Campors marcados: <br />';
for($i=0; $i <= count($_POST['marcar']); $i++)
{
	print $_POST['marcar'][$i].'<br />';
}
}

}
?>

 

Me diga se você entendeu até aí...

Edited by Alaerte Gabriel

Share this post


Link to post
Share on other sites

Até aqui tá tranquilo. Por favor prossiga rs

Tinha me esquecido de colocar o value, agora já dá pra exibir o id dos produtos selecionados.

 

Eu estou tentando assim:

 

for($i = 0; $i <= count($marcados); $i++){
   $where    = "id_anuncio = ".$id_anuncio[$i]."";
   $qrUpdate = mysql_query("UPDATE anuncios SET garantia = ".$garantia[$i].", preco = ".$total.", ativo = ".$marcados[$i].", detalhes = ".$especific[$i].", subtitulo = ".$subtitulo[$i].", link_produto = ".$link_direto[$i]." WHERE ".$where."") or die(mysql_error());
   if($qrUpdate) echo '<script type="text/javascript">alert("Alterações salvas com sucesso");</script>';
}

 

tá retornando erro de MySQL o id_anuncio está sendo enviado como array. Porque? Nas outras variáveis consigo dar um print, nessa retorna 'Array'

Edited by paladino_php

Share this post


Link to post
Share on other sites

Certo... então, já que você está modificando os dados de um só registro, você não precisa disso:

 

$where    = "id_anuncio = ".$id_anuncio[$i]."";

 

deixe:

 

$where    = "id_anuncio = ".$id_anuncio."";

Share this post


Link to post
Share on other sites

Automaticamente ao enviar os dados para o PHP, somente vai ser enviado o que foi marcado.

Mas caso seja selecionado somente um checkbox, no PHP você pode verificar se é um array aquela variável POST.

 

No HTML principalmente os campos devem ter a propriedade NAME com colchetes[], como está no seu código mesmo:

name="marcar[]".

 

No PHP poderá fazer assim:

 

$vars = $_POST['marcar'];

if(is_array($vars))
{
  $arr = implode(',', $vars); # Essa função resgata os valores e os coloca entre vírulas. "1, 4, 6, 8"
}
else
{
  $arr = $vars; # Um valor só.
}

Share this post


Link to post
Share on other sites

Também estou com um problema que não consigo resolver no meu trabalho da faculdade. Gostaria de uma ajuda.

Preciso enviar várias checkbox para um banco de dados. O problema é o seguinte:

Tenho que enviar cada checkbox para uma coluna no banco de dados de mesmo nome que ela. Se eu selecionar o checkbox SOM ele tem que aparecer como marcado na coluna SOM. Este é o código que fiz até agora:

 

//FORMULÁRIO

<input type="checkbox" name="opcionais[]" value="direcao-hidraulica" id="direcao">direção hidraulica<br>
<input type="checkbox" name="opcionais[]" value="ar" id="ar">ar-condicionado<br>
<input type="checkbox" name="opcionais[]" value="air-bag" id="air">air bag<br>
<input type="checkbox" name="opcionais[]" value="alarme" id="alarme">alarme<br>
<input type="checkbox" name="opcionais[]" value="banco de couro" id="banco">banco de couro<br>
<input type="checkbox" name="opcionais[]" value="som" id="som">som<br>
<input type="checkbox" name="opcionais[]" value="travas" id="travas">travas<br>
<input type="checkbox" name="opcionais[]" value="piloto automático" id="piloto">piloto automático<br>
<input type="checkbox" name="opcionais[]" value=" " id="outros">outro opcional:<br>
<input type="text" name="outro" size="30" maxlength="30"> </td>
// VALIDAÇÃO EM PHP
<?php
function conexao(){
$banco = 'locadoraveiculos' ;
$usuario = 'root' ;
$senha = '' ;
$host = 'localhost' ;
$con = mysql_connect($host,$usuario,$senha) or die ('Erro na rotina de conexão: '.mysql_error());
mysql_select_db($banco) or die ('Erro na rotina de seleção: '.mysql_error());
mysql_query("SET NAMES 'UTF8'");
mysql_query("SET character_set_connection 'UTF8'");
mysql_query("SET character_set_client 'UTF8'");
mysql_query("SET character_set_results 'UTF8'");
}
function inserir($sql){
if (mysql_query($sql)){
return true;}
else
{return false;}
}
if (isset($_POST['cadastrar'])){
$marca = $_POST['marca'];
$modelo = $_POST['modelo'];
$ano = $_POST['ano'];
$opcionais = $_POST['opcionais'];
if(isset($_POST['opcionais'])){
foreach($_POST['opcionais'] as $key => $value){
$opcionais = $value. ",";
}
}
$outro = $_POST['outro'];
$sql_inserir = "INSERT INTO veiculos (marca,modelo,ano,opcionais,outro) VALUES ('$marca','$modelo','$ano','$opcionais','$outro')";
conexao();
if(inserir($sql_inserir)){
echo ('inserido com sucesso, ID do registro:'.MYSQL_INSERT_ID());
unset ($_POST['cadastrar']);
} else {
echo('erro na rotina de inserção: '.mysql_error());
}
}
?>
</BODY>
</HTML>

 

// BANCO DE DADOS CRIADO

 

CREATE TABLE veiculo (

codigo INT NOT NULL AUTO_INCREMENT,

marca VARCHAR(45) NULL,

modelo VARCHAR(45) NULL,

ano INT NULL,

direcao VARCHAR(1) NULL,

ar_condicionado VARCHAR(1) NULL,

air_bag VARCHAR(1) NULL,

alarme VARCHAR(1) NULL,

banco_couro VARCHAR(1) NULL,

som VARCHAR(1) NULL,

travas VARCHAR(1) NULL,

piloto_automatico VARCHAR(1) NULL,

outro VARCHAR(45) NULL,

PRIMARY KEY (codigo));

ALGUÉM PODE ME AJUDAR, POR FAVOR?

ATT

Share this post


Link to post
Share on other sites

Concatena $opcionais dentro do foreach

if (isset($_POST['cadastrar'])){       $marca      = $_POST['marca'];
       $modelo     = $_POST['modelo'];
       $ano        = $_POST['ano'];
       $opcionais  = "";//modifiquei aqui
         if(isset($_POST['opcionais'])){
foreach($_POST['opcionais'] as $key => $value){
     $opcionais .= $value. ",";//modifiquei aqui
}

   }

Share this post


Link to post
Share on other sites

eu tava vendo aqui e consegui resolver da seguinte forma

<input type="checkbox"  name="servico[]" value="valor que vai ser enviado na array">

em name você coloca o nome que vai ser levado como

$_POST

e coloca

[]

como no exemplo acima dessa forma o serviço ou o nome que você desejar vai se tornar array

após isso na pagina de verificação faça o seguinte:

$selecao = '';
foreach ($_POST['servico'] as $servico) { 
  if ($selecao === '') {    
    $selecao = $servico;  
  } else {    
    $selecao = $selecao . ' - ' . $servico; 
  }
}

eu coloquei ' - ' para separar os itens para não ficarem "grudados"

 

agora quando você for fazer o INSERT use a variável $selecao  que vai dar certo lembrando de usar 

if (isset($_POST['servico'])){ 

}

completo fica assim:

  if((isset($_POST["servico"]))){

$selecao = '';

foreach ($_POST['servico'] as $servico) { 
  if ($selecao === '') {    
    $selecao = $servico;  
  } else {    
    $selecao = $selecao . ' - ' . $servico; 
  }
}

 

Share this post


Link to post
Share on other sites
Em 28/02/2018 at 19:04, Alaerte Gabriel disse:

Bacana seu interesse em ajudar; entretanto evite ressuscitar tópicos antigos como este que é de 2012.

desculpe sou novo, mais é que eu estava procurando sobre esse problema e achei coisas aqui mesmo sendo antigo as pessoas passam, de qualquer forma foi mal

Share this post


Link to post
Share on other sites
Em 27/02/2018 at 15:15, Samuel Almeida disse:

eu tava vendo aqui e consegui resolver da seguinte forma


<input type="checkbox"  name="servico[]" value="valor que vai ser enviado na array">

em name você coloca o nome que vai ser levado como


$_POST

e coloca


[]

como no exemplo acima dessa forma o serviço ou o nome que você desejar vai se tornar array

após isso na pagina de verificação faça o seguinte:


$selecao = '';
foreach ($_POST['servico'] as $servico) { 
  if ($selecao === '') {    
    $selecao = $servico;  
  } else {    
    $selecao = $selecao . ' - ' . $servico; 
  }
}

eu coloquei ' - ' para separar os itens para não ficarem "grudados"

 

agora quando você for fazer o INSERT use a variável $selecao  que vai dar certo lembrando de usar 


if (isset($_POST['servico'])){ 

}

completo fica assim:


  if((isset($_POST["servico"]))){

$selecao = '';

foreach ($_POST['servico'] as $servico) { 
  if ($selecao === '') {    
    $selecao = $servico;  
  } else {    
    $selecao = $selecao . ' - ' . $servico; 
  }
}

Muito Obrigado por compartilhar sua solução Samuel Almeida, estava passando pela mesma dificuldade e me ajudou muito! :)

 

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

×

Important Information

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