Passing id with hidden field via $ _POST

0

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"); ?>
    
asked by anonymous 27.02.2018 / 20:59

1 answer

0

Sending via $ _ POST is correct, but notice that you are already displaying the id ( $id = $_GET['id']; ) in URL , which makes this id visible to all . This is a matter of taste, however you should really worry about good practices, SQL Injection, etc.

Look for it on Google:

Success!

    
02.03.2018 / 15:51