Jump to content


Photo

Problemas De Inserção Com Checkbox


  • Faça o login para participar
6 replies to this topic

#1 Juh_

Juh_

    Novato no fórum

  • Usuários
  • 12 posts
  • Sexo:Feminino
  • Localidade:São Carlos - SP

Posted 16/03/2012, 09:56

Bom dia, pessoal!

Comecei a lidar com PHP recentemente e estou encontrando dificuldades pra inserir o valor dos checkbox no mySql. Estou fazendo um site para controle de um evento de bazares, todo ano tem novas edições com novas lojas participantes. O problema encontra-se na hora de adicionar valores ligando uma determinada Edição do evento com as Lojas participantes dele. Quando eu adiciono uma nova edição eu já adiciono as lojas, e aí está tudo O.K. Mas quando eu vou editar essa edição excluindo as lojas já existentes e adicionando novas, isso não ocorre.


HTML (tirei algumas coisas pra encurtar, no geral as tags tr, td, table, div, form, css e outras que não tinham php)
<?
                //SELECIONA TODAS AS LOJAS 
                $loja = new Loja();
                $lojas = $loja->selecionarTodasLojas("LojNome");
                if($lojas != null){
                    foreach($lojas as $loja){
                        
                        // VERIFICA SE A EDICAO SELECIONADA POSSUI A LOJA ATUAL
                        $edicaoLoja = new EdicaoLoja();
                        $edicaoLoja->selecionarEdicoesLojaPorIdLojaIdEdicao($_GET['IdEdicao'],$loja->getId());
                        if($edicaoLoja->getId() != null){
                            ?>
                               <td class="meio"><input name="edicaoLoja[IdLoja]" type="checkbox" checked="checked"  value="<?=$loja->getId()?>"></td>
                            <?
                        }else{
                            ?>
                                <td class="meio"><input name="edicaoLoja[IdLoja]" type="checkbox"  value="<?=$loja->getId()?>"></td>
                            <?   
                        }
                    }
                }
                    ?>
        <input type="hidden" name="acao" value="Adicionar">
        <input type="submit" name="botao" value="Adicionar" id="botao" class="submit" />

PHP(também tirei algumas coisas, como redirecionamento e mensagens de erro ou sucesso)

$edicaoLoja  = new EdicaoLoja();
$edicaoLoja->selecionarEdicaoLojasPorIdEdicao($_GET['IdEdicao']);

switch($_POST['acao']) {
    

    // ADICIONAR
    case "Adicionar":
        
        if ($_POST['edicaoLoja'] != null){           
            foreach ($_POST['edicaoLoja'] as $idLoja) {
                $edicaoLoja = new EdicaoLoja();
                $edicaoLoja ->setIdEdicao($_GET['IdEdicao']);
                $edicaoLoja ->setIdLoja($idLoja);
                $edicaoLoja ->adicionarEdicaoLoja($edicaoLoja);
            }
        }
        
      /* Esse é o modelo usado pra inserir as lojas no momento de criação do evento,mas quando 
      ** tento inserir mais lojas depois de já ter criado a edição, esse mesmo método não dá certo
      ** (na hora de fazer o inserir após criar o evento, eu troquei ali o $_POST['loja'],
      **    por $_POST['edicaoLoja'], pra bater o name.)
      **/
        if($_POST['loja'] != null){
            foreach($_POST['loja'] as $idLoja){
                $edicaoLoja = new EdicaoLoja();
                $edicaoLoja->setIdEdicao($idEdicao);
                $edicaoLoja->setIdLoja($idLoja);
                $edicaoLoja->adicionarEdicaoLoja($edicaoLoja);
            }
        }
        }*/

Poderiam ajudar? Queria tentar terminar hoje o site, já que só falta isso.
Desculpem se estiver meio bagunçado, fiz agora o cadastro no site e é o primeiro tópico, então deve tá ruim de ler pela falta de formatação.



Ah, e não importa quantos checkbuttons eu marque como check, se a quantidade for maior do que 0, o programa adiciona dois registros iguais no banco.

Edição feita por: Juh_, 16/03/2012, 10:10.

Juliana

#2 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 16/03/2012, 12:17

A maneira mais simples de fazer isso é excluir todos os vínculos primeiro e depois adicionar com base nos checkboxes, igual você já faz na inserção.

#3 Juh_

Juh_

    Novato no fórum

  • Usuários
  • 12 posts
  • Sexo:Feminino
  • Localidade:São Carlos - SP

Posted 16/03/2012, 17:00

A maneira mais simples de fazer isso é excluir todos os vínculos primeiro e depois adicionar com base nos checkboxes, igual você já faz na inserção.


Eu consegui encontrar os erros poucos antes de você responder, mas só vi agora seu post.

Criei uma condição pra sempre que eu for adicionar novos registros, excluir os anteriores já que eles serão novamente adicionados por já aparecerem na tela como checked que foi o que você disse (pelo menos foi o que entendi :3' ). Também havia um erro no html, na hora de exibir as <td>, o name não podia ser edicaoLoja['IdLoja'] porque o único valor que pegava depois no php era o do último checkbox exibido. O certo era ser um array como em edicaoLoja[<?=edicaoLoja->getIdLoja()?>].

E o último, que não tenho certeza se é exatamente um erro, mas no php estava $_POST['edicaoLoja'], e a váriavel que eu usei pra instanciar a classe também se chamava $edicaoLoja, comentei com um colega de serviço e ele disse que não é bom os nomes serem iguais.

Segunda feira eu volto a brigar com o site, porque agora é aproveitar o fim de semana...
Obrigada pela resposta! :3

Edição feita por: Juh_, 16/03/2012, 17:01.

Juliana

#4 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 16/03/2012, 20:35

Dizer que "não é bom os nomes serem iguais" é meio vago. Na verdade, se você está usando $_POST, não importa. Importaria se o seu servidor estivesse configurado pra converter os campos recebidos em variáveis, mas hoje isso vem desabilitado por padrão.

#5 Juh_

Juh_

    Novato no fórum

  • Usuários
  • 12 posts
  • Sexo:Feminino
  • Localidade:São Carlos - SP

Posted 19/03/2012, 01:28

Dizer que "não é bom os nomes serem iguais" é meio vago. Na verdade, se você está usando $_POST, não importa. Importaria se o seu servidor estivesse configurado pra converter os campos recebidos em variáveis, mas hoje isso vem desabilitado por padrão.


Então, como disse, tem pouco tempo que comecei com PHP. Acredito que não esteja habilitada essa opção, mas os atributos da classe precisam ter o mesmo nome das tabelas e campos do banco de dados pelo framework que usamos lá. Sendo assim, os nomes serem iguais não poderia interferir também?
Juliana

#6 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 19/03/2012, 12:16

Não. O campo está dentro de $_POST. Não tem nada a ver com variáveis fora dele.

#7 Juh_

Juh_

    Novato no fórum

  • Usuários
  • 12 posts
  • Sexo:Feminino
  • Localidade:São Carlos - SP

Posted 19/03/2012, 12:21

Beleza então xD

Vou testar depois fazer de novo com o nome igual, até porque não gosto de usar um monte de variavel, principalmente com nome parecido @_@

Obrigada o/
Juliana




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq