Bonjour à toutes et à tous.
Je rencontre une petite embûche que je n'arrive pas à franchir seul :-(
Je n'arrive pas à supprimer mes catégories... et pourtant, je n'ai aucun message d'erreur.
Après la validation de la suppression, ma catégorie est toujours en place. J'ai bel et bien ma clé qui s'affiche dans l'url:
"Portfolio/admin/ category.php?delete2&csrf=5785e942e81cdc624e3d357a5e787f01"

Mon problème peut il venir de la base de donnée ?

Voici ce que contient ma page category.php:

<?php
include '../lib/includes.php';
include '../partials/admin_header.php';
if(isset($_GET'delete'])){
    checkCsrf();
    $id = $db->quote($_GET'delete']);
    $db->query("DELETE FROM categories WHERE id=$id");
    setFlash('La catégorie à bien été supprimée');
    header('Location:category.php');
    die();
}
$select = $db->query('SELECT id, name, slug FROM categories');
$categories = $select->fetchALL();
?>
<section class="container">
<h1>Les catégories</h1>

<table class="table table-striped">
    <thead>
        <tr>
            <th>Id</th>
            <th>Nom</th>
            <th>Actions</th>
        </tr>
    </thead>
    <tbody>
            <?php foreach ($categories as $category): ?>
            <tr>
                <td><?= $category'id'];?></td>
                <td><?= $category'name'];?></td>
                <td>
                    <a href="category_edit.php?id=<?= $category'id'];?>" class="btn btn-default">Editer</a>
                    <a href="?delete<?= $category'id']; ?>&<?=csrf();?>" class="btn btn-error" onclick="return confirm('Voulez vous vraiment supprimer ce post ?');">Supprimer</a> 

                </td>
            </tr>
            <?php endforeach; ?>
    </tbody>

</table>

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

Ainsi que ma page auth.php:

<?php
session_start();
if(!isset($auth)){
    if(!isset($_SESSION'Auth']'id'])){
    header('Location:' .WEBROOT. 'login.php');
    die();
    }
}
if(!isset($_SESSION'csrf'])){
    $_SESSION'csrf'] = md5(time() + rand());
}
function csrf(){
    return 'csrf=' . $_SESSION'csrf'];
}
function checkCsrf(){
    if(!isset($_GET'csrf']) || $_GET'csrf'] != $_SESSION'csrf']){
        header('Location:' . WEBROOT .'csrf.php');
        die();
    }
}
?>

Merci infiniment pour vos conseils.
Cordialement.

5 réponses


Carouge10
Réponse acceptée

Je sais mais il ne manquerai pas quelque chose entre les deux ?

Bonjour,

Regarde ton url et identifie les éléments qui y sont.
Petit aide : "delete2" c'est quoi.... ?

delete2 représente mon ID numéro 2 (la catégorie qui doit être supprimée)...

Il manque un signe "="
Je vais relire mon code.

Mon erreur venait d'une faute d’inattention auprès de mon code (ligne 39).

<a href="?delete=<?= $category'id']; ?>&<?=csrf();?>" class="btn btn-error" onclick="return confirm('Voulez vous vraiment supprimer ce post ?');">Supprimer</a>

Merci beaucoup de m'avoir guidé jusqu'ici sans me donner de réponse.
Vous m'avez permis de regarder au bon endroit.
J'apprécie beaucoup l'aide que les gens nous apportent sur ce forum.

Bien à vous.