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

$id = $_GET['id'];

esse é o començo do codigo do formulario para alterar produtos;

<?php
include 'conecta.php';
include 'banco-produto.php';
include 'banco-categorias.php';
include 'cabecalho.php';

    $id = $_GET['id'];
    $produto=buscaProduto($conexao,$id);
    $categorias=listaCategorias($conexao);

?>

quando testo o código me aparece que a variavel id não foi definida.fazendo a seguinte modificação resolve o problema:

if (isset($id = $_GET['id'])) {
  $id = $_GET['id'];
  $produto=buscaProduto($conexao,$id);
  $categorias=listaCategorias($conexao);
}

porém o programa continua sem receber a variável id, e entre outros problemas não aparecem os dados do produto que vai ser modificado no formulario.

6 respostas

Pode postar o código completo?

Como este código está sendo chamado? A URL está corretamente formatada com a querystring?

o codigo completo do formulario que altera os produtos:

<?php
include 'conecta.php';
include 'banco-produto.php';
include 'banco-categorias.php';
include 'cabecalho.php';

  $id = $_GET['id'];
  $produto=buscaProduto($conexao,$id);
  $categorias=listaCategorias($conexao);

?>
<h1>Modificar Produtos</h1>
<form  action="produto-lista.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>Valor:</td>
      <td><input class="form-control" type="number" name="preco" value="<?= $produto['preco']; ?>" ></td>
    </tr>

    <tr>
      <td>Descripção:</td>
      <td><textarea class="form-control" name="descricao" value="<?= $produto['descricao']; ?>" ></textarea ></td>
    </tr>
    <tr>

      <td><input type="checkbox" name="usado" value="<?= $produto['usado']; ?>" > Usado</td>
    </tr>
    <tr>
      <td>
        Categoria:
      </td>
      <td>
        <select class="form-control" name="categoria_id">
          <?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">Modificar</button></td>
    </tr>

  </table>

</form>
<?php include 'rodape.php'; ?>

o codigo do banco-produtos, a função buscaProdutos

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

e a função listaProdutos, no arquivo de banco-categorias.php

<?php

 function listaCategorias($conexao)
 {
   $categorias= array();
   $query = "select * from categorias";
   $resultado =mysqli_query($conexao,$query);
   while ($categoria=mysqli_fetch_assoc($resultado))
    {
     array_push($categorias,$categoria);
   }
   return $categorias;
 }


?>

a URL completa do navegador e a seguinte:

http://localhost/Cursos_alura/PHP-e-MYSQL_I/loja/altera-formulario.php?76

tirei a parte do isset() no formulario, aparece ao recarregar a página dois erros: Notice: Undefined index: id in D:\xampp\htdocs\Cursos_Alura\PHP-e-MYSQL_I\loja\altera-formulario.php on line 7 que da a entender que não esta pegando o valor do 'id' da URL. o outro erro é : Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in D:\xampp\htdocs\Cursos_Alura\PHP-e-MYSQL_I\loja\banco-produto.php on line 30

O correto é o URL está assim:

http://localhost/Cursos_alura/PHP-e-MYSQL_I/loja/altera-formulario.php?id=76

Falta o id.

Como está o código que gera este link? O erro tá nele.

o link que redireciona ao formulario de aleração

<a class="btn btn-primary" href="altera-formulario.php?id=<?= $produto['id']; ?>">modificar</a>
solução!

Tente chamar a página copiando o link direto no browser para checar se ocorre o mesmo erro:

http://localhost/Cursos_alura/PHP-e-MYSQL_I/loja/altera-formulario.php?id=76

Ou você pode também verificar se o valor está sendo enviado com:

$id = $_GET['id'];
print_r($id); exit;

na URL estava faltando id=