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

[Bug] Meu formulário não vem com os campos preenchidos ao editar

Código:

// editar-video.php
<?php

try {
  $pdo = new PDO('mysql:host=localhost;dbname=aluraplay', 'santiago', 's1Lv@83He');
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
  echo "Error: " . $e->getMessage();
}

$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
if (!$id) {
  header('Location: /index.php?sucesso=0');
  exit();
}

$url = filter_input(INPUT_POST, 'url', FILTER_VALIDATE_URL);
if (!$url) {
  header('Location: /index.php?sucesso=0');
  exit();
}

$titulo = filter_input(INPUT_POST, 'titulo');
if (!$titulo) {
  header('Location: /index.php?sucesso=0');
  exit();
}


$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()) {
  header('Location: /index.php?sucesso=0');
} else {
  header('Location: /index.php?sucesso=1');
}
// formulario.php
<?php
try {
    $pdo = new PDO('mysql:host=localhost;dbname=aluraplay', 'santiago', 's1Lv@83He');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}

$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
$video = [
    'url' => '',
    'title' => '',
];

if (!$id) {
    $statement = $pdo->query('SELECT * FROM videos WHERE id = ?;');
    $statement->bindValue(1, $id, PDO::PARAM_INT);
    $statement->execute();
    $statement->fetch(\PDO::FETCH_ASSOC);
}


?>
<!DOCTYPE html>
<html lang="pt-br">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="../css/reset.css">
    <link rel="stylesheet" href="../css/estilos.css">
    <link rel="stylesheet" href="../css/estilos-form.css">
    <link rel="stylesheet" href="../css/flexbox.css">
    <title>AluraPlay</title>
    <link rel="shortcut icon" href="./img/favicon.ico" type="image/x-icon">
</head>

<body>

    <!-- Cabecalho -->
    <header>

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

            <div class="cabecalho__icones">
                <a href="./enviar-video.html" 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>

</html>
2 respostas
if (!$id) {
    $statement = $pdo->query('SELECT * FROM videos WHERE id = ?;');
    $statement->bindValue(1, $id, PDO::PARAM_INT);
    $statement->execute();
    $statement->fetch(\PDO::FETCH_ASSOC);
}

Se não tiver ID, busque pelo ID. Não faz sentido esse if.

solução!

Descobri o problema, Vinicius. Na verdade acabei me passando tanto no if tanto no $pdo, pois coloquei o método query() e não o prepare(). Além de atribuir $video = $statement->fetch(\PDO::FETCH_ASSOC). Valeu.

if ($id !== false) {
    $statement = $pdo->prepare('SELECT * FROM videos WHERE id = ?;');
    $statement->bindValue(1, $id, PDO::PARAM_INT);
    $statement->execute();
    $video = $statement->fetch(\PDO::FETCH_ASSOC);
}