Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

bioshock

Checkbox

Mensagens Recomendadas

bioshock

Boas!

Quando edito uma categoria, gostaria que me aparecesse que a categoria está como visível ou não numa checkbox.

Ou seja, eu já consegui fazer com que, quando inserimos uma categoria, se a checkbox estiver checked ele assume o valor de "1" = True, caso contrário assume o valor de "0" = False.

O problema está agora no "Editar categoria". Possuo o seguinte código:

<input name="checkbox" type="checkbox" id="checkbox" value="<?php if($rows['visivel'] = '1'){ $checked = '1'; }else{ $checked = '0';} if($checked = '1'){checkbox = 'checked';}?>" align="middle"/>

Com esta linha de código eu tencionava obter o valor da base de dados e preencher automaticamente a checkbox, consoante o valor da base de dados.

Obrigado!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KiNgPiTo

Não estás a escrever nada no value:

<input name="checkbox" type="checkbox" id="checkbox" value="<?php if($rows['visivel'] = '1'){ $checked = '1'; }else{ $checked = '0';} if($checked = '1'){ echo 'checked = "checked"';}?>" align="middle"/>

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado

Eh pá, cuidado com os operadores de atribuição e de comparação! Tens a certeza que é isto que queres fazer:

if($rows['visivel'] =  '1')

Ou não será antes isto:

if($rows['visivel'] ==  '1')


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado

Porque o raciocínio está mal desde o início... O value duma checkbox não tem nada que ver com o seu estado. Neste caso, o value deverá ser o id do registo - isso está dentro dum loop, certo?

Tipo isto (detesto PHP misturado com HTML):

<input name="checkbox[]" type="checkbox" id="checkbox" value="<?php echo $rows['id'];?>" <?php if($rows['visivel'] == '1') echo 'checked = "checked"'; ?> align="middle"/>

Além disso, se tiveres várias checkboxes destas, não te esqueças de definir o seu name como array e o seu id como único se precisares delas em JS.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

O código funcionou na perfeição:

<input name="checkbox" type="checkbox" id="checkbox" value="<?php echo $rows['id'];?>" <?php if($rows['visivel'] == '1') echo 'checked = "checked"'; ?>" align="middle"/>

Contudo, está-me a surgir aqui um problema estranho no UPDATE.

Caso eu insira uma categoria, com checked = false e depois editar a categoria e puser como checked = true, ele vai continuar sempre com checked = false.

Se for o contrário, ou seja, se adicionar uma categoria com checked = true e editar como checked = false ele dá na perfeição. (Mesmo que eu esteja sempre a por checked = true ou checked = false)

Código para o UPDATE:

              <?php
// Caso o button seja clicado
  if ($_POST['edit']) {
    $nome = $_POST['nome'];
$visivel = $_POST['checkbox'];
    
        // Fazemos o update ao que acabamos de escrever
mysql_query("UPDATE categorias SET nome = '$nome', visivel = '$visivel' WHERE id = '$id'") or die ('ERRO'.mysql_query());
         echo 'Categoria editada com sucesso!';
  }
?>

Edit: Mjamado, não defini  nenhum array, pois não preciso dele.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado

Só editas um registo de cada vez?

Se sim, o value da checkbox pode ser, por exemplo, 1. É conveniente, também, apanhares a checkbox duma forma mais acertiva, visto que não vem nenhum valor se ela estiver desmarcada:

$visivel = empty($_POST['checkbox'])?0:$_POST['checkbox']

Por acaso, como de qualquer das formas não precisas do valor da checkbox em si, apenas se está marcada ou não, até podes simplificar e mandar pastar o value (que pode ser qualquer coisa diferente de vazio ou zero):

$visivel = empty($_POST['checkbox'])?0:1


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Mais uma vez, funcionou na perfeição. Já tinha reparado nesse código enquanto navegava no google, mas não sabia que tinha que aplicar neste caso.

Sim, só estou a editar um registo de cada vez, por isso é que não preciso do Loop.

Obrigado Mjamado & KingPito  :thumbsup:

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.