Logo Hardware.com.br
apterix Zumbi Registrado
9.4K Mensagens 171 Curtidas

Checkbox e MySQL

#1 Por apterix 22/09/2007 - 19:09
Dúvida simples:

Bom, se eu tenho um campo de texto e quero que o MySQL guarde (um exemplo) eu uso:
nome VARCHAR ( 45 ) NOT NULL,


Agora a dúvida é:
Dentro de um formulário, existe um CHECKBOX (name=ATIVO e id=mesANOATIVO, por exemplo: id=nov2007ATIVO) e eu queria saber como faço para guardar no MySQL se ele está marcado ou não.

Como é o sistema:
Cada mês existe o registro de um cliente. Mas em algum mês o cliente pode ficar inativo, 'não trabalhar', então não marcarei a opção 'ATIVO'.

Objetivo:
Gerar estatística de clientes ativos por mês.

Algo como: Eu mando o PHP buscar por todos os nov2007ATIVO marcados e somar quantos foram, assim eu saberei quantos clientes estavam ativos naquele mês (já que existe um nov2007ATIVO para cada cliente).

Cada mês tem seu próprio checkbox (obviamente com id diferente).

Mas eu não sei qual seria a sintaxe para marcar se um checkbox foi ou não foi marcado dentro do MySQL.

Espero ter sido claro. Obrigado!
apterix Zumbi Registrado
9.4K Mensagens 171 Curtidas
#5 Por apterix
24/09/2007 - 16:42
Valeu fernando, entendi sua resposta.

philix, não entendi sua proposta, como fiaria?

Eu estava lendo a documentação do MySQL:
http://dev.mysql.com/doc/refman/4.1/pt/column-types.html

Mas não consegui compreender qual a sintaxe a ser utilizada.

Ah, e para armazenar um textarea, eu uso varchar mesmo?
Hospedagem de sites low-end: www.ilax.com.br Com cPanel 11 e suporte técnico inteligente.
philix Super Participante Registrado
946 Mensagens 14 Curtidas
#10 Por philix
25/09/2007 - 09:01
Ah certo, e se eu quiser que ele possa ser nulo e não único, como ficaria a sintaxe?


Só com o NOT NULL sem o UNIQUE

campo VARCHAR(255) NOT NULL

Ele só não pode ser nulo, mas pode ser repetido.

Outra coisa: se o campo for primary key ele já vai ser único, ou seja, toda tabela tem um campo que tem que ser único: a chave primária:

codigo int not null primary key
"A Matemática é a ginástica mental necessária na tentativa da compreenssão do universo" Linus Torvalds
apterix Zumbi Registrado
9.4K Mensagens 171 Curtidas
#11 Por apterix
25/09/2007 - 13:05
Humm, compreendo.

1) Qual a função de se ter uma chave primária?
2) Um campo nulo compreende em, por exemplo, um campo vazio, certo?
Então por exemplo eu tenho uma tabela que vai de janeiro a dezembro, mas ainda estamos em setembro, portanto os 3 meses que faltam não estarão preenchidos. Funcionarão normalmente com o NOT NULL, estou correto?

Grato!
Hospedagem de sites low-end: www.ilax.com.br Com cPanel 11 e suporte técnico inteligente.
jofrelscalve... Veterano Registrado
1.3K Mensagens 51 Curtidas
#12 Por jofrelscalve...
25/09/2007 - 18:39
A chave primária tem 2 funções básicas:
Garantir que cada registro pode ser acessado de forma independente.
Permitir algumas otimizações, a mais comum é a criação de "listas de valores" por exemplo você pode criar uma tabela de opções de pagamento, e cada opção de pagamento recebe um número como sendo a chave primária, na tabela de pagamentos você aramzenaria apenas o número da opção e com isso deixaria o banco de dados menor.

Campo nulo e campo vazio podem ser diferentes dependendo do banco de dados, no MySQL me deparei que se insiro a string '' (vazia) isso é diferente de inserir NULL, já no access '' é a mesma coisa que "" que é a mesma coisa que NULL (e se marcar NULO), tem coisas que só a MS faz (ajudam um pouco na maioria das vezes, mas complicam absurdamente nums poucos casos especificos) ....


AH! e voltando à grande dúvida (eu ia postar na semana passada, mas tô sem internet desde então....) como você acessa o valor do id do Checkbox no PHP? (até onde sei isso não é possivel, você acessa só o name, e se submetido)
Melhore o futuro do fórum: Diga se a dica funcionou ou conte-nos como conseguiu resolver a sua dúvida!
Se eu errar ou for pouco claro, reclame! Quando possivel eu tentarei melhorar.
apterix Zumbi Registrado
9.4K Mensagens 171 Curtidas
#13 Por apterix
26/09/2007 - 13:05
Eu tava pensando que dentro do input eu coloco:
value="ATIVO" <?php echo $dados["ativo] == "ATIVO" ? "checked=\"checked\"" : ""; ?>

E no MySQL fica assim:
ativo ENUM ( 'ATIVO' ) NOT NULL,

Ou seja, o PHP chama o valor de "ativo", que poderá ser ATIVO ou DESATIVO. Se for ATIVO, ele deixa o campo marcado.

Ou seja, se tiver ATIVO, fica marcado e quando alguém salvar, o value se manterá ATIVO.
Mas se não estiver marcado, no MYSQL não haverá valor algum, portanto ativo não terá o valor ATIVO, conseqüentemente não marcará o campo e quando for salvo ou editado, e o valor ATIVO não será enviado ao MySQL. E quando for novamente acessado, estará desmarcado.

Só não sei se o ENUM aceita ter um único valor. Mas eu acredito que sim, ou então eu coloco dois valores, mesmo que apenas 1 seja usado.

Eu ainda poderia fazer assim:
value="1" <?php echo $dados["ativo] == "1" ? "checked=\"checked\"" : ""; ?>

E no MySQL:
ativo BOOL NOT NULL

Ou seja, se ele for marcado, enviará o valor 1 para o mysql e quando for solicitado, verificará que o valor é 1 e marcará novamente.

Mas se não for 1, ele continuará desmarcado e, conseqüentemente, não enviará o valor 1 para o mysql.

Estou certo?
Hospedagem de sites low-end: www.ilax.com.br Com cPanel 11 e suporte técnico inteligente.
jofrelscalve... Veterano Registrado
1.3K Mensagens 51 Curtidas
#14 Por jofrelscalve...
26/09/2007 - 18:34
Vamos dividir o problema em 3 fases:
1) O PHP lê o Banco de dados e monta a página com o formulário.
2) O HTML está no cliente, onde o navegante pode clicar nas coisas, einteragir de outra formas (movimentos de mouse, pressionamentos de teclas, etc... )
3) O resultado "final" das interações do usuário é enviado ao servidor para que o PHP atualize o Banco de dados.

ACHO que você está se preucupando apenas com as fases 1 e 2 e atransição que existe entre elas. Minha dúvida está em como você vai fazer a fase 3, sendo que a transição 2-3 que você bolou não me parece possivel.
O HTML envia pelo que me lembro apenas = para os checkbox SELECIONADOS (onde seria o valor da propriedade name do checkbox e seria o valor de sua propriedade value). Você pode é claro passar 2 valores, de várias formas (as mais comuns são concatenação/des-concanteação e passando um valor no name e outro no value (já você vai saber que ele foi selecionado pelo simples fato dele existir....))

No mais acho que em termos de lógica e imaginação você já está bem encaminhado.
Melhore o futuro do fórum: Diga se a dica funcionou ou conte-nos como conseguiu resolver a sua dúvida!
Se eu errar ou for pouco claro, reclame! Quando possivel eu tentarei melhorar.
Fazer pergunta
© 1999-2025 Hardware.com.br. Todos os direitos reservados.