Jump to content
Fórum Script Brasil
  • 0

Checkbox Php Multi-Funcional


voce2011

Question

Olá pessoal!

Estou precisando da ajuda da galera deste fórum! Vamos lá

Tenho um banco de dados chamado TREINAMENTO na qual tem várias campos, como ex: NOME, INICIO, CPF, e etc., inclusive os campos chamados P1dia, P2dia, P3dia, P4dia, P5dia, até o P30dia.

Atualmente, coloquei um monte de checkbox para cada dia, a minha ideia seria, colocar um único checkbox para confirmar a presença das pessoas em sala para cada dia, ou seja, o primeiro dia o campo ficasse em branco, quando eu clicar no checkbox, ele lançasse para o BD no campo P2dia, e no segundo dia, ele clicasse no campo checkbox para marcar presença no segundo dia, no campo P2dia, e assim sucessivamente, até o P30dia.

Sei que neste caso, é necessário uma função, uma lógica para fazer isso, podem me ajudar?

Obrigado e no aguardo!

Link to comment
Share on other sites

18 answers to this question

Recommended Posts

  • 0

Desculpe aí amigo, mas não entendi muito bem o que você pretende fazer...

Os campos P1dia, P2dia etc é de que tipo (boolean, integer?) e qual a informação que eles guardam? Eles ficam na mesma tabela que as informações da pessoa (nome etc)? A informação sobre a presença vai ser por mês (cada mês pode ter presenças diferentes)?

E como assim você tem um monte de checkbox para cada dia? A pessoa não tem apenas 2 opções (presença ou falta)?

E você disse que quando clicar no checkbox1, deve ser lançado no campo P2dia... aqui deve ser no P1dia, certo?

Se você responder estas perguntas fica mais fácil para eu entender xD

Abraço

Link to comment
Share on other sites

  • 0
Desculpe aí amigo, mas não entendi muito bem o que você pretende fazer...

Os campos P1dia, P2dia etc é de que tipo (boolean, integer?) e qual a informação que eles guardam? Eles ficam na mesma tabela que as informações da pessoa (nome etc)? A informação sobre a presença vai ser por mês (cada mês pode ter presenças diferentes)?

E como assim você tem um monte de checkbox para cada dia? A pessoa não tem apenas 2 opções (presença ou falta)?

E você disse que quando clicar no checkbox1, deve ser lançado no campo P2dia... aqui deve ser no P1dia, certo?

Se você responder estas perguntas fica mais fácil para eu entender xD

Abraço

@ Stoma

Vamos lá.

1º Os campos P1dia, P2dia, e etc., são campos do tipo VARCHAR como formato padrão "N" para não marcado, e "S" para quando marcado o checkbox.

2º Eles guardam informações "S" para presente, e "N" como não marcado (sem confirmação de presença), e eles ficam na mesma tabela que as informações da pessoa (nome, e etc.).

3º A informação sobre a presença será somente por dia, limite máximo de dias (30 dias) e não por mês.

4º Na verdade fiz que meio uma bagunça, coloquei vários checkbox como exemplo abaixo:

27x49jo.jpg

e gostaria que ficasse apenas um campo:

28s4xvt.jpg

e a pessoa vai clicar no checkbox, e abrirá uma tela confirmando a informação, falta ou presença.

5º quando clicado no checkbox deverá ir para o campo P1dia, e quando for o segundo dia [utiliza-se mesmo checkbox] para informar o segundo dia, lançando então "s" para P2dia.

Obrigado e no aguardo!

Link to comment
Share on other sites

  • 0

Vejamos...

Você quer utilizar o mesmo checkbox para todos os dias. Quando a página for aberta pela primeira vez, o checkbox estará em branco. Quando a pessoa clicar, abre um outro campo para ela selecionar se vai ser presença ou não. Quando ela salvar, este vai ser salvo no P1dia, e o checkbox ficará limpo, correspondendo agora ao P2dia, e assim por diante...

Entendi certo?

Mas assim não vai ficar lento para os usuários preencherem? Porque imagine... são 30 dias, para cada dia ele vai ter que clicar no checkbox, abrir a janela, selecionar presença/falta e salvar. E outra que para você fazer isto e ir salvando, a cada seleção do usuário você vai ter que recarregar a página (enviar o formulário), a não ser que você utilize ajax. Na minha opinião, ficaria um pouco lento e demorado para o usuário preencher... creio que da forma que você fez (1 checkbox para cada dia) seja a forma mais prática para o usuário. Afinal, tem algum motivo específico para você fazer essas alterações?

Mas já que você quer fazer de outra forma...

1. Se você tem certeza que só vai ter o valor 'S' e 'N' nos campos Pxdia, acho que é melhor utilizar o tipo boolean, ou seja, TRUE ou FALSE (eu faria assim);

2. Caso seja necessário alterar estes dados, você vai ter que fazer outra tela somente para a alteração, e outra tela para visualização;

3. Você tem 3 opções para salvar os dados:

a) a cada seleção do usuário, você envia o formulário para a página que vai salvar os dados e depois retorna para a página de seleção;

B) utiliza ajax, assim a cada seleção você salva os dados (em tempo real, selecionou-salvou) de forma mais rápida e sem precisar recarregar ou sair da página;

c) ir salvando as informações em um campo para que no final (ou quando clicar em algum botão), você submeter o formulário;

4. Você sabe o básico de javascript? Porque para fazer isto, você vai ter que utilizar um pouco de javascript;

Meu horário de café acabou (estou no trabalho haha), quando eu chegar em casa te ajudo melhor, beleza?

Até+

Link to comment
Share on other sites

  • 0
Vejamos...

Você quer utilizar o mesmo checkbox para todos os dias. Quando a página for aberta pela primeira vez, o checkbox estará em branco. Quando a pessoa clicar, abre um outro campo para ela selecionar se vai ser presença ou não. Quando ela salvar, este vai ser salvo no P1dia, e o checkbox ficará limpo, correspondendo agora ao P2dia, e assim por diante...

Entendi certo?

Mas assim não vai ficar lento para os usuários preencherem? Porque imagine... são 30 dias, para cada dia ele vai ter que clicar no checkbox, abrir a janela, selecionar presença/falta e salvar. E outra que para você fazer isto e ir salvando, a cada seleção do usuário você vai ter que recarregar a página (enviar o formulário), a não ser que você utilize ajax. Na minha opinião, ficaria um pouco lento e demorado para o usuário preencher... creio que da forma que você fez (1 checkbox para cada dia) seja a forma mais prática para o usuário. Afinal, tem algum motivo específico para você fazer essas alterações?

Mas já que você quer fazer de outra forma...

1. Se você tem certeza que só vai ter o valor 'S' e 'N' nos campos Pxdia, acho que é melhor utilizar o tipo boolean, ou seja, TRUE ou FALSE (eu faria assim);

2. Caso seja necessário alterar estes dados, você vai ter que fazer outra tela somente para a alteração, e outra tela para visualização;

3. Você tem 3 opções para salvar os dados:

a) a cada seleção do usuário, você envia o formulário para a página que vai salvar os dados e depois retorna para a página de seleção;

B) utiliza ajax, assim a cada seleção você salva os dados (em tempo real, selecionou-salvou) de forma mais rápida e sem precisar recarregar ou sair da página;

c) ir salvando as informações em um campo para que no final (ou quando clicar em algum botão), você submeter o formulário;

4. Você sabe o básico de javascript? Porque para fazer isto, você vai ter que utilizar um pouco de javascript;

Meu horário de café acabou (estou no trabalho haha), quando eu chegar em casa te ajudo melhor, beleza?

Até+

beleza.. sõ não esquece de mim.. rs

Edited by voce2011
Link to comment
Share on other sites

  • 0

Beleza rsrsrs

Sobre as considerações que eu fiz acima, o que você acha? Vai continuar com as alterações mesmo?

E o que você já tem pronto? Cola o código aqui para ver como você está fazendo para seguir o mesmo estilo...

Abraço

Link to comment
Share on other sites

  • 0
Beleza rsrsrs

Sobre as considerações que eu fiz acima, o que você acha? Vai continuar com as alterações mesmo?

E o que você já tem pronto? Cola o código aqui para ver como você está fazendo para seguir o mesmo estilo...

Abraço

@ Stoma então amigão! prefiro fazer com um checkbox mesmo... segue abaixo o script que utilizo para exibir os checkbox's:

<?php

include "config.php";

$datainicio = $_POST["inicio"];
$situacao = $_POST['situacao'];

$inicio = implode("-",array_reverse(explode("/",$datainicio)));

$sql_ver = "SELECT * FROM treinamento WHERE inicio = '$inicio' AND situacao = '$situacao'";
$sql_ver = mysql_query($sql_vendas) or die ("Não foi possível realizar a consulta! Tente novamente!");

?>
----
<?php
if(mysql_num_rows($sql_ver) > 0)
{
?>
----
<?php
while($array_venda = mysql_fetch_array($sql_ver))
{
?>
PARA EXIBIR OS CHECKBOX
<input  type="checkbox" id="checkbox" <?php if($array_ver['t1dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t2dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t3dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t4dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t5dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t6dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t7dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t8dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t9dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t10dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t11dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t12dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t13dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t14dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t15dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t16dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t17dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t18dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t19dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t20dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t21dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t22dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t23dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t24dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t25dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t26dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t27dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t28dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t29dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">
<input  type="checkbox" id="checkbox" <?php if($array_ver['t30dia'] == 'SIM') echo 'checked = "checked" disabled = "disabled"'; ?>"" disabled="disabled">

Link to comment
Share on other sites

  • 0
3. Você tem 3 opções para salvar os dados:

a) a cada seleção do usuário, você envia o formulário para a página que vai salvar os dados e depois retorna para a página de seleção (vai ficar demorado);

c) utiliza ajax, assim a cada seleção você salva os dados (em tempo real, selecionou-salvou) de forma mais rápida e sem precisar recarregar ou sair da página;

c) ir salvando as informações em um campo para que no final (ou quando clicar em algum botão), você submeter o formulário;

4. Você sabe o básico de javascript? Conhece jQuery? Porque para fazer isto, você vai ter que utilizar um pouco de javascript;

E então?

Link to comment
Share on other sites

  • 0

zebra,

Eu tenho uma dica, não sei se seria uma solução para o seu caso.

Você está usando a tabela com campos p1dia, p2dia...

Dessa forma eu entendo que você sempre terá dias vazios, como os finais de semana. Além do fato que pode ser impossível, depois de um tempo, descobrir exatamente qual foi o dia do campo p1dia, por exemplo.

Imagine o seguinte:

Você tem uma tabela com os dados do aluno: ID do aluno, Nome, CPF e Curso.

Então você faria uma tabela de "marcação de ponto" que teria os seguintes campos: Id do aluno, Id do Curso, Data e Presença (sim ou não).

Ai você gravaria no banco exatamente a data e a presença daqueles alunos no banco.

Isso livra você de ter uma tabela parecendo uma peneira, cheia de buracos.

Espero que isso possa ajuda-lo.

Qualquer duvida, poste ai.

Abs.

Link to comment
Share on other sites

  • 0

Se eu entendi isso direito, a idéia do Edgard não daria muito certo porque isso é para um treinamento com quantidade de dias fixo, sendoq ue pode haver um espaço entre os dias de treinamento. Se gravar a data, depois não vai conseguir saber quais dias DO TREINAMENTO (primeiro?, segundo?) a pessoa compareceu e quais dias não compareceu (ex: vai gravar 22/11/2011, mas esse dia é referente ao primeiro dia?, segundo dia? no dia 21/11/2011 havia treinamento e a pessoa não foi?) a não ser que ele cadastrasse todas as datas que teriam treinamento (acho que não daria certo colocar data inicial e data final pois pode haver dias na semana que não vai ter treinamento).

Mas uma coisa ele tem razão... você deve separar os campos referentes a presença em outra tabela, porque se caso uma pessoa fez um treinamento e futuramente vai fazer outro, como você vai fazer? Vai ter que cadastrar outra vez as informações da pessoa?

Bom... eu fiz aqui o que eu ENTENDI, não sei se é isto que você queria mas dê uma olhada aí. Se não for, talvez fazendo alguma adaptação ou refazendo tudo dê certo hahaa

ps: altere o caminho do arquivo jquery.js

<?php
    
    if($_POST){
        $selecoes_situacoes = str_replace('\"', '"', $_POST['selecoes_situacoes']);
        $situacoes = json_decode($selecoes_situacoes, true);
        print_r($situacoes);
        die();
    }
    
?>

<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml' lang='en' xml:lang='en'>
    <head>
        <title>Teste</title>
        
        <script type='text/javascript' src='jquery.js'></script>
        
        <script type='text/javascript'>
            $(document).ready(function(){
                var diaLimite = 2;
                var diaAtual = 1;
                
                $('#selecionar_situacao').change(function(){
                    if($(this).attr('checked')){
                        $('#container-selecao').show();
                    }
                });
                
                $('#btOk').click(function(){
                    var diaAtual = parseInt($('#dia').html(), 10);
                    if(!diaAtual) return false;
                    
                    if($('#situacao').val()==''){
                        alert('Selecione a situação!');
                        $('#situacao').focus();
                        return false;
                    }
                    
                    var selecoes_situacoes = $(document).data('selecoes_situacoes');
                    if(selecoes_situacoes==null) selecoes_situacoes = {};
                    
                    selecoes_situacoes[diaAtual] = {'dia':diaAtual, 'situacao':$('#situacao').val()};
                    $(document).data('selecoes_situacoes', selecoes_situacoes);
                    
                    if(diaAtual < diaLimite){
                        $('#dia').html(++diaAtual);
                    }else{
                        $('#selecionar_situacao').attr('disabled', true);
                        $('#dia').html('...');
                    }
                    
                    fecharJanela();
                });
                
                $('#btCancelar').click(function(){
                    fecharJanela();
                });
                
                $('#btEnviar').click(function(){
                    $('#selecoes_situacoes').val(getSituacoes());
                    $('#formularioTeste')[0].submit();
                });
                
                getSituacoes = function(){
                    var selecoes_situacoes = $(document).data('selecoes_situacoes');
                    if(selecoes_situacoes==null) selecoes_situacoes = {};
                    
                    var situacoes = '{ ';
                    
                    for(x in selecoes_situacoes){
                        var dia = selecoes_situacoes[x].dia;
                        var situacao = selecoes_situacoes[x].situacao;
                        
                        situacoes += '"'+dia+'":"'+situacao+'",';
                    }
                    situacoes = situacoes.substr(0,(situacoes.length-1))+'}';
                    
                    return situacoes;
                };
                
                fecharJanela = function(){
                    $('#selecionar_situacao').attr('checked', false);
                    $('#container-selecao').hide();
                    $('#situacao').val('');
                };
                
                $(document).data('selecoes_situacoes', null);
            });
        </script>
        
        <style type='text/css'>
            #container-selecao{
                border: 2px solid #696969;
                background: #EEE;
                padding: 15px;
                width: 200px;
                position: absolute;
                margin-left: -150px;
                left: 50%;
            }
            #dia{
                text-decoration: underline;
                font-weight: bold;
                color: red;
            }
        </style>
    </head>
    <body>
        <form id='formularioTeste' method='post' action='#' onsubmit='return false;'>
            <div>
                <input type='hidden' id='selecoes_situacoes' name='selecoes_situacoes'/>
                DIA&nbsp;<span id='dia'>1</span><br/><br/>
                <span>OK</span><br/>
                <input type='checkbox' id='selecionar_situacao' name='selecionar_situacao'/><br/><br/>
                <input type='submit' id='btEnviar' value='Enviar'/>
            </div>
            <div id='container-selecao' style='display:none;'>
                <label for='situacao'>Tipo:</label><br/>
                <select id='situacao' name='situacao'>
                    <option value=''>-- Selecione --</option>
                    <option value='F'>Falta</option>
                    <option value='P'>Presença</option>
                </select><br/>
                <input type='button' id='btOk' value='OK'/>
                <input type='button' id='btCancelar' value='CANCELAR'/>
            </div>
        </form>
    </body>
</html>

Edited by Stoma
Link to comment
Share on other sites

  • 0

rsrs

Tenho uma função que busca todos as pessoas programadas de uma determinada data para inicio de treinamento, digito essa data e apareçe a relação das pessoas, e para cada linha deverá conter um campo checkbox, porque preciso dar presença individual...

foi isso que você entendeu? rsrs

porque no caso, é somente 1 checkbox, mas ele precisa se relacionar com o BD, só preciso saber como duplicar isso, e depois configurar o código para ajustar ao BD.

Obrigado e no aguardo! vlw

Link to comment
Share on other sites

  • 0

Bom... nesse caso, você tem que colocar para imprimir o checkbox dentro de um laço e ao invés de utilizar ID no campo selecionar_situacao, utiliza classe passando também o ID da pessoa...

Agora não vou conseguir te ajudar melhor, pois estou de saída. Provavelmente só amanhã... mas tente fazer aí, utilize classe ao invés de ID beleza

Até+

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...