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

Não insere no banco de dados

Tenho uma database chamada 'blog' e uma table chamada 'produtos', o código do professor não funciona na minha máquina, parece ser um erro simples:

<?php include('includes/header.php') ?>

<?php
$nome = $_GET["nome"];
$valor = $_GET["valor"];
$conexao = mysqli_connect('localhost', 'root', '', 'blog');

$query = "insert into produtos (nome, valor) values ('{$nome}', {$valor})";


mysqli_close($conexao);


?>
<?php include('includes/footer.php') ?>
<?php include("includes/header.php"); ?>


<div class="container">
    <h1>Formulário de cadastro</h1>
<form action="adiciona-produto.php">
    Nome: <input type="text" name="nome" />
    Valor: <input type="number" name="valor" />

    <button type="submit">Cadastrar</button>

</form>
</div>

<?php include('includes/footer.php') ?>
4 respostas
solução!

Meu caro, acho que você esqueceu de executar a query no banco de dados.

$statement = mysqli_prepare($conexao, $query);
mysqli_stmt_execute($statement);

Vale ler, eu acho, a documentação ofical: http://php.net/manual/pt_BR/mysqli-stmt.execute.php

Outra coisa importante é você fazer uma validação se esses dados chegaram até você e, quando estiver mais a vontate com a linguagem, validar se o dado é o que você espera (inteiro, string, etc...), validar uma tentativa de invasão de segurança (vide SQLInjection), mas isso para o futuro.

if ($_GET['nome'] != '' && $_GET['valor'] != '') {
  $conexao = mysql_connect(...);
}

Tenha bons estudos :-D

Ok, acho que deixei passar esse mysql_stmt_execute, porém, implementei seu código e continua não inserindo

<?php include('includes/header.php') ?>

<?php
$nome = $_GET["nome"];
$valor = $_GET["valor"];
$conexao = mysqli_connect('localhost', 'root', '', 'blog');

$query = "insert into produtos (nome, valor) values ('{$nome}', {$valor})";
$statement = mysqli_prepare($conexao, $query);
mysql_stmt_execute($statement);

mysqli_close($conexao);


?>
<?php include('includes/footer.php') ?>

ERRO:

Fatal error: Uncaught Error: Call to undefined function mysql_stmt_execute() in C:\wamp64\www\alura\loja\adiciona-produto.php:10 Stack trace: #0 {main} thrown in C:\wamp64\www\alura\loja\adiciona-produto.php on line 10

Falha minha, esqueci o i de mysqli_stmt_execute.

Estou corrigindo o código lá em cima....

Resolvido!

Falta de atenção a minha não ter reparado na ausência do "i" de "mysqli"

Obrigado pela ajuda Michael!