1
resposta

Cadastrar o Produto de estoque no banco de dados

Não insere, e não sei onde está o erro!

Classe para inserir os dados:

class Produto{

public function inserir($item, $categoria, $quantidade, $valor_unit){
    $query = "INSERT INTO produto (item, categoria, quantidade, valor_unit) VALUES ('".$item.", ".$categoria.", ".$quantidade.", ".$valor_unit."')";
    $conexao = new PDO ('mysql:host=localhost; dbname=estoque_2', 'root', '');
    $conexao->exec($query);
}

}

Meu código HTML de cadastro:

<body>
<form action="createProduto.php" method="post">
    <label for="">Item</label>
    <input type="text" name="item">
    <label for="">categoria</label>
    <input type="text" name="categoria">
    <label for="">Quantidade</label>
    <input type="text" name="quantidade">
    <label for="">Valor Unitário</label>
    <input type="text" name="valor_unit">

    <button type="submit">Cadastrar</button>
</form>
</body>
</html>

Meu código de inserção dos dados:

<?php

require_once 'classe/Produto.php';

$insere = new Produto();
$item = $_POST['item'];
$categoria = $_POST['categoria'];
$quantidade = $_POST['quantidade'];
$valor_unit = $_POST['valor_unit'];
$insere->inserir($item, $categoria, $quantidade, $valor_unit);

header ('Location: ProjetoProduto.php');
1 resposta

Olá Stefano, Tudo bem?

Estava olhando o código da classe produto:

class Produto{
    public function inserir($item, $categoria, $quantidade, $valor_unit){
        $query = "INSERT INTO produto (item, categoria, quantidade, valor_unit) VALUES ('".$item.", ".$categoria.", ".$quantidade.", ".$valor_unit."')";
        $conexao = new PDO ('mysql:host=localhost;     dbname=estoque_2', 'root', '');
        $conexao->exec($query);
    }
}

e notei que a concatenação os valores na query está sendo feita da seguinte forma:

"...('".$item.", ".$categoria.", ".$quantidade.", ".$valor_unit."')"

Neste caso supondo que tenhamos os seguintes valores:

  • $item: Caderno
  • $categoria: Papelaria
  • $quantidade: 2
  • $valor_unit: R$ 9,99

Temos o seguinte resultado da concatenação:

('Caderno, Papelaria, 2, R$ 9,99')

Neste caso o erro está na forma como os valores estão concatenados, como pode ver na simulação do reultado todos os valores estão entre aspas, o que para o SQL significa que apenas uma coluna de texto está sendo enviada.

Para corrigir isso verifique as aspas usadas na concatenação, sendo necessário rever a posição da última aspa e adicionar aspas simples antes e depois das aspas duplas usadas para delimitar a string para concatenar.

Se o código fosse por exemplo:

"...('".$item."', '".$categoria."', ".$quantidade.", '".$valor_unit."')"

Nós teriamos o seguinte resultado para a query:

('Caderno', 'Papelaria', 2, 'R$ 9,99')

Que agora são considerados 4 campos.

Vale a pena revisar quais são os tipos que estão sendo inseridos para garantir se eles precisam ou não de aspas para serem inseridos, números inteiros ou de ponto flutuantes não precisam de dados, e números de ponto flutuante (floats) tem suas casas decimais separadas por . e não ,.