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

Projeto funciona no WAMP e no Hostinger apenas algumas partes

Olá pessoal!

Terminei agora o curso de PHP + MySQL I e no meu computador o sistema rodou direitinho. Porém, quando subi os arquivos para o Hostinger, as funcionalidades de adição e alteração não estão funcionando.

Segue o link do meu projeto no Hostinger: http://blogdojunior.url.ph/index.php

A conexão com o banco está feita, pois é possível consultar e até apagar registros.

Os registros que estão cadastrados ali eu fiz diretamente no phpMyAdmin via SQL.

Acredito que deva ser algum tipo de configuração diferente, pois no meu WAMP está funcionando tudo normalmente.

Se alguém tiver alguma ideia do que pode estar acontecendo eu agradeço.

Abraços, Jr.

3 respostas

Oi Júnior, tudo bem? Parece que tem problemas no alterar e no adicionar produtos, posta os dois arquivos aqui pra gente poder ver o que pode ser?

Olá Wanderson! Seguem os arquivos

No adiciona-produto.php

<?php
include ("cabecalho.php");
include ("conecta.php");
include ("banco-produto.php");
?>

<?php
$nome = $_POST['nome'];
$preco = $_POST['preco'];
$descricao = $_POST['descricao'];
$categoria_id = $_POST['categoria_id'];

if(array_key_exists('usado', $_POST)) {
    $usado = "true";
} else {
    $usado = "false";
}

if(insereProduto($conexao, $nome, $preco, $descricao, $categoria_id, $usado)) {
?>
<p class="alert-success">Produto <?= $nome; ?>, <?= $preco; ?> adicionado com sucesso!</p>
<?php
} else {
    $msg = mysqli_error($conexao);
?>
   <p class="alert-danger">O produto <? = $nome; ?> não foi adicionado: <?= $msg ?></p>

<?php
}
?>

<?php include ("rodape.php"); ?>

No altera-produto.php

<?php
include ("cabecalho.php");
include ("conecta.php");
include ("banco-produto.php");
?>

<?php
$id = $_POST['id'];
$nome = $_POST['nome'];
$preco = $_POST['preco'];
$descricao = $_POST['descricao'];
$categoria_id = $_POST['categoria_id'];

if(array_key_exists('usado', $_POST)) {
    $usado = "true";
} else {
    $usado = "false";
}

if(alteraProduto($conexao, $id, $nome, $preco, $descricao, $categoria_id, $usado)) {
?>
<p class="alert-success">Produto <?= $nome; ?> alterado com sucesso!</p>
<?php
} else {
    $msg = mysqli_error($conexao);
?>
   <p class="alert-danger">O produto <? = $nome; ?> não foi alterado: <?= $msg ?></p>

<?php
}
?>

<?php include ("rodape.php"); ?>

No banco-produto.php

<?php
function insereProduto($conexao, $nome, $preco, $descricao, $categoria_id, $usado) {
    $query = "insert into produtos (nome, preco, descricao, categoria_id, usado) values ('$nome', $preco, '$descricao', $categoria_id, $usado)";
    $resultadoDaInsercao = mysqli_query($conexao, $query);
    echo $query;
    return $resultadoDaInsercao;
}

function alteraProduto($conexao, $id, $nome, $preco, $descricao, $categoria_id, $usado) {
    $query = "update produtos set nome='$nome', preco=$preco, descricao='$descricao', categoria_id=$categoria_id, usado=$usado where id=$id";
    echo $query;
    return mysqli_query($conexao, $query);
}

function listaProdutos($conexao) {
    $produtos = array();
    $resultado = mysqli_query($conexao, "select p.*, c.nome as categoria_nome from produtos as p join categorias as c on p.categoria_id = c.id");
    while($produto = mysqli_fetch_assoc($resultado)) {
        array_push($produtos, $produto);
    }
    return $produtos;
}

function buscaProduto($conexao, $id) {
    $query = "select * from produtos where id = $id";
    $resultado = mysqli_query($conexao, $query);
    return mysqli_fetch_assoc($resultado);
}

function removeProduto($conexao, $id){
    $query = "delete from produtos where id=$id";
    return mysqli_query($conexao, $query);
}
?>

Lembrando que no localhost do WAMP está funcionando.

solução!

Acontece, que no WAMP, determinadas configurações podem estar habilitadas e no servidor não, o shorthand do echo php é uma coisas coisas (<?= 'algum texto' ?>).

Existem outras coisas que podem acontecer, como a versão utilizada nos dois ambientes e incompatibilidade de recursos do sistema operacional. Uma forma mais simples de encontrar o problema seria habilitar as mensagens de erro no servidor.

Assim no olho, sem uma mensagem de erro fica bem complicado de encontrar o problema. Insere essas duas linhas nos arquivos que falei antes e tenta adicionar ou alterar um produto pra ver se alguma mensagem mais clara é apresentada:

error_reporting(E_ALL);
ini_set("display_errors", 1);

insira essas linhas no começo dos arquivos, antes mesmo dos includes.