Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Botão de remoção não funciona

Srs.

Quando dou o click no botão para excluir um produto não está respondendo.

Veja se há erros no código...

remove-produto.php

<?php include("cabecalho.php");
 include("conecta.php");
 include("banco-produto.php");

$id = $_POST['id'];
removeProduto($conexao,$id);
header("Location: produto-lista.php?removido=true");
die();
?>

produto-lista.php

<?php include("cabecalho.php");
 include("conecta.php");
 include("banco-produto.php"); ?>

 <?php
    if(array_key_exists("removido", $_GET) && $_GET["removido"]==true) {
?>
        <p class="alert-success">Produto removido com sucesso.</p>
<?php } ?>

 <table class="table table-striped table-bordered">
    <?php 
        $produtos = listaProdutos($conexao);
        foreach($produtos as $produto) : 
    ?>
    <tr>
        <td><?=$produto['nome'] ?></td>
        <td><?=$produto['preco'] ?></td>
        <td><?=substr($produto['descricao'],0,40) ?></td>
        <td><?=$produto['categoria_nome'] ?></td>
        <td>
            <form action="remove-produto.php" method="post">
                <input type="hidden" name="id" value="<?$produto['id']?>">
                <button class="btn btn-danger">remover</button>
            </form>
        </td>    
    </tr>
    <?php
        endforeach 
    ?>
</table>

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

banco-produto.php

<?php
function listaProdutos($conexao) {
    $produtos = array();
    $resultado = mysqli_query($conexao,"select p.*,c.nome as categoria_nome from produtos as p join categorias as c on c.id=p.categoria_id");
    while($produto = mysqli_fetch_assoc($resultado)) {
        array_push($produtos,$produto);
    }
    return $produtos;
}

function insereProduto($conexao, $nome, $preco, $descricao,$categoria_id) {
    $query = "insert into produtos (nome,preco,descricao,categoria_id) values ('{$nome}',{$preco},'{$descricao}','{$categoria_id}')";
    return mysqli_query($conexao,$query);
}

function removeProduto($conexao,$id) {
    $query = "delete from produtos where id = {$id}";
    return mysqli_query ($conexao,$query);
}
4 respostas

Experimente eliminar o espaço presente em:

function removeProduto($conexao,$id) {
    $query = "delete from produtos where id = {$id}";
    return mysqli_query ($conexao,$query);
}

Ficando:

function removeProduto($conexao, $id){
    $query = "delete from produtos where id = {$id};";
    return mysqli_query($conexao, $query);

Obs: o espaço está na parte do:

return mysqli_query ($conexao,$query);

Não corrigiu...

Percebi que quando posiciono o mouse no botão "remover" não aparece o número do ID acredito que seja por isso que o sistema não encontra o produto para remover.

Quando posiciono o mouse no botão o rodapé aparece: http://localhost/loja/remove-produto.php Não identificando qual o ID para excluir.

Onde e como corrigir isto? visto que o código foi originado das aulas?

solução!

Nesse caso o rodapé fica assim mesmo, nas outras aulas utilizávamos links normais com o código do Id para realizar a remoção, o que não é uma boa prática devido aos robôs passam pelas paginas acessarem todos os links válidos, nesse caso estamos utilizando um formulário com um parâmetro oculto para o envio dos dados, então o rodapé não altera mesmo.

Achei outro detalhe nessa parte:

value="<?$produto['id']?>"

Está faltando um sinal de igual ao lado do <?, deve ficar assim:

 value="<?=$produto['id']?>">