Bonjour,

Je suis actuellement entrain de suivre le tutoriel de Grafikart sur la creation d'un portfolio de A à Z, et quand j'edite une categorie ou une realisation, je n'ai pas le nom ni le contenu ni le slug, mais l'id dans les 3 champs.
Je vous mets les pages correspondantes :

work_edit.php

<?php 
include '../lib/includes.php';

if(isset($_POST['name']) && isset($_POST['slug'])) {
    checkCSRF();
    $slug = $_POST['slug'];
    if(preg_match('/^[a-z\-0-9]+$/', $slug)) {
        $name = $db->quote($_POST['name']);
        $slug = $db->quote($_POST['slug']);
        $category_id = $db->quote($_POST['category_id']);
        $content = $db->quote($_POST['content']);

        if(isset($_GET['id'])) {
            $id = $db->quote($_GET['id']);
            $db->query("UPDATE works SET name=$name, slug=$slug, content=$content, category_id=$category_id WHERE id=$id");
            setFlash('La réalisation a bien été modifie');
        } else {
            $db->query("INSERT INTO works SET name=$name, slug=$slug, content=$content, category_id=$category_id");
            setFlash('La réalisation a bien été ajouté');
        }
        header('Location: work.php');
        die();
    }else {
        setflash('Le slug n\'est pas valide', 'danger');
    }

}

if(isset($_GET['id'])) {
    $id = $db->quote($_GET['id']);
    $select = $db->query("SELECT * FROM works WHERE id=$id");
    if($select->rowCount() == 0) {
        setFlash("Il n'y a pas de réalisation avec cet ID", 'danger');
        header('Location: work.php');
        die();
    }
    $_POST = $select->fetch();
}

$select = $db->query('SELECT id, name from categories ORDER BY name ASC');
$categories = $select->fetchAll();
$categories_list = array();
foreach($categories as $category) {
    $categories_list[$category['id']] = $category['name'];
}

include '../partials/admin_header.php';

 ?>

<h1>Editer une réalisation</h1>

<form action="#" method="POST">
    <div class="form-group">
        <label for="name">Nom de la réalisation</label>
        <?= input('name'); ?>
    </div>
    <div class="form-group">
        <label for="slug">URL de la réalisation</label>
        <?= input('slug'); ?>
    </div>
    <div class="form-group">
        <label for="content">Contenu de la réalisation</label>
        <?= textarea('content'); ?>
    </div>
    <div class="form-group">
        <label for="category_id">Nom de la catégorie</label>
        <?= select('category_id', $categories_list); ?>
    </div>
    <?= csrfInput(); ?>
    <button type="submit" class="btn btn-default">Enregistrer</button>
</form>

 <?php include '../partials/footer.php'; ?>

form.php

<?php 

function input($id) {
    $value = isset($_POST[$id]) ? $_POST['id'] : '';
    return "<input type='text' class='form-control' id='$id' name='$id' value='$value'>";
}

function textarea($id) {
    $value = isset($_POST[$id]) ? $_POST['id'] : '';
    return "<textarea type='text' class='form-control' id='$id' name='$id'>$value</textarea>";
}

function select($id, $options = array()) {
    $return = "<select class='form-control' id='$id' name='$name'>";
    foreach($options as $k => $v) {
        $selected = '';
        if(isset($_POST['id']) && $k == $_POST['id']) {
            $selected = ' selected="selected"';
        }
        $return .= "<option value='$k' $selected>$v</option>";
    }
    $return .= '</select>';
    return $return;
}
 ?>

Merci de votre aide :)

3 réponses


Bonjour,

Je sais pas si cela peut jouer mais il y a un FROM en minuscule dans une requête.
De plus, regarder votre form.php, il y a des erreurs sur les conditions linéaires....

Reeko94
Auteur

Merci de m'avoir répondu aussi vite, je viens de modifier le from en majuscule . Mais pouvez-vous m'en dire plus sur les erreurs des conditions linéaires ?

Quelque soit la valeur de $_POST[$id], vous prenez $_POST['id']

$value = isset($_POST[$id]) ? $_POST['id'] : '';