PHP 7 não grava banco MySQL

5 respostas
htmlphp7
R

Fala… tenho uma pagina simples para CRUD com php que só não está inserindo no banco. E no MySQL não dá nenhum erro (conecta e faz todas as outras funções MENOS inserir). Segue os códigos:
FUNÇÕES DO SQL
<?php

//importar conexao
require_once 'conexao.php';
/*
* Script responsável pelo modelo de dados de acervo
*/
// Buscar livro por id
function filtrar_livro_por_id($id) {
global $conexao;

// Impedir SQL Injection
$id = mysqli_real_escape_string($conexao, $id);

// Comando SQL para selecionar registro por ID
$sql = "SELECT * FROM acervo WHERE id = '$id'";

// Executa comando SQL
$resultado = mysqli_query($conexao, $sql);

// Retorna registro encontrado
return mysqli_fetch_assoc($resultado);
}

// Buscar todos os acervo
function filtrar_todos_acervo() {
global $conexao;

// Comando SQL para selecionar todos os registros
$sql = "SELECT * FROM acervo";

// Executa comando SQL
$acervo = mysqli_query($conexao, $sql);

// Retorna todos os registros encontrados
return $acervo;
}

// Inserir livro
function inserir_livro($livro) {
//global $conexao; ESTAVA APENAS a variavel GLOBAL CONEXAO
$host = 'localhost';
$usuario = 'root';
$senha = 'root';
$banco = 'biblio';
$conexao = mysqli_connect($host, $usuario, $senha, $banco);

// Impedir SQL Injection mysqli_real_escape_string
$idEditora = mysqli_real_escape_string($conexao, $livro['idEditora']);
$titulo = mysqli_real_escape_string($conexao, $livro['titulo']);
$autor = mysqli_real_escape_string($conexao, $livro['autor']);
$ano = mysqli_real_escape_string($conexao, $livro['ano']);
$preco = mysqli_real_escape_string($conexao, $livro['preco']);
$quantidade = mysqli_real_escape_string($conexao, $livro['quantidade']);
$tipo = mysqli_real_escape_string($conexao, $livro['tipo']);

// Comando SQL para inserir todos os registros
//(idEditora, titulo, autor, ano, preco, quantidade, tipo)
$sql = "INSERT INTO acervo (idEditora, titulo, autor, ano, preco, quantidade, tipo) VALUES ('$nome', '$idEditora', '$titulo', '$autor', '$ano', '$preco', '$quantidade', '$tipo')";

if (!mysqli_query($conexao, $sql)) {
  die('Erro: ' . mysqli_error($conexao));
}
echo "1 registro gravado no banco";

// Executa comando SQL
$resultado = mysqli_query($conexao, $sql) or die ("Erro ao tentar inserir no banco");

// Retorna resultado da transação
return $resultado;
}

// Alterar dados do livro
function alterar_livro($livro) {
global $conexao;

// Impedir SQL Injection
$id = mysqli_real_escape_string($conexao, $livro['id']);
$idEditora = mysqli_real_escape_string($conexao, $livro['idEditora']);
$titulo = mysqli_real_escape_string($conexao, $livro['titulo']);
$autor = mysqli_real_escape_string($conexao, $livro['autor']);
$ano = mysqli_real_escape_string($conexao, $livro['ano']);
$preco = mysqli_real_escape_string($conexao, $livro['preco']);
$quantidade = mysqli_real_escape_string($conexao, $livro['quantidade']);
$tipo = mysqli_real_escape_string($conexao, $livro['tipo']);

// Comando SQL para selecionar todos os registros
$sql = "UPDATE acervo SET idEditora = '$idEditora', titulo = '$titulo', autor = '$autor', ano = '$ano', preco = '$preco', quantidade = '$quantidade', tipo = '$tipo' WHERE id = '$id'";

// Executa comando SQL
$resultado = mysqli_query($conexao, $sql);

// Retorna resultado da transação
return $resultado;
}

// Excluir livro
function excluir_livro($id) {
global $conexao;

// Impedir SQL Injection
$id = mysqli_real_escape_string($conexao, $id);

// Comando SQL para selecionar todos os registros
$sql = "DELETE FROM acervo WHERE id = '$id'";

// Executa comando SQL
$resultado = mysqli_query($conexao, $sql);

// Retorna resultado da transação
return $resultado;
}
?>

INICIAL PARA LISTAR E ALTERAR, DELETAR OU CRIAR NOVO

<?php
// Importar o arquivo de conexão
require_once 'conexao.php';

// Importar o arquivo responsável pelo modelo de dados de livros
require_once 'biblio-db.php';

// Buscar todos os livros
$livros = filtrar_todos_acervo();
?>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Lista dos livros - Biblioteca Virtual</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="page-header">
<h1>Cadastro de livros</h1>
</div>
<div class="panel panel-default">
<div class="panel-body">
<a href="biblio-form.php" class="btn btn-primary">Novo</a>
</div>
</div>
<table class="table table-striped">
<thead>
<tr>
<th>ID</th>
<th>Id Editora</th>
<th>Titulo</th>
<th>Autor</th>
<th>Ano</th>
<th>Preco</th>
<th>Quantidade</th>
<th>Tipo</th>
<th></th>
</tr>
</thead>
<tbody>
<?php foreach ($livros as $livro) : ?>
<tr>
<td><?php echo $livro['id']; ?></td>
<td><?php echo $livro['idEditora']; ?></td>
<td><?php echo $livro['titulo']; ?></td>
<td><?php echo $livro['autor']; ?></td>
<td><?php echo $livro['ano']; ?></td>
<td>R$ <?php echo $livro['preco']; ?></td>
<td><?php echo $livro['quantidade']; ?></td>
<td><?php echo $livro['tipo']; ?></td>

<td class="text-right">

<a href="biblio-form.php?id=<?php echo $livro['id']; ?>" class="btn btn-primary">Editar</a>

<a href="biblio-processa.php?acao=excluir&id=<?php echo $livro['id']; ?>" class="btn btn-danger" onclick="return confirm('Confirma
a exclusão?');">Excluir</a>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</body>
</html>

FORMULARIO DE CADASTRO

<?php
// Importar o arquivo de conexão
require_once 'conexao.php';
// Importar o arquivo responsável pelo modelo de dados de clientes
require_once 'biblio-db.php';
// Livro em vetor
$livro = array(
'idEditora' => '',
'titulo' => '',
'autor' => '',
'ano' => '',
'preco' => '',
'quantidade' => '',
'tipo' => ''
);
// Verifica que o ID do cliente foi passado via URL
if (isset($_GET['id']) && ! empty($_GET['id'])) {
// Buscar cliente pelo ID
$livro = filtrar_livro_por_id($_GET['id']);
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>- Biblioteca Virtual -</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="page-header">
<h1>Cadastro de Novos Livros</h1>
</div>
<?php if (isset($_GET['erro']) && $_GET['erro'] == '1') : ?>
<div class="alert alert-danger">
Verifique os campos obrigatórios
</div>
<?php endif; ?>
<form action="biblio-processa.php" method="post">
<input type="hidden" name="id" value="<?php echo $livro['id']; ?>">
<input type="hidden" name="acao" value="salvar">
<div class="form-group">
<label for="IdEditora">Id Editora *</label>
<input type="text" name="idEditora" id="idEditora" class="form-control"
value="<?php echo $livro['idEditora']; ?>" maxlength="100">
</div>
<div class="form-group">
<label for="titulo">Titulo *</label>
<input type="text" name="titulo" id="titulo" class="form-control"
value="<?php echo $livro['titulo']; ?>" maxlength="100">
</div>
<div class="form-group">
<label for="autor">Autor *</label>
<input type="text" name="autor" id="autor" class="form-control"
value="<?php echo $livro['autor']; ?>" maxlength="100">
</div>
<div class="form-group">
<label for="ano">Ano Lancamento *</label>
<input type="text" name="ano" id="ano"class="form-control"
value="<?php echo $livro['ano']; ?>" maxlength="100">
</div>
<div class="form-group">
<label for="preco">Preco *</label>
<input type="text" name="preco" id="preco" class="form-control"
value="<?php echo $livro['preco']; ?>" maxlength="100">
</div>
<div class="form-group">
<label for="quantidade">Quantidade *</label>
<input type="text" name="quantidade" id="quantidade" class="form-control"
value="<?php echo $livro['quantidade']; ?>" maxlength="100">
</div>
<div class="form-group">
<label for="tipo">Tipo *</label>
<input type="text" name="tipo" id="tipo" class="form-control"
value="<?php echo $livro['tipo']; ?>" maxlength="100">
</div>
<button type="submit" class="btn btn-primary">Salvar</button>
&nbsp &nbsp &nbsp &nbsp
<button type="reset" class="btn btn-primary">Limpar</button>
<br /><br />
<a href="livro-lista.php"><-- Voltar</a>
</form>
<br>
</div>
</body>
</html>

CONEXAO COM BANCO

<?php

// Variáveis de conexão

$host = 'localhost';
$usuario = 'root';
$senha = 'root';
$banco = 'biblio';

// Tornando global a variável $conexao permitindo
// ser usada dentro de funções e classes
global $conexao;

// Conectar com o banco de dados

$conexao = mysqli_connect($host, $usuario, $senha, $banco);

// Verificar se a conexão foi bem sucedida

if (mysqli_connect_errno()) {

die("Falha ao tentar conectar com o " . "banco de dados MySQL: " . mysqli_connect_error());

}
// Teste para Conexão bem sucedida
//echo "<br />";
//echo "<br />";
//echo "<p><strong>Conexao realizada com sucesso!</strong></p>";
?>

EXECUTA OS COMANDOS SQL

<?php

// Importar o arquivo de conexão
require_once 'conexao.php';

// Importar o arquivo responsável pelo modelo de dados de livros
require_once 'biblio-db.php';

// Certificar que uma ação foi requisitada
if (!isset($_REQUEST['acao']))
return header('Location: livro-lista.php');

// Executar ação
switch ($_REQUEST['acao']) {
case 'salvar':

// Pegar ID do registro
$id = $_POST['id'];

// Validar campos obrigatórios
if (empty($_POST['idEditora']) || empty($_POST['titulo']) || empty($_POST['autor']) || empty($_POST['ano']) || empty($_POST['preco']) || empty($_POST['quantidade']) || empty($_POST['tipo'])) {

return header('Location: biblio-form.php?erro=1' . (!empty($id) ? "&id=$id" : ' '));
}

// Verificar se o registro é novo
if (empty($id))
inserir_livro($_POST);
else alterar_livro($_POST);
break;

case 'excluir':
excluir_livro($_GET['id']);
break;

default:
break;
}

// Redirecionar para a página livro-lista.php
header('Location: livro-lista.php');
?>

o que pode ser? ele nem passa pelo erro, simplesmente retorna a pagina e no banco não esta gravado e também não mostra nada no log do mysql. Desde já obrigado.

Ricardo

5 Respostas

I

De onde vem a variável $nome?

R

Esse ‘$nome’ estava errado, mas as variveis vem do formulario.

I

Creio que o teste correto da conexão seja:

if(!$conexao){
	die('Ocorreu um erro (' . mysqli_connect_errno() . ') '
		. mysqli_connect_error());
}

Conforme a documentação: PHP Manual - mysqli_connect, mysqli::__construct.

Provavelmente a sua conexão não esteja funcionando. A função mysqli_connect_errno só retorna o valor de erro da última chamada à função mysqli_connect, então não pode ser usada como teste (true/false), conforme a documentação PHP Manual - mysqli.connect-errno.

R

Então… como eu disse acima, ele conecta, altera, deleta e lista tudo do banco. Só não insere novos, e também dessa forma como vc mostrou não dá erro pq ele conecta. O problema pode ser na clausula SQL ($sql = "INSERT INTO acervo (idEditora, titulo, autor, ano, preco, quantidade, tipo) VALUES ('$idEditora', '$titulo', '$autor', '$ano', '$preco', '$quantidade', '$tipo')";) e como eu ja te respondi, essas variaveis vem do formulario:

<label for="IdEditora">Id Editora </label>
<input type="text" name="idEditora" id="idEditora" class="form-control" value="<?php echo $livro['idEditora']; ?>" maxlength="100">

Já tentei de tudo. Eu preciso é colocar um macaco ali no momento da gravação para ver se ele pelo menos chega na tabela, porque esta conectando no banco. Obrigado.

N

Como vc disse q único erro era no INSERT
Me parece haver mais campos na consulta q no banco. Conte todos os campos do banco e da consulta e veja se resolve.
Aqui a $nome existe no banco?
Se sim precisa especificar nos campos do banco também, não só na consulta.
Obs futuramente use o PDO

Criado 22 de outubro de 2019
Ultima resposta 6 de nov. de 2019
Respostas 5
Participantes 3