1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Checkbox [Validação]

Discussão em 'Web Development' iniciada por davidericardo, 29 de Julho de 2008. (Respostas: 16; Visualizações: 2106)

  1. Viva,
    conforme prometi ontem, vou colocar aqui outro tópico sobre as checkbox.
    Um problema um pouco maior do que a outra do AJAX.
    Bem, esta também utiliza javascript.
    Então é assim, eu tenho X registos, cada registo tem um botao do tipo checkbox. O que eu quero é que se eu seleccionar por exemplo o registo 2, e depois faça editar ele edite-me esse registo.
    Ou se eventualmente nao existirem registos checked's ele dá um erro.

    Uma eventual solução deveria passar por colocar nos input's name="check i", onde o i, era um valor incremental.
    e depois na funcao javascript teriamos um for para fazer a verificação
    e depois no editar.php teriamos um ciclo e dentro do clico a verificação se era cheked.

    mas neste momento nao tenho esse código implementado.
    o que tenho é isto.. se puderem ajudar atraves deste agradecia

    ja agora a minha imagem é esta:
    [​IMG]


    index.php
    Código:
    <?
    $query_clientes = "SELECT * FROM clientes ORDER BY nome ASC";
    $clientes = mysql_query($query_clientes); 
    
    while ($linha = mysql_fetch_array($clientes)) {
    ?>
    <input type="hidden" name="id" value="<? echo $linha['id']; ?>" />
    <tr bgcolor="#FFFFFF">
    <td width="5%" align="center"><input type="checkbox" name="check" value="sim" /></td>
    <td width="5%" align="center"><? echo $linha['id']; ?></td>
    <td width="30%" align="center"><? echo $linha['nome']; ?></td>
    <td width="20%" align="center"><? echo $linha['tlf']; ?></td>
    <td width="15%" align="center"><? echo $linha['data']; ?></td>
    </tr>
    </form>
    <? } 
    }?>
    
    funcoes.js
    Código:
    function ValidaCamposEditar() {
    //validação para o editar
        var errorMsg = "";
        if (document.formList.check.checked==false){
            errorMsg += "\nSeleccione um registo ";
        }
        if (errorMsg != ""){
            msg = "ERRO:\n";
            errorMsg += alert(msg + errorMsg + "\n\n");
            return false;
        }    
        else {
            document.formList.submit();
        }    
        return true;
    }
    
    editar.php
    Código:
    $idCli = $_POST['id'];
    $check = mysql_query("SELECT * FROM clientes WHERE id='$idCli'");
    $linha = mysql_fetch_array($check);
    ....
    
     
    Última edição: 29 de Julho de 2008
  2. Já há alterações a este código..
    Agora o código da funcoes.js é este (só ha um problema, não executa bem no IE) :

    Código:
    function verificaForm()
    {
        var estaAlgumCheckado = 0;
        var cn = document.forms[0].elements.length;
        var i = 0;
        for (i=0; i<cn; i++)
        {
            var cb = document.forms[0].elements[i];
            if (cb.type == "checkbox")
                { 
                    if (cb.checked == true)
                    { estaAlgumCheckado = 1;
                        break;
                    }
                }
        } // for
        
        if(estaAlgumCheckado == 1) { document.formList.submit(); } else { alert("Seleccione um registo"); }
        
    }
    
    e o index.php
    Código:
    <?
    $query_clientes = "SELECT * FROM clientes ORDER BY nome ASC";
    $clientes = mysql_query($query_clientes); 
    
    $i=0;
    while ($linha = mysql_fetch_array($clientes)) {
    $i++;
    ?>
    <input type="hidden" name="id" id="id" value="<? echo $linha['id']; ?>" />
    <tr bgcolor="#FFFFFF">
    <td width="5%" align="center"><input type="checkbox" name="ck<? echo $i; ?>" id="ck<? echo $i; ?>"/></td>
    <td width="5%" align="center"><? echo $linha['id']; ?></td>
    <td width="30%" align="center"><? echo $linha['nome']; ?></td>
    <td width="20%" align="center"><? echo $linha['tlf']; ?></td>
    <td width="15%" align="center"><? echo $linha['data']; ?></td>
    </tr>
    </form>
    <? } ?>
    
    agora só falta no editar.php ele saber qual é o checked..
    e a função javascript funcionar no IE
     
  3. p3dro

    p3dro Power Member

    Vê se isto te ajuda em alguma coisa:

    (no código não mostras como estás a chamar a função verificaForm, é no onsubmit? Se fôr no onsubmit podes por ex. optimizar aqui algumas coisitas)

    PHP:
    function verificaForm () {
      var 
    checked falseelem0f=document.forms[0];

      while (
    elem f.elements[i++]){
        if (
    elem.type == 'checkbox' && elem.checked){
          
    checked true;
          break;
        }
      }

      if(
    checked) {document.formList.submit();}
      else {
    alert("Seleccione um registo");}

      return 
    checked;
    }
     
  4. viva
    eu tou a chamar a função através de um link, não é ai que está problema de maneira nenhuma.
    já agora o link que chama a função é:
    <a title="Editar Cliente" href="#" onclick="javascript:verificaForm();">editar</a>
     
  5. p3dro

    p3dro Power Member

    Eu não disse que havia algum problema na maneira como chamavas a função :) apenas disse que se fosse no onsubmit podia-se fazer ali uma ou outra alteração.

    Mas o código que deixei aqui não solucionou no teu problema?
     
  6. sim, ta a funcionar da mesma maneira do que o outro..
    no FF funciona bem, mas no IE, se eu seleccionar, por exemplo, o segundo registo ele dá o erro "Seleccione um registo". Só "passa" quando o primeiro está checked.
     
  7. p3dro

    p3dro Power Member

    Agora é que reparei na introdução do teu 1º post :p

    Se bem percebi tu queres seleccionar 1 registo e editá-lo, secalhar o melhor nem é utilizar checkboxes, porque não usas radiobuttons? Ou tu queres ter mesmo a possibilidade de seleccionar vários registos ao mesmo tempo?

    Se quiseres seleccionar apenas 1 registo para edição vê se este pequeno exemplo te ajuda:

    Código:
    <html>
      <head>
        <script type="text/javascript" language="javascript">
          function verificaForm () {
            var checked = false, elem, i = 0, f=document.forms[0];
    
            while (elem = f.elements[i++]){
              //é usado o "elem.name=="GroupOptionID"" só no caso se existirem mais
              //radiobuttons no formulário, de modo a não interferir
              if (elem.type == 'radio' && elem.checked && elem.name=="GroupOptionID"){
                checked = true;
                break;
              }
            }
    
            if(checked) {document.formList.submit();}
            else {alert("Seleccione um registo");}
    
            return checked;
          }
        </script>
      </head>
    
      <body>
      
      <form name="formList" method="post" action="editar.php">
        <input type="radio" name="GroupOptionID" id="GroupOptionID" value="1" >
        <input type="radio" name="GroupOptionID" id="GroupOptionID" value="2" >
        <input type="radio" name="GroupOptionID" id="GroupOptionID" value="3">
        <input type="radio" name="GroupOptionID" id="GroupOptionID" value="4">
        <input type="radio" name="GroupOptionID" id="GroupOptionID" value="5">
        <a title="Editar Cliente" href="#" onclick="javascript:return verificaForm();">editar</a>
      </form>
    
      </body>
    </html>
    E depois no editar.php

    PHP:
    <?php
    $option
    =$_POST["GroupOptionID"];
    ?>
    Isto vai buscar o valor do radiobutton seleccionado.
     
  8. sim..
    tanto me faz utilizar checkbox ou radio, pois só vou editar um só registo.
    vou experimentar o teu código.
     
    Última edição: 30 de Julho de 2008
  9. bom amigo,
    eu adaptei o teu código, mas o problema é que no IE nao funciona bem
    no FF funciona lindamente.
    e agora??

    editar.php
    Código:
    $idCli=$_POST["GroupOptionID"]; 
    $check = mysql_query("SELECT * FROM clientes WHERE id=$idCli");
    $linha = mysql_fetch_array($check);
    
    clientes.php
    Código:
    <?
    $query_clientes = "SELECT * FROM clientes ORDER BY nome ASC";
    $clientes = mysql_query($query_clientes); 
    
    while ($linha = mysql_fetch_array($clientes)) {
    ?>
    
    <tr bgcolor="#FFFFFF">
    <td width="5%" align="center"><input type="radio" name="GroupOptionID" id="GroupOptionID" value="<? echo $linha['id']; ?>"/></td>
    <td width="5%" align="center"><? echo $linha['id']; ?></td>
    <td width="30%" align="center"><? echo $linha['nome']; ?></td>
    <td width="20%" align="center"><? echo $linha['tlf']; ?></td>
    <td width="15%" align="center"><? echo $linha['data']; ?></td>
    </tr>
    </form>
    <? }
    
    o funcoes.js é o mesmo que tu me deste agora no ultimo post
     
  10. tou com problemas no scroll no FF.
    nao me mostra a barra de scroll, em parte nenhuma da minha aplicação. :S
    enquanto no IE mostra.
     
  11. já resolvi o scroll
    so falta que aquele script funcione 100% no IE..de resto está tudo ok..
     
  12. p3dro

    p3dro Power Member

    :confused:

    Podias colocar aqui o código html que a página "clientes.php" gera, ou se essa página estiver online, o endereço.

    Já agora em qual versão do IE é que estás a testar?
     
  13. eu acho que é pk o obj radio nao se chama assim no IE
    o erro é na funcao verifcaForm, mais nada.
    IE 7 tou a utilizar.
     
  14. p3dro

    p3dro Power Member

    Acho estranho porque experimentei aquele código que te dei no IE6/7 e funcionou correctamente, mas coloca aqui o código completo gerado pelo clientes.php, se for muito extenso coloca 1 link para o ficheiro.
     
  15. clientes.php
    parte do form
    Código:
    <form action="" name="formList" id="formList" method="post">
    <input type="hidden" name="accao" value="edit" />
    
    <table bgcolor="#cdcdcd" border="0" cellpadding="2" cellspacing="2" width="100%">
    <tr bgcolor="#f0f0f0">
    <td width="5%"></td>
    <td width="5%" align="center"><b class="azul">Nº</b></td>
    <td width="30%" align="center"><b class="azul">Nome</b></td>
    <td width="10%" align="center"><b class="azul">Telefone</b></td>
    <td width="15%" align="center"><b class="azul">Data Registo</b></td>
    </tr>
    
    
    
    
    <tr bgcolor="#FFFFFF">
    <td width="5%" align="center"><input type="radio" name="GroupOptionID" id="GroupOptionID" value="2"/></td>
    <td width="5%" align="center">2</td>
    <td width="30%" align="center">asdasd</td>
    <td width="20%" align="center">343242342</td>
    <td width="15%" align="center">2008-07-27 @ 20:49:51</td>
    </tr>
    </form>
    
    <tr bgcolor="#FFFFFF">
    <td width="5%" align="center"><input type="radio" name="GroupOptionID" id="GroupOptionID" value="1"/></td>
    <td width="5%" align="center">1</td>
    <td width="30%" align="center">Davide Pereira</td>
    <td width="20%" align="center">123456789</td>
    <td width="15%" align="center">2008-07-08 @ 01:07:38</td>
    </tr>
    </form>
    
     
  16. p3dro

    p3dro Power Member

    Tens ai 1 bug, fechas o form por 2 vezes, retira o 1º </form>

    Tira o </form> que tens dentro do ciclo while ($linha = mysql_fetch_array($clientes)) ...
     
    Última edição: 30 de Julho de 2008
  17. exactamente..tava a colocá-lo dentro do while..
    estupidez. ta resolvido..
    obrigado mesmo.
     

Partilhar esta Página