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

Sign in to follow this  
bioshock

Checkbox

Recommended Posts

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!

Share this post


Link to post
Share on other 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"/>

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites
KiNgPiTo

Nem reparei... realmente não estás a comparar valores, mas sim a atribuir nos ifs...

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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:

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
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.