Ir para conteúdo
Fórum Script Brasil
  • 0

Problema com checkbox no PHP


Vitor Talaia

Pergunta

Olá!

Estou tendo problemas na hora de mostrar os valores das checkbox que foram selecionadas, quando mais de uma opção é selecionada, só é mostrada a última delas.

Aqui estão os códigos:

Formulário:

<body>
            
            <form name="form1" method="post" action="save_Disciplina.php">
            
                      <label>Nome<br>
                          <input type="text" name="txtNome" id="txtNome">
                      </label>
                      <p>
                          <label>Abreviação <br>
                              <input type="text" name="txtAbreviacao" id="txtAbreviacao">
                          </label>
                      </p>
                      <p>
                          <label>Área
                                <label><br />
                                      <input type="checkbox" name="chkArea[]" id="chkArea[]" value="info">Informática
                                </label><br>
                                <label>
                                      <input type="checkbox" name="chkArea[]" id="chkArea[]" value="adm">Administração
                                </label><br>
                                <label>
                                      <input type="checkbox" name="chkArea[]" id="chkArea[]" value="mec">Mecânica
                                </label><br>
                                <label>
                                      <input type="checkbox" name="chkArea[]" id="chkArea[]" value="design">Design
                                </label><br />
                                <label>
                                      <input type="checkbox" name="chkArea[]" id="chkArea[]" value="geral">Geral
                                </label>
                        </label>
                      </p>
                      <p>
                          <label>Descrição<br>
                                <textarea name="txtDescricao" id="txtDescricao"></textarea>
                          </label>
                      </p>
                      <p>
                            <input type="submit" value="Enviar" onClick="return Validar()"/>
                            <input type="reset" value="Limpar Dados" />
                      </p>
                           
            </form>
            
            <?
                if(isset($_SESSION["disciplina"]))
                    include("list_Disciplina.php");
            ?>
                        
      </body>
save_Disciplina:
<?php
    session_start();
    
    $nome = $_REQUEST["txtNome"];
    $abreviacao = $_REQUEST["txtAbreviacao"];
    
    if(isset($_REQUEST["chkArea"])) {
        foreach($_REQUEST["chkArea"] as $valor) {
                 $area = $valor;
             }
    }
    
    $descricao = $_REQUEST["txtDescricao"];
    
    $disciplina = array ("nome" => $nome,
                         "abreviacao" => $abreviacao,
                         "area" => $area,
                         "descricao" => $descricao);
                         
    if(isset($_SESSION["disciplina"]))
        array_push($_SESSION["disciplina"], $disciplina);
    else
        $_SESSION["disciplina"] = array($disciplina);
        
    header("Location:form_Disciplina.php");    
?>
list_Disciplina:
<table>
    <th>Nome</th>
    <th>Abreviação</th>
    <th>Área</th>
    <th>Descrição</th>
    
    <? foreach($_SESSION["disciplina"] as $disciplina){
        extract($disciplina, EXTR_OVERWRITE); ?>
        
    <tr>
        <td align="center"><?=$nome;?></td>
        <td align="center"><?=$abreviacao;?></td>
        <td align="center"><?=$area;?></td>
        <td align="center"><?=$descricao;?></td>
    </tr>
    
    <? } ?>
</table>

Estou quebrando a cabeça rsrsrsrs

Agradeço desde já

Ah... e eu upei os arquivos, pra fazer um teste, estão em: http://interguerreiro.orgfree.com/Discipli..._Disciplina.php

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Olá Vitor,

eu não testei, por isso não sei se daria certo, mas já tentou colocar essa linha:

$disciplina = array ("nome" => $nome,

"abreviacao" => $abreviacao,

"area" => $area,

"descricao" => $descricao);

dentro do foreach(), ficando assim...

if(isset($_REQUEST["chkArea"])) {

foreach($_REQUEST["chkArea"] as $valor) {

$area = $valor;

$disciplina = array ("nome" => $nome,

"abreviacao" => $abreviacao,

"area" => $area,

"descricao" => $descricao);

}

}

Link para o comentário
Compartilhar em outros sites

  • 0
Olá Vitor,

eu não testei, por isso não sei se daria certo, mas já tentou colocar essa linha:

$disciplina = array ("nome" => $nome,

"abreviacao" => $abreviacao,

"area" => $area,

"descricao" => $descricao);

dentro do foreach(), ficando assim...

if(isset($_REQUEST["chkArea"])) {

foreach($_REQUEST["chkArea"] as $valor) {

$area = $valor;

$disciplina = array ("nome" => $nome,

"abreviacao" => $abreviacao,

"area" => $area,

"descricao" => $descricao);

}

}

Acabei de testar aqui e ele deu a mesma coisa, nossa to viajando nisso já hehehehe

Obrigado pela força!

Link para o comentário
Compartilhar em outros sites

  • 0

Tente trocar isto:

if(isset($_REQUEST["chkArea"])) {
        foreach($_REQUEST["chkArea"] as $valor) {
                 $area = $valor;
             }
    }
por isto:
if(isset($_REQUEST["chkArea"])) {
        foreach($_REQUEST["chkArea"] as $valor) {
                 $area[] = $valor;
             }
    }

A variável $area estava recebendo cada valor de uma vez, ou seja, o último sobreescreve o penultimo que sobreescreve o antepenúltimo....

Colocando o '[]', a variável $area torna-se um vetor que recebera em cada indice um valor. Os indices serão automaticamente numerados. Na dúvida, dá um print_r($area).

Link para o comentário
Compartilhar em outros sites

  • 0

Vitor,

eu fiz dessa forma. Fiz uma modificação.. veja:

Formulário

<!DOCTYPE HTML>

<html>

<head>

<meta charset="iso-8859-1">

<title>Untitled Document</title>

</head>

<body>

<form name="form1" method="post">

<label>Nome<br>

<input type="text" name="txtNome" id="txtNome">

</label>

<p>

<label>Abreviação <br>

<input type="text" name="txtAbreviacao" id="txtAbreviacao">

</label>

</p>

<p>

<label>Área

<label><br />

<input type="checkbox" name="chkArea[]" id=chkArea[]" value="info">Informática

</label><br>

<label>

<input type="checkbox" name="chkArea[]" id="chkArea[]" value="adm">Administração

</label><br>

<label>

<input type="checkbox" name="chkArea[]" id="chkArea[]" value="mec">Mecânica

</label><br>

<label>

<input type="checkbox" name="chkArea[]" id="chkArea[]" value="design">Design

</label><br />

<label>

<input type="checkbox" name="chkArea[]" id="chkArea[]" value="geral">Geral

</label>

</label>

</p>

<p>

<label>Descrição<br>

<textarea name="txtDescricao" id="txtDescricao"></textarea>

</label>

</p>

<p>

<input type="submit" name="submit" value="Enviar" onClick="return Validar()"/>

<input type="reset" value="Limpar Dados" />

</p>

</form>

<?php

if($_REQUEST["submit] == "Enviar")

include("save_Disciplina.php");

if(isset($_REQUEST["fechar"])): unset($_SESSION["disciplina"]); endif;

?>

<a href=?fechar"> Fechar sessão</a>

save_Disciplina

<?php

session_start();

$nome = $_REQUEST["txtNome];

$abreviacao = $_REQUEST["txtAbreviacao"];

$descricao = $_REQUEST["txtDescricao"];

?>

<table>

<th>Nome</th>

<th>Abreviação</th>

<th>Área</th>

<th>Descrição</th>

<?php

if(isset($_REQUEST["chkArea"])) {

foreach($_REQUEST["chkArea"] as $valor) {

$area = $valor;

?>

<tr>

<td align="center"><?=$nome;?></td>

<td align="center"><?=$abreviacao;?></td>

<td align="center"><?=$area;?></td>

<td align="center"><?=$descricao;?></td>

</tr>

<?php

}

}

?>

Esse é meu raciocínio que fugiu um pouco do seu.... foi a forma mais simples que encontrei...

abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Hum... vou salvar o teu código aqui pra eu dar uma olhada amanhã quando acordar, sempre é bom dar uma olhada em maneiras diferentes de programar né hehehe

Eu segui a dica do @mJi colocando tudo em um array, e usando implode pra mostrar os valores separados:

$areas = implode("; ", $area);

E agora tá funcionando \o/

http://interguerreiro.orgfree.com/Discipli..._Disciplina.php

Obrigado pela ajuda!!!

Link para o comentário
Compartilhar em outros sites

  • 0
Hum... vou salvar o teu código aqui pra eu dar uma olhada amanhã quando acordar, sempre é bom dar uma olhada em maneiras diferentes de programar né hehehe

Eu segui a dica do @mJi colocando tudo em um array, e usando implode pra mostrar os valores separados:

$areas = implode("; ", $area);

E agora tá funcionando \o/

http://interguerreiro.orgfree.com/Discipli..._Disciplina.php

Obrigado pela ajuda!!!

=D

Qualquer coisa, tamo ae

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...