• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Gonçalo_ssb

Multiple Combobox

6 mensagens neste tópico

Pessoal já tinha aqui colocado um tópico, mas como estava um pouco mal elaborado vou voltar aqui a colocar um melhor elaborado.

Eu fiz um sistema de cotas, que permitia gerir as cotas pagas durante o ano, através de várias checkbox uma para cada mês do ano. Até aqui tudo bem eu consigo ler da bd e escrever a partir da bd, mas durante este processo surge um problema, é que eu tenho um botão de refresh que permite actualizar os pagamentos caso o socio tenha pago um mes. Se eu colocar um pisco na checkbox e carregar no botao tudo bem, agora caso nao tenha colocado nenhum pisco nas ceckbox e carregar no botão ele dá erro.

Aqui vai um pedaço de código que reflecte o meu problema.

<html>
<head>
</head>
    <body>
   <form action="" method="post">
      <input type="checkbox" name="checkbox[]" value="a">
      <input type="checkbox" name="checkbox[]" value="b">
      <input type="checkbox" name="checkbox[]" value="c">
     <input type="checkbox" name="checkbox[]" value="d">
     <br>
     <br>
     <input type="submit" name="Submit" value="Submit">
  </form>
  <?
       if(isset($_POST['Submit']))
       {
            for ($i=0; $i<count($_POST['checkbox']);$i++) 
		{
			echo "<br />value $i = ".$_POST['checkbox'][$i];
            }
       }
   ?>
   </body>
</html>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
caso nao tenha colocado nenhum pisco nas ceckbox e carregar no botão ele dá erro.

Qual erro? Se soubermos o erro é mais fácil resolver o "problema".

É mesmo um erro? Ou é um warning?

Nos meus testes não dá erro nenhum ;)

Mas experimenta isto:

Se não seleccionares nenhuma checkbox, não existe $_POST['checkbox''].

Antes de fazeres o count, verifica se existe.

/* ... */
       if(isset($_POST['Submit']))
       {
            $k = isset($_POST['checkbox']) ? count($_POST['checkbox']) : 0; 
            for ($i=0; $i<$k; $i++) 
            {
                   echo "<br />value $i = ".$_POST['checkbox'][$i];
            }
       }
/* ... */

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Afinal não ficou resolvido. Vou postar o código real.

Declaração:

//define um array que contém todos os meses
$meses = array("Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro");

Form

.....
<form action='socio_cotas.php?socio=<? echo"$num_socio"; ?>&ano=<? echo "$ano_actual" ?>' method='post' name='registo_cotas' id='registo_cotas'>
<td align='left' style='padding-top:2px;'>
<input id='pagamento' name='check[$j]' type='checkbox' $value $bloqueado><span class='texto'>   $meses[$j]
</td>
<input name='refresh' id='refresh' type='submit' value='Actualizar' class='btn_login' <? echo "$bloqueado"; ?>>
</form>
.....

Código que efectua a ação do botão refresh

<? if(isset($_POST['refresh']))
  	 { 
  	       $v=11;
		   foreach ($_POST['check'] as $k=>$v) 
		   {	 				 
			 $SqlInsert = "INSERT INTO `ano_meses` 
			 						 ( `id_socio` ,
									   `id_associacao` ,
									   `nome_ano`,
									   `nome_mes`,
									   `pagamento`,
									   `valor_pago`) 
			                            VALUES ('$num_socio',
										        '1',
											    '$ano_actual',
												'$meses[$k]',
												'1',
												'');";

		   		mysql_query($SqlInsert) or die ("Não foi possivél inserir"); 

			 	$k++;
		   }
     }
  ?>

O value das checkbox esta a ser lido e preenchido através da base de dados. O problema esta quando nao selecciono nada nas checkbox e carrego no botão de refreh, ou seja deveria existir uma condição que NAO SEI QUAL que me verifica-se se tenho alguma checkbox alterada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
for ($k=0; $k<12; $k++) {
  if (isset($_POST['check'][$k])) {
    ## mes $k estava seleccionado no form
  } else {
    ## mes $k NAO estava seleccionado no form
  }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora