Ir para conteúdo

Arquivado

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

Lukas Junior

Pegar Checkbox Unchecked com value="0"

Recommended Posts

Boa Noite ,

 

Bom preciso recuperar o valor dos checkbox nao marcados como "0" para fazer o update foreach ,

não posso colocar o type="hidden" com value"0" pois se o checkbox estiver marcado vai enviar o "0" e o "1" e assim nao ficara na mesma linha do id gerando erro no update segue codigo ;

	<?php
	$nomepaxhidden = $_POST['nomepaxhidden'];
	$ativo = $_POST['nomepaxservos'];
	
  	foreach ($nomepaxhidden as $key => $value) {
		$id = $value;
 		$value2 = $ativo[$key];
		mysql_query("UPDATE tbnomepaxservos SET ativo = '$value2' WHERE id_nomepax = '$id'");
	}
	
	var_dump($_POST['nomepaxhidden']);
	var_dump($_POST['nomepaxservos']);
  
 
   $id = $_GET['id'];

   $nomes1 = mysql_query("SELECT * FROM tbnomepax WHERE id_os = '$idos' ") ;
	while ($colnome = mysql_fetch_array($nomes1)){
	
   $nomes2 = mysql_query("SELECT * FROM tbnomepaxservos WHERE id_nomepax = '$colnome[id_nomepax]' and id_servos='$id'") ;
	while($colnome2 = mysql_fetch_array($nomes2)){
		$contar2 = mysql_num_rows($colnome2);
   
   ?>
   <input name="nomepaxservos[]" type="checkbox" value="1"<?php if ($colnome2['ativo'] == "1"){ echo "checked" ;}?>/>
   <input name="nomepaxhidden[]" type="hidden" value="<?php echo $colnome['id_nomepax']; ?>" />
   <?php echo $colnome['nome'];?>
   <?php }} ?>

Bom se eu pegar os checkbox unchecked como 0 já me resolve , desde já grato .

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então por isso eu preciso de pegar algum valor , eu acredito que tenha alguma forma com jquery ou javascript ou alguma outra forma , tipo se o checkbox nao for checked ele retorna value="0" .

Neste caso meu é uma O.S que contem nomes de pessoas com varios serviços , se nao O.S. possui 4 pessoas talvez em um serviço vai apenas 3 pessoas e preciso salvar apenas 3 das 4 pessoas .

Compartilhar este post


Link para o post
Compartilhar em outros sites

Precisei deste recurso esses dias. A única forma que resolvi foi usando um hidden sem value para forçar o PHP a receber o valor. Se o valor fizer vazio, é só tratar da forma que precisar. Veja:

<input type="checkbox" class="marcar pagina" name="permissoes[1][v]" checked = "checked" value="v" />
<input type="hidden" name="permissoes[1][hidden]" value="" />

E na hora de receber o valor:

$visualizar = isset( $perm_arr['v'] ) ? 1 : 0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda acho que não há toda essa necessidades, e se o valor 0 (false) deve ser enviado só para você "desativar" algum valor do banco, há um problema de lógica por ai.

 

No seu lugar, eu desativaria todos, e então só reativaria os enviados. Use transactions para não ter problemas com condições de corrida.

try {
    $pdo = new PDO(/** dados de conexão **/);
    
    /** Ativa o lançamento de exceptions para erros **/
    $pdo->setAttribute(PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION);
    
    /** inicia a transação **/
    $pdo->beginTransaction();
    
    /** desativa todos os items **/
    $pdo->exec('UPDATE tbnomepaxservos SET ativo = 0');
    
    /** ativa somente os selecionados **/
    $statement = $pdo->prepare('UPDATE tbnomepaxservos SET ativo = 1 WHERE id_nomepax = :id');
    foreach ($_POST['nomepaxservos'] as $id) {
        $statement->bindValue(':id' , $id, PDO::PARAM_INT);        
        $statement->execute();
    }
    
    $pdo->commit();
} catch (PDOException $exception) {
    $pdo->rollback();

    printf('Não foi possível realizar a operação: %s' , $exception);
}

Talvez dê até para otimizar a query, utilizando bindParam, mas nunca o fiz e não estou com tempo para testar aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Allex tentei seu método não consegui , Gabriel também não consegui pelo seu método .

Não adianta eu desativar todos e quando for dar o update tenho 3 linha de ID e 1 linha de valor ,

se tiver 3 linha no array tenho que passar 3 value e 3 ID pra que o update seja feito correto .

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mostre-nos o seu formulário, ainda acho que você está complicando demais as coisas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O checkbox é uma linha com o valor e uma com o ID dentro de while , so lembrando que o campo hidden sempre vai passar o ID e o value tambem sempre tem que passar para acompanhar a linha do ID.

   <input name="nomepaxservos[]" type="checkbox" value="1"<?php if ($colnome2['ativo'] == "1"){ echo "checked" ;}?>/>
   <input name="nomepaxhidden[]" type="hidden" value="<?php echo $colnome['id_nomepax']; ?>" />
   <?php echo $colnome['nome'];?>
   <?php }} ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

No meu modelo, o campo hidden não deve mais existir. Somente os checkbox. Insira o ID como valor checkbox:

<input name="nomepaxservos[]" type="checkbox" value="1"/>
<input name="nomepaxservos[]" type="checkbox" value="2"/>

Quando for pegar no PHP, utilize o ID exatamente como eu passei na minha estrutura:

foreach ($_POST['nomepaxservos'] as $id) {
   /** código **/
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gabriel deu certinho sua ideia , fico mais simples e funcionou !

segue o código que usei .

<?php 
$ativo = $_POST['nomepaxservos'];

// Desativo todos onde o id do serviço é igual $id
mysql_query("UPDATE tbnomepaxservos SET ativo = '0' WHERE id_servos='$id' ");

// Ativo onde o id_nomepax for igual ao value que peguei do checkbox
	foreach ($ativo as $id) {
		mysql_query("UPDATE tbnomepaxservos SET ativo = '1' WHERE id_nomepax = '$id'");
	}
?>

<?php 
   $id = $_GET['id'];

   $nomes1 = mysql_query("SELECT * FROM tbnomepax WHERE id_os = '$idos' ") ;
	while ($colnome = mysql_fetch_array($nomes1)){
	
   $nomes2 = mysql_query("SELECT * FROM tbnomepaxservos WHERE id_nomepax = '$colnome[id_nomepax]' and id_servos='$id'") ;
	while($colnome2 = mysql_fetch_array($nomes2)){
   
   ?>
   <input name="nomepaxservos[]" type="checkbox" value="<?php echo $colnome['id_nomepax']; ?>"<?php if ($colnome2['ativo'] == "1"){ echo "checked" ;}?>/> <?php echo $colnome['nome']?>
   <br />
   <?php }}?>

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.