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

10. Alterando produtos, dúvidas:

Bom dia segue as minhas dúvidas: No Adiciona Produto aparece os seguintes erros:

Notice: Undefined index: id in C:\xampp\htdocs\loja\produto-formulario.php on line 6
Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\loja\banco-produto.php on line 22

Segue o código:

<?php
include("cabecalho.php");
include("conecta.php");
include("banco-categoria.php");
include("banco-produto.php");
$id=$_GET['id'];
$produto = buscaProduto($conexao,$id);
$categorias = listaCategorias($conexao);
?>
             <h1>Formulário de Produto</h1>
            <form action="adiciona-produto.php"method="post">                
      <table class="table">
                    <tr>
                      <td>Nome:</td>
                      <td><input class="form-control" type="text" name="nome"  value="<?=$produto['nome']?>"></td> 
                    </tr>
                    <tr>
                        <td>Preço:</td>
                        <td><input class="form-control" type="number" name="preco"></td>  
                    </tr>
                      <tr>
                        <td>Descrição:</td>
                        <td><textarea class="form-control"name="descricao"></textarea></td>  
                    </tr>
                    <tr>                        
                          <td></td>
                          <td><input type="checkbox" name="usado" value="true">Usado
                    </tr>
                    <tr>
                       <td>Categoria</td>                        
                            <td>
                                <select name="categoria_id" class="form-control">
                                <?php foreach($categorias as $categoria) : ?>
                                <option value="<?=$categoria['id']?>">
                                       <?=$categoria['nome']?>
                                </option>   
                                <?php endforeach ?>
                                </select>    
                            </td>
                    </tr> 
                    <tr>
                     <td><button class="btn btn-primary" type="submit">Cadastrar</button></td>                   
                    </tr>                    
                </table>    
            </form>
  <?php include("rodape.php")?>

Já na tela Alterando Produto onde era para aparecer o nome do produto aparece:

<br /><b>Notice</b>:  Undefined variable: produto in <b>C:\xampp\htdocs\loja\produto-altera-formulario.php</b> on line <b>13</b><br />

E na Descrição aparece:

<br />
<b>Notice</b>:  Undefined variable: produto in <b>C:\xampp\htdocs\loja\produto-altera-formulario.php</b> on line <b>21</b><br />

Meu código produto-altera-formulario.php

<?php include("cabecalho.php"); 
include("conecta.php");
include("banco-categoria.php");
$categorias = listaCategorias($conexao);
?>            
    <h1>Alterando produto</h1>
    <form action="altera-produto.php" method="post">
        <table class="table">
            <tr>
                <td>Nome</td>
                <td> <input class="form-control" type="text" name="nome" value="<?=$produto['nome']?>"></td>
            </tr>
            <tr>
                <td>Preço</td>
                <td><input  class="form-control" type="number" name="preco" value="<?=$produto['preco']?>"></td>
            </tr>
            <tr>
                <td>Descrição</td>
                <td><textarea class="form-control" name="descricao"><?=$produto['descricao']?></textarea></td>
            </tr>
            <tr>
                <td></td>
                <td><input type="checkbox" name="usado" value="true"> Usado
            </tr>
            <tr>
                <td>Categoria</td>
                <td>
                    <select name="categoria_id" class="form-control">
                    <?php foreach($categorias as $categoria) : ?>
                        <option value="<?=$categoria['id']?>">
                                <?=$categoria['nome']?>
                        </option>
                    <?php endforeach ?>
                    </select>
                </td>
            </tr>
            <tr>
                <td>
                    <button class="btn btn-primary" type="submit">Alterar</button>
                </td>
            </tr>
        </table>
    </form>
<?php include("rodape.php"); ?>

Meu código altera-produto.php

<?php include("cabecalho.php");         
 include("conecta.php");            
 include("banco-produto.php");
$nome = $_POST['nome'];
$preco = $_POST['preco'];
$descricao = $_POST['descricao'];
$categoria_id = $_POST['categoria_id'];
$id = $_POST['id'];
$usado = $_POST['usado'];

if(array_key_exists('usado', $_POST)) {
    $usado = "true";
} else {
    $usado = "false";
}
if(alteraProduto($conexao, $id, $nome, $preco, $descricao, $categoria_id, $usado)) { ?>
    <p class="text-success">O produto <?= $nome ?>, <?= $preco ?> foi alterado.</p>
<?php } else {
    $msg = mysqli_error($conexao);
?>
    <p class="text-danger">O produto <?= $nome ?> não foi alterado: <?= $msg?></p>
<?php
}
?>
<?php include("rodape.php"); ?>

Código banco-produto.php

<?php
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 insereProduto($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);
}
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);  
}
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}'";
    return mysqli_query($conexao, $query);
}
4 respostas

Olá Sandro, no seu produto-altera-formulario.php está faltando incluir o :

include("banco-produto.php");

e criar uma variavel chamada produto recebendo o retorno da chamada da função buscaproduto()

$produto = buscaProduto($conexao, $id);

Aguarde por mais respostas.

Att,

Bom dia Ramon Pacheco obrigado ,realmente eu tinha esquecido de incluir o: include("banco-produto.php");

e criar a variável: $produto = buscaProduto($conexao, $id);

mas está ainda está dando o seguinte erro quando clico no botão alterar no produto-lista.php:

Fatal error: Call to undefined function buscaProduto() in C:\xampp\htdocs\loja\produto-altera-formulario.php on line 5

A linha 5 do produto-altera-formulário.php é:

$produto = buscaProduto($conexao, $id);

segue o meu código do produto-altera-formulario.php para ver se coloquei no lugar correto:

<?php include("cabecalho.php"); 
include("conecta.php");
include("banco-categoria.php");
$id = $_GET['id'];
$produto = buscaProduto($conexao, $id);

$categorias = listaCategorias($conexao);
?>            
    <h1>Alterando produto</h1>
    <form action="altera-produto.php" method="post">
        <table class="table">
            <tr>
                <td>Nome</td>
                <td> <input class="form-control" type="text" name="nome"></td>
            </tr>
            <tr>
                <td>Preço</td>
                <td><input  class="form-control" type="number" name="preco"></td>
            </tr>
            <tr>
                <td>Descrição</td>
                <td><textarea class="form-control" name="descricao"></textarea></td>
            </tr>
            <tr>
                <td></td>
                <td><input type="checkbox" name="usado" value="true"> Usado
            </tr>
            <tr>
                <td>Categoria</td>
                <td>
                    <select name="categoria_id" class="form-control">
                    <?php foreach($categorias as $categoria) : ?>
                        <option value="<?=$categoria['id']?>">
                                <?=$categoria['nome']?>
                        </option>
                    <?php endforeach ?>
                    </select>
                </td>
            </tr>
            <tr>
                <td>
                    <button class="btn btn-primary" type="submit">Alterar</button>
                </td>
            </tr>
        </table>
    </form>
<?php include("rodape.php"); ?>

Bom Sandro, pelo que vejo no ultimo código que postou você não incluiu não rsrs.

Olha como que está:

<?php include("cabecalho.php"); 
include("conecta.php");
include("banco-categoria.php");
//resto do codigo

Como deve ficar:

<?php include("cabecalho.php"); 
include("conecta.php");
include("banco-categoria.php");
include("banco-produto.php");
//resto do codigo

Att,

solução!

realmente que cabeça a minha rsrsrs obrigado pela ajuda,resolvi voltar nos vídeos anteriores e refazer passo a passo qualquer dúvida eu post novamente!

Valeu!