Bonjour
Je suis le tuto PDO de la formation PHP
J'en suis au code ou il faut créer un nouvel article.

Pourtant tout me semble bon dans le code...

Voici le code :

<?php 
$pdo = new PDO('sqlite:../data.db', null, null, [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ
]);
$erreur = null;
try{
    if(isset($_POST['name'], $_POST['content'])){    

        $query = $pdo->prepare('INSERT INTO posts (name, content, created_at) VALUES (:name, :content, :created)');

        $query->execute([
            'nom' => $_POST['name'],
            'content' => $_POST['content'],
            'created' => time()
        ]);
        header('Location: /blog/edit.php?id=' . $pdo->lastInsertId());

    }
    $query = $pdo->query('SELECT * FROM posts');
    $posts = $query->fetchAll();
}catch(PDOException $e){
    $erreur = $e->getMessage();
}

require '../elements/header.php'; ?>
<div class="container">
<?php if($erreur): ?>
<div class="alert alert-danger"><?= $erreur ?></div>
<?php else: ?>
<ul>
    <?php foreach($posts as $post): ?>
        <li><a href="/blog/edit.php?id=<?=$post->id?>"><?= htmlentities($post->name) ?></a></li>
    <?php endforeach ?>
</ul>

<form action="" method="post">
            <div class="form-group">
                <input class="form-control" type=text name=name placeholder="Nom de l'article"/>
            </div>
            <div class="form-group">
                <textarea class="form-control" name=content placeholder="Saisir le contenu de l'article"></textarea>
            </div>
            <button class="btn btn-primary">Sauvegarder</button> 
        </form>

<?php endif ?>

</div>

<?php require '../elements/footer.php'; ?>

Et lorsque j'execute mon formulaire, ça reste sur la même page et ça me renvoi ce message d'erreur :

SQLSTATE[HY000]: General error: 25 column index out of range

3 réponses


Bonjour,

        $query->execute([
            'name' => $_POST['name'],
            'content' => $_POST['content'],
            'created' => time()
        ]);

au lieu de

        $query->execute([
            'nom' => $_POST['name'],
            'content' => $_POST['content'],
            'created' => time()
        ]);
tod
Auteur

Ha oui effectivement... merci bien !

Penses à mettre le sujet en résolu.