1
resposta

[Bug] O ID responsável pela exclusão não está sendo exibido

O ID responsável pela exclusão não está sendo exibido. Além disso, uma outra página do site está sendo carregada dentro da seção de vídeos, o que não deveria acontecer. Não sei como corrigir esse erro

Insira aqui a descrição dessa imagem para ajudar na acessibilidade
essa pagina ficou assim do nada

query('SELECT * FROM videos;')->fetchAll(PDO::FETCH_ASSOC); ?>
<header>

    <nav class="cabecalho">
        <a class="logo" href="./index.html"></a>

        <div class="cabecalho__icones">
            <a href="./pages/enviar-video.html" class="cabecalho__videos"></a>
            <a href="./pages/login.html" class="cabecalho__sair">Sair</a>
        </div>
    </nav>

</header>

<ul class="videos__container" alt="videos alura">
    <?php foreach($videoList as $video): ?>
    <li class="videos__item">
        <iframe width="100%" height="72%" src="<?= $video['url'] ?>"
            title="YouTube video player" frameborder="0"
            allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
            allowfullscreen></iframe>
        <div class="descricao-video">
            <img src="./img/logo.png" alt="logo canal alura">
            <h3><?= $video['title'] ?></h3>
            <div class="acoes-video">
                <a href="./pages/enviar-video.html">Editar</a>
                <a href="/remover-video.php?id=<?=$video['id']?>">Excluir</a>
            </div>
        </div>
    </li>
    <?php endforeach ?>
</ul>

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Oi, Rafael! Como vai?

Com o que voce descreveu, o problema mais visivel e que o seu arquivo index.php esta com o trecho PHP sendo exibido como texto na tela:

<?php
$videoList = $pdo->query('SELECT * FROM videos;')->fetchAll(PDO::FETCH_ASSOC);
?>

Isso acontece quando o bloco PHP esta incompleto ou sem a abertura correta &lt;?php.

O problema aqui e este: na pagina apareceu isso:

query('SELECT * FROM videos;')->fetchAll(PDO::FETCH_ASSOC); ?>

Ou seja, o inicio do PHP nao esta sendo lido.

Ajuste seu codigo assim:

<?php
$dbPath = __DIR__ . '/banco.sqlite';
$pdo = new PDO("sqlite:$dbPath");

$videoList = $pdo->query('SELECT * FROM videos;')->fetchAll(PDO::FETCH_ASSOC);
?>

O que esse codigo faz:

  • conecta no banco SQLite
  • busca todos os videos
  • guarda o resultado em $videoList

Sobre o ID da exclusao nao aparecer, confira tambem o link do botao Excluir.

Veja este exemplo:

<a href="remover-video.php?id=<?= $video['id'] ?>">Excluir</a>

Se voce usar barra no inicio, assim:

<a href="/remover-video.php?id=<?= $video['id'] ?>">Excluir</a>

o navegador tenta buscar o arquivo na raiz do servidor, e isso pode quebrar a rota no seu projeto.

Importante: prefira usar caminho relativo:

<a href="remover-video.php?id=<?= $video['id'] ?>">Excluir</a>

ou, se estiver em outra pasta:

<a href="./remover-video.php?id=<?= $video['id'] ?>">Excluir</a>

Tem mais um ajuste necessario no seu remover-video.php.
No print, o metodo execute() esta sendo chamado duas vezes:

<?php
$dbPath = __DIR__ . '/banco.sqlite';
$pdo = new PDO("sqlite:$dbPath");

$id = $_GET['id'];

$sql = "DELETE FROM videos WHERE id = ?";
$statement = $pdo->prepare($sql);
$statement->bindValue(1, $id);

if ($statement->execute() === false) {
    header('Location: index.php?sucesso=0');
} else {
    header('Location: index.php?sucesso=1');
}

O que esse codigo faz:

  • pega o id enviado pela URL
  • prepara o DELETE com seguranca
  • executa uma vez so
  • redireciona com sucesso ou erro

Resumo dos pontos importantes:

  • verifique se o arquivo com a listagem comeca com &lt;?php
  • confirme se o index esta como .php e nao .html
  • use caminho relativo no link de exclusao
  • no remover-video.php, nao chame execute() duas vezes

Se quiser comparar, sua estrutura de exclusao deve ficar assim no HTML:

<div class="acoes-video">
    <a href="./pages/enviar-video.html">Editar</a>
    <a href="remover-video.php?id=<?= $video['id'] ?>">Excluir</a>
</div>

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado