Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
12
respostas

Problema com a função buscaProduto

Boa Tarde! Estou quebrando a cabeça com um problema. Na montagem do processo de alteração de formulário, criei a função buscaProduto na página banco-produto.php:

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

Liguei a função à página produto-altera-formulario.php:

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

$id=$_GET['id'];
$produto= buscaProduto($conexao, $id);
$categorias=listaCategoria($conexao);
 ?>

Contudo, na execução da alteração na página, aparece o erro: Fatal error: Call to undefined function buscaProduto() in C:\wamp\www\loja\produto-altera-formulario.php on line 8

Agradeço a ajuda com esse problema!!

12 respostas

Não consigo achar o erro q ele acusa na linha: $produto= buscaProduto($conexao, $id);

Prezado Luis:

O erro que é a funcao nao existe. 2 coisas: No codigo apresentado acima, nao esta fechando a chave na declaracao da funcao. No caso o produto altera, faz o include do banco-produto.php, que contem a funcao acima, correto?

Oi Rogério, a função se encontra no banco-produto.php. Esqueci de fechar as chaves aqui, mas no código está fechado.

Luis, é complicado olhar o erro, sem ver o codigo completo. Pelo que postou, realmente nao tem muito sentido. Mas é como se ele entao nao tivesse incluindo o arquivo. Ou esta dando erro em algum dos scripts.php que inclue.

Gostaria de poder ajuda-lo mais, mas fiquei sem conseguir verificar o que esta havendo ai.

Rogério, pra você ver como é um erro estranho, acabei de colocar a função na própria página produto-altera-formulario.php e funcionou. Vou postar o código inteiro aqui

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

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

}

$id=$_GET['id'];
$produto= buscaProduto($conexao, $id);
$categorias=listaCategoria($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"></td>
                </tr>
                <tr>
                    <td>Descrição</td>
                    <td><textarea name="descricao" class="form-control"></textarea></td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="checkbox" name="usado" value="true">Usado</td>
                </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><br />                        
                            <?php
                            endforeach
                            ?>
                        </select>
                    </td>
                </tr>                
                <tr>
                    <td><input class="btn btn-primary" type="submit" value="Alterar"></td>
                </tr>

            </table>
        </form>

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

Luis, como seguro morreu de velho, dá uma olhada no encoding das duas páginas;

Eu tive um problema idêntico, mas com outra função. Quando eu colocava junto funcionava. Se estava em outro arquivo, não.

Aí vi que o encoding era outro e não funcionava.

Sidnei, vou fazer uma pergunta bem tapada: como eu faço isso? hahahahaha

Depende do editor que você usa pra digitar os programas, eu gosto do ultraedit, e nele aparece em baixo de cada arquivo qual o formato.

No eclipse, você clica com o direito sobre o nome do arquivo e vai em propriedades. Aí aparece, em baixo, text encoding com um combo onde você pode escolher.

Luis, realmente estranho isso. Mas interessante que tem outros 2 scripts que inclui tb e estes funcionam ok, certo? Somente este que parece nao ser incluido no codigo principal. Vc esta codificando num ambiente local? Vc esta com o PHP configurado para exibir todos os tipos de erros?

Tente colocar error_reporting(E_ALL) na linha inicial do codigo. Apenas para verificar se algum erro esta sendo gerado e nao esta percebendo. Mas isso so funciona se a diretiva no php.ini display_errors estiver como true. Caso contrario todo o erro é suprimido do codigo.

Oi Luís, tente verificar se o php está realmente conseguindo incluir o arquivo banco-produto.php.

Você pode verificar isso fazendo:

echo "Resultado do include: " . include("banco-produto.php");

Se tiver incluindo, o que você vai ver é => Resultado do include: 1

Se não tiver incluído, verá => Resultado do include:

Outra coisa que pode verificar é se você não possui mais de um arquivo banco-produto.php. As vezes estamos alterando um que está dentro de alguma pasta e o php está adicionando o que está fora de pasta, o que faz com que ele não tenha a função que você procura.

Espero que ajude, abraço.

solução!

Como não obtivemos resposta do criador da pergunta, estou fechando a pergunta. Futuras dúvidas, abrir novas perguntas.

Abraço.