I created a form when I click the 'change' button it sends the data via $ _POST and calls the page that will update it. But is this a good practice? More curiosity, I'm learning some concepts yet.
product-alter.php
$id = $_GET['id']; //Recebe o parametro pela URL
$produto = buscarProduto($conexao, $id); //irá buscar os produto no banco de dados retornar a matriz.
$categorias = listaCategorias($conexao);
?>
<h1>Alter products</h1>
<form action="alterar-produto.php" method="post">
<input type="hidden" name="id" value="<?=$produto['id']?>" />
<table class="table">
<tr>
<td><input type="text" name="nome" class="form-control" placeholder="Nome" value="<?= $produto['nome'] ?>" /></td>
</tr>
<tr>
<td><input type="number" name="preco" class="form-control" placeholder="Preço" value="<?= $produto['preco'] ?>"></td>
</tr>
<tr>
<td>
<textarea name="descricao" class="form-control" placeholder="Descrição"><?= $produto['descricao'] ?></textarea>
</td>
</tr>
<tr>
<?php
$usado = $produto['usado'] ? "checked='checked'" : "";
//verifica se o usado está preenchido no banco
?>
<td><input type="checkbox" class="form-control" name="usado" <?=$usado?> value="true">Produto usado
</td>
</tr>
<tr>
<td>
<select name="categoria_id" class="form-control" value="<?= $produto['nome'] ?>">
<?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><input type="submit" value="Alterar" class="btn btn-primary"></td>
</tr>
</table>
</form>
<?php include("rodape.php"); ?>
The part I want to understand if it is correct to do this is:
<input type="hidden" name="id" value="<?=$produto['id']?>" />
Well, I'm sending the ID via $ _POST in a hidden way but in the source code of the to see quietly
In order for my alter-product.php to receive:
<?php include("cabecalho.php"); ?>
<?php
include("conecta.php"); // inclui a conexao e estou usando a variavel da classe
include("banco-produto.php"); //Inserir produtos
$id = $_POST['id'];
$nome = $_POST['nome'];
$preco = $_POST['preco'];
$descricao = $_POST['descricao'];
$categoria_id = $_POST['categoria_id'];
//Tratar caso o checkbox não seja selecionado
if(array_key_exists("usado", $_POST)){
$usado = "true";
} else {
$usado = "false";
}
//Verifica se os dados foram inseridos
if(updateProduto($conexao, $id, $nome, $preco, $descricao, $categoria_id, $usado)){
?>
<p class="alert alert-dark">Produto <?php echo $nome; ?>, <?= $preco; ?> Alterado com sucesso!</p>
<?php
} else {
$msg = mysqli_error($conexao);
?>
<p class="alert alert-danger"> Produto <?php echo $nome; ?>, <?= $preco; ?> Não foi alterado!</p>
<?php
}
/* função de inserção antiga
if(mysqli_query($cnn, $query)){
?>
<p class="alert alert-dark">Produto <?php echo $nome; ?>, <?= $preco; ?> adiciona com sucesso!</p>
<?php
} else {
?>
<p class="alert alert-danger"> Produto <?php echo $nome; ?>, <?= $preco; ?> Não foi adicionado!</p>
<?php
}
mysqli_close($cnn);
?>
*/
?>
<?php include("rodape.php"); ?>