Jump to content
Fórum Script Brasil
  • 0

Problema com checkbox no PHP


Vitor Talaia

Question

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 to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 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...