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

[Dúvida] Aula "Editando Video" Modulo 2 - Não consigo realizar o cadastro de videos e nem a edição dos mesmos.

Opa galera, então não estou conseguindo avançar nessa atividade do Editando video, eu até refiz todos os passos posteriormente do instrutor, porém não consigo de forma alguma obter o resultado esperado, consegui identificar que ele vai direto para o editar eu até removi as validações se era igual gostaria de pedir um help a vocês, não consigo encontrar onde estou errando. segue meu formulario.php(php, tag body, pra caber tudo dentro do dúvida aqui) | editar-video.php

<?php
$dbPath = '/mnt/d/Banco de Dados Ubuntu/banco.sqlite';
$pdo = new PDO("sqlite:$dbPath");
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
// video padrão (temporario)
$video = [
    'url'    => '',
    'titulo' => '',
];
if ($id !== false) {
    $statement = $pdo->prepare('SELECT * FROM videos WHERE id = ?;');
    $statement->bindValue(1, $id, PDO::PARAM_INT); // informar ao PDO que o parâmetro chamado é um inteiro
    $statement->execute();
    $video = $statement->fetch(PDO::FETCH_ASSOC) ?:$video ;
}
?>
<body>

    <!-- Cabecalho -->
    <header>

        <nav class="cabecalho">
            <a class="logo" href="/"></a>

            <div class="cabecalho__icones">
                <a href="formulario.php" class="cabecalho__videos"></a>
                <a href="../pages/login.html" class="cabecalho__sair">Sair</a>
            </div>
        </nav>

    </header>

    <main class="container">

        <form class="container__formulario" action="<?= $id === false ? 'novo-video.php' : 'editar-video.php?id=' . $id; ?>" method="post">
            <h2 class="formulario__titulo">Envie um vídeo!</h2>
            <div class="formulario__campo">
                <label class="campo__etiqueta" for="url">Link embed</label>
                <input name="url" value="<?= $video['url']; ?>" class="campo__escrita" required
                    placeholder="Por exemplo: https://www.youtube.com/embed/FAY1K2aUg5g" id='url' />
            </div>


            <div class="formulario__campo">
                <label class="campo__etiqueta" for="titulo">Titulo do vídeo</label>
                <input name="titulo" value="<?= $video['title']; ?>" class="campo__escrita" required placeholder="Neste campo, dê o nome do vídeo"
                    id='titulo' />
            </div>

            <input class="formulario__botao" type="submit" value="Enviar" />
        </form>

    </main>

</body>
<?php

$dbPath = '/mnt/d/Banco de Dados Ubuntu/banco.sqlite';
$pdo = new PDO("sqlite:$dbPath");

$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
$url = filter_input(INPUT_POST, 'url', FILTER_VALIDATE_URL); // validando nossa URL 
$titulo = filter_input(INPUT_POST, 'titulo');

$sql = 'UPDATE videos SET url = :url, title = :title WHERE id = :id;';
$statement = $pdo->prepare($sql);
$statement->bindValue(':url', $url);
$statement->bindValue(':title', $titulo);
$statement->bindValue(':id', $id, PDO::PARAM_INT);

if ($statement->execute() === false) {
    echo "<script>
            alert('Erro ao editar o vídeo!');
            window.location.href = 'index.php?sucesso=0&erro=videoNaoPodeSerExcluido';  
          </script>";
    exit;
} else {
    echo "<script>
            alert('Vídeo editado com sucesso!');
            window.location.href = 'index.php?sucesso=1&acao=editar';  
          </script>";
    exit;
}
<?php
$dbPath = '/mnt/d/Banco de Dados Ubuntu/banco.sqlite';
$pdo = new PDO("sqlite:$dbPath");
$url = filter_input(INPUT_POST, 'url', FILTER_VALIDATE_URL); // validando nossa URL 
if ($url === false) {
    echo "<script>
            window.location.href = 'index.php?sucesso=0&acao=cadastrar';  
          </script>";
    exit;
}
$titulo = filter_input(INPUT_POST, 'titulo');
if ($titulo === false) {
    echo "<script>
            window.location.href = 'index.php?sucesso=0&acao=cadastrar';  
          </script>";
    exit;
}
$sql = 'INSERT INTO videos (url,title) VALUES (?, ?);';
$statement = $pdo->prepare($sql);
$statement->bindValue(1, $url);
$statement->bindValue(2, $titulo);
if ($statement->execute() === false) {
    echo "<script>
            alert('Erro ao incluir o vídeo no AluraPlay!');
            window.location.href = 'index.php?sucesso=0';  
          </script>";
    exit;
} else {
    echo "<script>
            alert('Vídeo incluido com sucesso no AluraPlay!');
            window.location.href = 'index.php?sucesso=1';  
          </script>";
    exit;
}
2 respostas
solução!
  • O erro está aqui: No seu formulario.php, você faz:

<input name="titulo" value="" ... Mas no começo do script você define um array default assim:

$video = [ 'url' => '', 'titulo' => '', ]; E quando você busca os dados do banco com:

$video = $statement->fetch(PDO::FETCH_ASSOC) ?:$video ; Você está pegando o valor direto da tabela, que provavelmente possui a coluna title, não titulo, então o array $video terá ['id' => ..., 'url' => ..., 'title' => ...], e não titulo.

✅ Correção Para funcionar corretamente, você deve alinhar os nomes. Existem duas soluções:

Solução 1 (mais simples): no input, use title php Copiar Editar <input name="titulo" value="" ... E também mude o campo default para:

$video = [ 'url' => '', 'title' => '', ]; Solução 2 (mapear title para titulo) — se quiser manter coerência no HTML Se preferir manter o nome titulo no HTML, faça o seguinte:

$videoDoBanco = $statement->fetch(PDO::FETCH_ASSOC);
if ($videoDoBanco) {
    $video = [
        'url' => $videoDoBanco['url'],
        'titulo' => $videoDoBanco['title']
    ];
}

Assim, o campo value="" funciona como esperado.

Boa tarde Eduardo, acho que existe outro ponto que não consegui identificar fiz as duas soluções prospostas porém sem sucesso então resolvi fazer de forma separada, realmente eu sei que não é uma boa prática mas até acho mas organizado para entendimento, criei um novo forumário_cadasto.php e mantive o que já tinha só renomiei, se quiser visitar, o projeto ele ta no github no link em anexo. Mas já agradeço demais a ajuda e a atenção amigo

Github: https://github.com/Igoor-goomes/aluraplay