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

um bug na minha página

Não sei como posso colocar uma imagem aqui, mas estou com um problema que não sei se é PHP ou HTML. Acontece que somente na minha página produto-altera-formulario.php aparece nas categoria, antes das palavras o sinal de maior (>) algo como >esporte. Já conferi o meu código com o código da aula e o que parece não é HTML. Segue o código da página mencionada.

<?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>Alterando produto</h1>
    <form action="altera-produto.php" method="post">
        <input type="hidden" name="id" value="<?=$produto['id']?>">
        <table class="table">
            <tr>
                <td>Nome</td>
                <td><input type="text" name="nome" class="form-control" value="<?=$produto['nome']?>"></td>
            </tr>
            <tr>
                <td>Preço</td>
                <td><input type="number" name="preco" class="form-control" value="<?=$produto['preco']?>"></td>
            </tr>
            <tr>
                <td>Descrição</td>
                <td><textarea name="descricao" class="form-control"><?=$produto['descricao']?></textarea></td>
            </tr>

      <?php $usado = $produto['usado'] ? "checked ='checked'" : ""; ?>

            <tr class="checkbox-usado">
                <td></td>
                <td><input type="checkbox" name="usado" <?=$usado?> value="true"> Usado</td>
            </tr>
            <tr>
                <td>Categoria</td>
                <td>
                    <select class="form-control" name="categoria_id">
                    <?php foreach($categorias as $categoria) :
            $essaEhACategoria = $produto['categoria_id'] == $categoria['id'];
            $selecao = $essaEhACategoria ? "selected='selected'" : "";
          ?>
                        <option value="<?=$categoria['id']?>" <?$selecao?> > <?=$categoria['nome']?> </option>
                    <?php    endforeach ?>
                    </select>
                </td>
            </tr>

            <tr>
                <td><button type="submit" class="btn btn-primary">Alterar</button></td>
            </tr>
        </table>
    </form>

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

O trecho do problema é este:

<td>Categoria</td>
                <td>
                    <select class="form-control" name="categoria_id">
                    <?php foreach($categorias as $categoria) :
            $essaEhACategoria = $produto['categoria_id'] == $categoria['id'];
            $selecao = $essaEhACategoria ? "selected='selected'" : "";
          ?>
                        <option value="<?=$categoria['id']?>" <?$selecao?> > <?=$categoria['nome']?> </option>
                    <?php    endforeach ?>
                    </select>
                </td>
            </tr>
9 respostas

Oi Geovane, o erro está justamente nesse linha

<option value="<?=$categoria['id']?>" <?$selecao?> > <?=$categoria['nome']?> </option>

Logo depois que você faz <?$selecao?>

Qual é o erro?

Aqui

<?$selecao?> > <?=$categoria['nome']?>

basta remover o > depois de <?$selecao?> e deixar assim:

<?$selecao?> <?=$categoria['nome']?>

Olhando bem é o fechamento da tag option, mas tenta ai, se não der certo você fala

Mas código do alura está assim também. Pelo que entendi o sinal de maior logo após a <?selecao?> fecha a tag. E dentro da tag há um elemento php. Veja esse é código do alura:

    <option value="<?=$categoria['id']?>" <?$selecao?> > <?=$categoria['nome']?> </option>

A tag não pode ficar aberta certo?

Fiz o teste e realmente sumiu. Mas como é possível a tag ficar aberta?

Deixei assim:

<option value="<?=$categoria['id']?>" <?$selecao?> <?=$categoria['nome']?>

sem o

</option>
solução!

Vamos testar uma coisa, volta como estava

<option value="<?=$categoria['id']?>" <?$selecao?> > <?=$categoria['nome']?> </option>

mas só que dessa vez adicione um = ali no <?$selecao?>, deixe assim <?=$selecao?>

Deu certo! Valeu!