Aaaaaaaaeeeeeeewwww!
Finalmente funcionou!!! Já comecei o aniversário com o pé direito! hehehehehe
Muito obrigado cara!!!
Nico, você é instrutor da Caelum, certo? Se sim e se não for muito incomodo gostaria de saber um pouco mais sobre essa questão de retornar dados de uma query, posso?
Vamos lá,
Na seleção dos dados do banco:
Qual a diferença entre a query e o fetch_assoc?
Na aplicação destas funções que retornaram do banco:
Você chamou a função editaProduto e logo abaixo definiu uma variavel para o resultado dela... Faz super sentido, mas funcionaria sem essa nova definição?
Pq até então tratamos o como $produto os detalhes do produto, inclusive no banco, a partir daqui terei que usar $produtoCarregado?
Falo isso pq no exemplo da aula 2, para o produto-lista.php o professor utiliza na função do banco como $produto ($produto->id... etc) veja
//função de listar produtos
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_atual = mysqli_fetch_assoc($resultado)) {
$produto = new Produto;
$categoria = new Categoria;
$categoria->nome = $produto_atual['categoria_nome'];
$produto->id = $produto_atual['id'];
$produto->nome = $produto_atual['nome'];
$produto->preco = $produto_atual['preco'];
$produto->descricao = $produto_atual['descricao'];
$produto->categoria = $categoria;
$produto->usado = $produto_atual['usado'];
$produto->concluido = $produto_atual['concluido'];
$produto->data_criacao = $produto_atual['data_criacao'];
$produto->data_modificado = $produto_atual['data_modificado'];
array_push($produtos, $produto);
}
return $produtos;
}
E para lista-los, ele print usando o termo : <?= $produto->nome ?>
Eu estou levantando essa questão pq neste exemplo funcionou chamar a variavel que imprime do mesmo nome do que chamamos no banco, mas na hora do edita-produto acabou que não funcionou...
Tenho outra questão ainda sobre o que preciso declarar entre parenteses () na hora de chamar uma função:
Veja que neste exemplo agente criou um novo objeto Produto e falamos que ele chama $produto, e lá no banco fizemos isso de novo... Testei aqui e vi que também funcionaria chamando o termo que recebemos do $_GET de somente $id na função do banco:
O codigo do edita-produto ficou assim:
$produto = new Produto;
$id = $_GET['id'];
$produtoCarregado = editaProduto($conexao, $produto);
echo $produtoCarregado->id ."</br>";
echo $produtoCarregado->nome ."</br>";
echo $produtoCarregado->preco ."</br>";
echo $produtoCarregado->descricao ."</br>";
echo $produtoCarregado->data_criacao ."</br>";
Mas assim também funciona:
Pagina
$id = $_GET['id'];
$produtoCarregado = editaProduto($conexao, $id);
echo $produtoCarregado->id ."</br>";
echo $produtoCarregado->nome ."</br>";
Banco
function editaProduto($conexao, $id) {
$query = "select * from produtos where id = {$id}";
Levando em consideração que também funciona, qual comportamento você indica?
E ainda sobre objeto, toda vez que for usar qualquer informação de um objeto preciso colocar $variavel = new Objeto ??
Desculpe-me esse testamento mas é pq eu gostaria de entender o conceito para aplicar em meus próprios exemplos, entende?