Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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 .
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 .
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
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(); $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.
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 .Mostre-nos o seu formulário, ainda acho que você está complicando demais as coisas.
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 }} ?>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 **/
}Entendi vou testar ...
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 }}?>
O input checkbox quando não marcado, nem vai pro POST.
O que você precisa fazer no action do formulário é verificar a existência dele.
Algo como:
$some_option = isset( $_POST['some_option'] );