Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Problema ao cadastrar produtos via painel ADM


Murilo Cabral

Pergunta

Olá galera,

estou precisando da ajuda dos amigos.
Estou criando através de vídeo aulas um Painel Admin. de e-commerce.

Segui passo a passo as orientações das aulas, porém quando tento cadastrar qualquer produto vem a seguinte mensagem abaixo:

Fatal error: Call to a member function inserir() on a non-object in /home/sljvirtu/public_html/painel/admin/produto-add-ok.php on line 31

Já tentei de varias formas resolver o problema, mas como sou iniciante em PHP, estou enviando os códigos das paginas para que os amigos possam dar uma verificada e quem sabe resolver este pepino para que eu possa dar continuidade na construção do Painel.

Abaixo Código da Pagina.class.php (Pag. que comanda todas as funções das outras)

<?php
include_once 'BD.class.php';
class Produto {
private $codigo;
private $titulo;
private $preço;
private $codmarca;
private $descricao;
private $destaque;
private $codcategoria;
private $imagem;
private $quant;
private $nomecategoria;
private $nomemarca;
//variaveis internas
private $bd; //conexão com o banco
private $tabela; //nome da tabela
public function __construct() {
$this->bd = new BD();
$this->tabela = "produto";
}
public function __destruct() {
unset($this->bd);
}
public function __get($key) {
return $this->$key;
}
//método de retorno de valores do objeto
public function __set($key, $value) {
$this->$key = $value;
}
//METODOS
//BANCO DE DADOS
public function inserir() {
$sql = "INSERT INTO $this->tabela (titulo, preço, codmarca, descricao, destaque, codcategoria, imagem, quant)
values ('$this->titulo', $this->preço, $this->codmarca, '$this->descricao', '$this->destaque', $this->codcategoria, '$this->imagem', $this->quant)";
$retorno = pg_query($sql);
return $retorno;
}
public function listar($complemento = "") {
$sql = "SELECT * FROM $this->tabela ".$complemento;
$resultado = pg_query($sql);
$retorno = NULL;
//percorre os registros
while ($reg = pg_fetch_assoc($resultado)) {
//transforma em objetos marca
$obj = new Produto();
$obj->codigo = $reg["codigo"];
$obj->titulo = $reg["titulo"];
$obj->preço = $reg["preço];
$obj->codmarca = $reg["codmarca"];
$obj->codcategoria = $reg["codcategoria"];
$obj->descricao = $reg["descricao"];
$obj->destaque = $reg["destaque"];
$obj->imagem = $reg["imagem"];
$obj->quant = $reg["quant"];
//adiciona a variavel de retorno
$retorno[] = $obj;
}
return $retorno;
}
public function listarjoin($complemento = "") {
$sql = "select produto.* , categoria.nome as nomecategoria, marca.nome as nomemarca
from produto
inner join categoria on
produto.codcategoria=categoria.codigo
inner join marca on
produto.codmarca=marca.codigo ".$complemento;
$resultado = pg_query($sql);
$retorno = NULL;
//percorre os registros
while ($reg = pg_fetch_assoc($resultado)) {
//transforma em objetos marca
$obj = new Produto();
$obj->codigo = $reg["codigo"];
$obj->titulo = $reg["titulo"];
$obj->preço = $reg["preço];
$obj->codmarca = $reg["codmarca"];
$obj->codcategoria = $reg["codcategoria"];
$obj->descricao = $reg["descricao"];
$obj->destaque = $reg["destaque"];
$obj->imagem = $reg["imagem"];
$obj->quant = $reg["quant"];
//$obj->nomecategoria = $reg["nomecategoria"];
//$obj->nomemarca = $reg["nomemarca"];
//adiciona a variavel de retorno
$retorno[] = $obj;
}
return $retorno;
}
public function excluir() {
$sql = "delete from $this->tabela where codigo =$this->codigo";
$retorno = pg_query($sql);
return $retorno;
}
public function atualizar() {
$retorno = false;
$sql = "update $this->tabela set titulo='$this->titulo',preço='$this->preço',codmarca='$this->codmarca',descricao='$this->descricao',destaque='$this->destaque',codcategoria='$this->codcategoria',imagem='$this->imagem',quant='$this->quant' where
codigo=$this->codigo";
$retorno = pg_query($sql);
return $retorno;
}
public function retornarunico() {
$sql = "Select * FROM $this->tabela where codigo=$this->codigo LIMIT 1";
$resultado = pg_query($sql);
$retorno = NULL;
$reg = pg_fetch_assoc($resultado);
if ($reg == true) {
$obj = new Produto();
$obj->codigo = $reg["codigo"];
$obj->titulo = $reg["titulo"];
$obj->preço = $reg["preço];
$obj->codmarca = $reg["codmarca"];
$obj->codcategoria = $reg["codcategoria"];
$obj->descricao = $reg["descricao"];
$obj->destaque = $reg["destaque"];
$obj->imagem = $reg["imagem"];
$obj->quant = $reg["quant"];
$retorno = $obj;
} else {
$retorno = null;
}
return $retorno;
}
}
?>
Fim da pagina Produto.class.php

Abaixo Código da Pagina produto.php (Pag. que lista todos os produtos cadastrados no BD)

<?php
include("cabecalho.php");
$p=new Produto();
if(isset($_POST["filtro"]))
{
$comp = " where titulo ILIKE '%".$_POST["filtro"]."%'";
}
else
{
$comp = "";
}
$lista=$p->listar($comp);
$lista=$p->listarjoin($comp);
// criar variável que é string de saída
$saida="";
//percorre meus objetos
if (isset($lista))
foreach($lista as $item)
{
if ($item->admin=='t')
{
$res="Sim";
}
else
{
$res="não";
}
$saida.=' <tr>
<td>'.$item->codigo.'</td>
<td>'.$item->titulo.'</td>
<td>'.$item->nomemarca.'</td>
<td>'.$item->nomecategoria.'</td>
<td>'.$item->preço.'</td>
<td>'.$item->destaque.'</td>
<td><a href="produto-upd.php?codigo='.$item->codigo.'">
<img src="icones/edit.png" /></a> </br>
<a href="produto-del.php?codigo='.$item->codigo.'"><img src="icones/delete.png" /></a>
</td>
</tr>';
}
?>
<br/><br/>
<h2>Produto </h2>
<br/>
<br/>
<p style="width:100px;"><a href="produto-add.php">
<img src="icones/new.png" />Novo</a></p>
<p>
<form action="produto.php" method="post" id="formP">
<input type="text" name="filtro"/>
<img src="../site/images/search.gif"
onclick="document.getElementById('formP').submit();"/>
</form>
</p>
<table class="tbllista">
<thead>
<tr>
<th>Código</th>
<th>Título</th>
<th>Marca</th>
<th>Categoria</th>
<th>Preço</th>
<th>Destaque</th>
<th>Operações</th>
</tr>
</thead>
<tbody>
<?php echo $saida;?>
</tbody>
</table>
Fim da pagina produto.php

Abaixo Código da Pagina produto-add.php (Pag. de cadastramento de produto)

<?php
include("cabecalho.php");
$selectcategoria="";
// buscar listagem de categoria
// preencher o select com os registros
$objCategoria=new Categoria();
$lista=$objCategoria->listar();
foreach ($lista as $item)
{
$selectcategoria.="<option value='".$item->codigo."'>".$item->nome."</option>";
}
$selectmarca="";
$m=new Marca();
$lista=$m->listar();
foreach ($lista as $item)
{
$selectmarca.="<option value='".$item->codigo."'>".$item->nome."</option>";
}
?>
<br/>
<h2>Cadastro de Produto</h2>
<br/>
<form action="produto-add-ok.php" method="POST" enctype="multipart/form-data">
<table>
<tr>
<td align="right" width="25%"><label>Título:</label></td><td width="75%"><input type="text" name="titulo" required></td>
</tr>
<tr>
<td align="right" width="25%"><label>Descrição:</label></td><td width="75%"><textarea name="descricao" required></textarea></td>
</tr>
<tr>
<td align="right" width="25%"><label>Quantidade:</label></td><td width="75%"><input type="number" name="quant" required></td>
</tr>
<tr>
<td align="right" width="25%"><label>Preço:</label></td><td width="75%"><input type="text" name="preço" required></td>
</tr>
<tr>
<td align="right" width="25%"><label>Categoria:</label></td><td width="75%">
<select name="categoriaid" >
<option value="">Selecione</option>
<?php echo $selectcategoria ?>
</select>
</td>
</tr>
<tr>
<td align="right" width="25%"><label>Marca:</label></td><td width="75%">
<select name="marcaid" required>
<option value="">Selecione</option>
<?php echo $selectmarca ?>
</select>
</td>
</tr>
<tr>
<td align="right" width="25%"><label>Imagem:</label></td><td width="75%">
<input type="file" name="imagem" />
</td>
</tr>
<tr>
<td align="right" width="25%"><label>Destaque:</label></td><td width="75%">
<select name="destaque" >
<option value="">Selecione</option>
<option value="1">Sim</option>
<option value="0">Não</option>
</select>
</td>
</tr>
<tr>
<td align="right" width="25%"><input type="reset" value="Limpar"</td><td width="75%"><input type="submit" name="cadastrar" value="Cadastrar"></td>
</tr>
</table>
</form>
Fim da pagina produto-add.php
Abaixo Código da Pagina produto-add-ok.php (Pag. de confirmação do cadastramento de produto junto ao BD)

<?php
include("cabecalho.php");
$imagem="";
//Instancia a classe passando o arquivo (atributo name no form).
if(isset($_FILES["imagem"]))
{
$dir_dest = "../upload";
$upload = new Upload($_FILES['imagem'], $dir_dest);
// verifica se foi realizado corretamente o upload
if ($upload->processed) {
$imagem=$upload->file_dst_name;
}
}
$p = new Produto();
$p->titulo = $_POST["titulo"];
$p->descricao = $_POST["descricao"];
$p->quant = $_POST["quant"];
$p->preço = $_POST["preço"];
$p->codcategoria= $_POST["codcategoria"];
$p->codmarca = $_POST["codmarca"];
$p->imagem = $imagem;
$p->destaque = $_POST["destaque"];
$retorno->$p->inserir();
//para pegar o nome do arquivo do upload
//$handle->file_dst_name
//$retorno = $categoria->inserir();
if ($retorno == true) {
$msg = "Registro cadastrado com sucesso.";
} else {
$msg = "Erro ao cadastrar.";
}
?>
<br/>
<p class="msgok"><?php echo $msg ?></p>
<a href="produto.php"> Voltar para listagem</a>
Fim da pagina produto-add-ok.php

Bem ai estão os códigos.

Se alguém puder dar uma analisada, e me apontar onde estou errando, ficarei muito agradecido.

Grande abraço a todos e fico no aguardo da respostas dos amigos. Fuuuiiiiii

Murilo Cabral

Editado por Murilo Cabral
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Olá amigos,

peço desculpas a todos por colocar o post como resolvido e não explicar onde estava o erro.

Bem neste post "Problema ao cadastrar produtos via painel ADM" os erros estavam na palavra preço quando o correto é sem o cedilha, pois o BD não aceita acentuação nos código.

Tirando o cedilha de preço dos códigos consegui fazer os cadastros junto ao BD.

Já explicando o erro do segundo post "Problema ao alterar dados no BD ProstgreSQL", o erro foi que esqueci de inserir a linha do Upload na pagina produto-upd-ok.php "Código grifado em verde na Pagina produto-add-ok.php" para que fosse efetua a troca das imagem.

Espero ter me explicado de modo a ser entendido.

A todos um grande abraço.

Editado por Murilo Cabral
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...