3
respostas

Não consigo alterar o select

O meu select permanece igual em todas as páginas. Seguem os códigos:

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 p.categoria_id = c.id");

    while ($produto = mysqli_fetch_assoc($resultado)) {

        array_push($produtos, $produto);
    }
    return $produtos;
}

function insereProduto($conexao, $nome, $preco, $descricao, $categoria_id, $usado) {

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

function buscaProduto($conexao, $id) {

    $query = "select * from produtos where id = {$id}";
    $resultado = mysqli_query($conexao, $query);
    return mysqli_fetch_assoc($resultado);
}

function alteraProduto($conexao, $id, $nome, $preco, $descricao, $categoria_id, $usado) {

    $query = "update produtos set nome = '{$nome}', preco = {$preco}, descricao = '{$descricao}', categoria_id= {$categoria_id}, usado = {$usado} where id = {$id}";
    return mysqli_query($conexao, $query);
}

function removeProduto($conexao, $id) {

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

produto-altera-formulario.php

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

$id = $_GET['id'];
$produto = buscaProduto($conexao, $id);
$categorias = listaCategorias($conexao);
$usado = $produto['usado'] ? "checked='checked'" : "";
?>

<h1>Alterando produtos</h1>

<form action="altera-produto.php" method="post">
    <input type="hidden" class="form-control" name="id" value="<?=$produto['id']?>">
    <table class="table">
        <tr>
            <td>Nome</td>
            <td><input type="text" class="form-control" name="nome" value="<?=$produto['nome']?>"></td>
        </tr>
        <tr>
            <td>Preço</td>
            <td><input type="number" class="form-control" name="preco" value="<?=$produto['preco']?>"></td>
        </tr>
        <tr>
            <td>Descrição</td>
            <td><textarea name="descricao" class="form-control"><?=$produto['descricao']?></textarea></td>
        </tr>
        <tr>
            <td></td>
            <td><input type="checkbox" name="usado" <?=$usado?> value="true">Usado</td>
        </tr>
        <tr>
            <td>Categoria</td>
            <td>
                <select name="categoria_id" class="form-control">
                <?php foreach($categorias as $categoria) : 
                    $essaEhACategoria = $produto['categoria_id'] == $categoria['id'];
                    $selecao = $essaEhACategoria ? "selected='selected'" : "";
                ?>
                    <option value="<?=$categoria['id']?>" <?=$selecao;?>>
                        <?=$categoria['nome']?>
                    </option>
                <?php endforeach ?>
                </select>
            </td>
        </tr>
        <tr>
            <td></td>
            <td><input type="submit" value="Cadastrar" class="btn btn-primary"></td>
        </tr>
    </table>
</form>

<?php include("rodape.php") ?>
</html>

produto-lista.php

<html>
<?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
}
$produtos = listaProdutos($conexao);
?>

<table class="table table-striped table-bordered">

    <?php
    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><a class="btn btn-primary" href="produto-altera-formulario.php?id=<?=$produto['id']?>">alterar</a></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") ?>
</html>

Me parece que tudo está igual, não consegui encontrar nenhum problema, mas a categoria fica sempre a primeira selecionada (esporte).

3 respostas

Olá, Allan.

Não achei nenhum erro no seu código. A regra para ele ficar selecionado é se id do produto for igual a da categoria o option será o selecionado quando a página for carregada.

Se o seu produto for da categoria esporte sempre virá selecionado a categoria esporte. Faz sentido?

Sim, entendi, porém eu tenho um produto na categoria escolar e outro na categoria mobilidade, e em ambos, quando eu abro o formulário para alterar, aparece a categoria esporte selecionada

Allan. Não achei nenhum erro na sua lógica.

Você entrar nessa página pelo navegador, depois apertar o ctrl+u e adicionar o código HTML que é criado pelo PHP?