Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

10
respostas

Valor do ID na janela MODAL nao esta correto.

Boa noite, pessoal a duvida é a seguinte possuo uma tela onde lista todas as informações do meu banco e ao lado dois botoes um de alterar e outro excluir... ao clicar no excluir decidi chamar um MODAL para que o mesmo faça uma pergunta antes de deletar.. porem ao verificar qual o id ele esta se referindo sempre sera o ultimo, o que esta correto pois da forma que fiz sempre sera o ultimo registro, segue código da pagina de consulta:

<?php include ("cabecalho.php");?> <?php include ("conexao.php");?> <?php include ("funcoesBD.php");?>

<?php $produtos = listaProdutos($conexao); ?>

NomePrecoCor

<?php foreach($produtos as $produto) : ?>

<?= $produto['nome'] ?><?= $produto['preco'] ?><?= $produto['cor'] ?>

Alterar

Excluir

<?php endforeach ?>

<?php include ("rodape.php");?>

Porem seria possível ao clicar em excluir passar a ID correta para a parte do MODAL?

segue código do deleta-produto.php: <?php include("conexao.php"); include("funcoesBD.php");

if(isset($_POST['eliminar'])){ $id = $_POST['id']; removeProduto($conexao, $id); header("Location: consulta-produto.php");

}

?>

Obrigado.

10 respostas

Oi Matheus, o seu código veio sem formatação nenhuma, ta complicado de entender o que ali no foreach. Use o botão inserir código para ficar formatado e a gente conseguir te ajudar melhor :).

insira seu código aqui

<?php include ("cabecalho.php");?> <?php include ("conexao.php");?> <?php include ("funcoesBD.php");?>

<?php $produtos = listaProdutos($conexao); ?>

NomePrecoCor

<?php foreach($produtos as $produto) : ?>

<?= $produto['nome'] ?><?= $produto['preco'] ?><?= $produto['cor'] ?>

Alterar

Excluir

<?php endforeach ?>

<?php include ("rodape.php");?>

Codigo deleta produto: <?php include("conexao.php"); include("funcoesBD.php");

if(isset($_POST['eliminar'])){ $id = $_POST['id']; removeProduto($conexao, $id); header("Location: consulta-produto.php");

}

?>

Oi Matheus, você precisa inserir seu código entre as aspinhas. Repare que o trecho insira seu código aqui ficou formatado, mas o resto não.

<?php include ("cabecalho.php");?>
<?php include ("conexao.php");?>
<?php include ("funcoesBD.php");?>

<?php
  $produtos = listaProdutos($conexao);
?>

<div class="table-wrapper">
  <table class="table table-hover">

    <thead>
      <tr>
        <th>Nome</th>
        <th>Preco</th>
        <th>Cor</th>
      </tr>
    </thead>

  <?php
    foreach($produtos as $produto) :
  ?>

    <tbody>
      <tr>
        <!--<td><?= $produto['id'] ?></td>-->
        <td><?= $produto['nome'] ?></td>
        <td><?= $produto['preco'] ?></td>
        <td><?= $produto['cor'] ?></td>

        <td>
          <a class="btn btn-primary" href="form-altera-produto.php?id=<?=$produto['id']?>">Alterar</a>
        </td>

        <td>
        <form action="deleta-produto.php" method="post">
          <input type="text" name="id" value="<?=$produto['id']?>">  
            <div class="modal fade" id='delete-modal' tabindex="-1" role="dialog" aria-labelledby="modalLabel">
              <div class="modal-dialog" role="document">
                <div class="modal-content">
                  <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-label="Fechar"><span aria-hidden="true">&times;</span></button>
                      <h4 class="modal-title" id="modalLabel">Excluir Item</h4>
                  </div>

                  <div class="modal-body">
                    Deseja realmente excluir este item?
                  </div>

                  <div class="modal-footer"> 
                    <button type='submit' class='btn btn-danger' name='eliminar'>Sim</button>
                    <button type="button" class="btn btn-default" data-dismiss="modal">Não</button>
                  </div>
                </div>
              </div>
            </div>
          <a class="btn btn-danger" data-toggle="modal" href='#delete-modal' >Excluir</a>
        </form>
        </td>
      </tr>
    </tbody>

  <?php
    endforeach
  ?>

  </table>
</div>

 <!-- Modal -->


<?php include ("rodape.php");?>

Segue código deleta produto

<?php 
include("conexao.php");
include("funcoesBD.php");

if(isset($_POST['eliminar'])){
    $id = $_POST['id'];
    removeProduto($conexao, $id);
    header("Location: consulta-produto.php");

}

?>

Desculpe não tinha me atentado antes.

Opa, agora ficou legal. Pelo que vi do seu código, para cada item a ser excluído vc cria um form com um input com o id produto para ser excluído. O que vc precisa passar para o modal? Pelo seu código vc não pega só o último id :). Uma outra coisa que vc pode fazer é deixar o id como argumento da action do form. Algo assim:

deleta-produto.php?id=<?=$produto['id']?>

É pq assim eu chamo o Modal e ele pergunta se eu quero excluir ou não, ai quando clico em sim ele exclui sempre a ultima id, ou sempre a primeira, dependendo do lugar que coloco, sem o modal ele funciona normalmente.

Oi Matheus, então tem tudo para ser problema no javascript que faz o modal funcionar.

Não mas não tem chamada de javascript no código...

Oi Matheus, como que o modal carregado? Estou tentando entender o que ta dando errado.. Pq o seu form está correto. O parâmetro está lá e tudo mais... O seu link tem um atributo chamado data-toggle o que me leva crer que tem algum jquery ou algo assim.. Desculpe a insistência.

Então na verdade peguei esse código do modal em um exemplo na internet, o que ocorre é que por exemplo tenho 10 produtos e suas id (1,2,3,4,5,6,7,8,9,10).. se clico para excluir o produto de ID 6 ele exclui sempre o ultimo ou seja o 10, o que me levou a pensar que a chamada do modal não recebe corretamente a ID no botão de confirmação. Possui algum outro exemplo de confirmação de operações com bootstrap? No caso só para deletar mesmo, pois estava usando o confirm do javascript e queria mudar para algo um pouco melhor graficamente. Obrigado.