Récupérer l'id pour supprimer l'enregistrement en bdd

Résolu/Fermé
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 - Modifié le 6 janv. 2023 à 16:42
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 - 7 janv. 2023 à 10:08

Bonjour à tous,

J'ai créé un pense-bête dynamique sur une page de ma webapplication. Les taches ajoutées sont enregistrées dans une base de données plutôt que dans un localStorage car elles doivent être accessibles par différents utilisateurs sur différents PC.

J'arrive à charger la liste au chargement de la page, je sais ajouter des éléments à la liste mais je bloque sur la méthode la plus efficace pour cibler une tache terminée afin de la supprimer en base de données. Je n'arrive pas à passer un paramètre dans la class, ni dans l'id (qui est différent pour chaque tâche).

Pouvez-vous m'aider ?
D'avance merci !

<article class="accueil4">
    <h1>Pense bête !</h1>
    <input class="input-formulaire" id="tache" type="text"/>
    <button id="add">
        <i class="fa fa-plus btn-ajout" alt="Ajouter un article" title="Ajouter un article"></i>
    </button>
    <div class="taches" id="taches">
    </div>
</article>
// GESTION DU PENSE-BÊTE :
$(document).ready(function() {
    // Chargement au démarrage du pense-bête :
    $.ajax({
        type: 'POST',
        url: 'pensebete-ajout.php',
        data: {},
        success: function(html) {
            $('#tache').val('');
            $('#taches').html(html);
        }
    });

    // Enregistrement dynamique d'une tâche dans le pense-bête : 
    $('#add').on('click', function() {
        var tache = $('#tache').val();
        if (tache != '') {
            $.ajax({
                type: 'POST',
                url: 'pensebete-ajout.php',
                data: {
                    libelle: tache
                },
                success: function(html) {
                    $('#tache').val('');
                    $('#taches').html(html);
                }
            });
        }
    });

    // Suppression dynamique d'une tâche dans le pense-bête : 
    const onClick = (événement) => {
        console.log(événement.srcElement.id);   // Affiche le bon n° id
    }
    window.addEventListener('click', onClick);
});

pensebete-ajout.php

<?php

require ("connexion.php");

if (isset($_POST['libelle']) && !empty($_POST['libelle'])) {
	$libelle = $_POST['libelle'];
    //Requête préparée pour l'ajout :
    $requete = $bdd->prepare('INSERT INTO taches(libelle) VALUES(:libelle)');
    // Exécution de la requête :
    $requete->execute(array(
    	'libelle' => $libelle
    ));
}

$requete2 = $bdd->query('SELECT taches.* FROM taches');
foreach($requete2 as $valeur) {
    echo $valeur['libelle'] . '<i id = "' . $valeur['id_tache'] . '" class="fa fa-trash alerte" aria-hidden="true"></i><br>';
}
?>


Linux / Chrome 108.0.0.0

5 réponses

emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 20
Modifié le 7 janv. 2023 à 09:25

J'ai trouvé !


Par rapport à mon post #2 j'ai modifié plusieurs choses : 

1. Plutôt que de cibler l'éventuel clic sur le <i> je cible au dessus : la DIV id='taches'
    (Je surveille ainsi toutes les poubelles).
2. La ligne 4 de mon Javascript post #2 n'était pas complète, il manquait l'info qui permettait de cibler le <i>.
    Comme je n'arrivait à rien avec la class = 'fa fa-trash alerte',  j'ai ajouté dans la génération PHP un id = 'trash'
3. Enfin, pour récupérer la valeur du data-attribute, j'ai utilisé this.attr

Merci Jordane pour m'avoir aiguillé vers la solution !

Le JavaScript qui fonctionne : 

// Suppression dynamique d'une tâche dans le pense-bête : 
$('#taches').each(function () {
    var $this = $(this);
    $this.on('click', '#trash', function () {
        alert($(this).attr("data-attribute"));
    });
});

LE CODE COMPLET : 
Code HTML : 

 

<article class="accueil4">
    <h1>Pense bête !</h1>
    <input class="input-formulaire" id="tache" type="text"/>
    <button id="add">
        <i class="fa fa-plus btn-ajout" alt="Ajouter un article" title="Ajouter un article"></i>
    </button>
    <div class="taches" id="taches">
    </div>
</article>

Le Javascript, sur la même page que le HTML : 
 

// GESTION DU PENSE-BÊTE :
$(document).ready(function() {
    // Chargement au démarrage du pense-bête :
    $.ajax({
        type: 'POST',
        url: 'pensebete-ajout.php',
        data: {},
        success: function(html) {
            $('#tache').val('');
            $('#taches').html(html);
        }
    });

    // Enregistrement dynamique d'une tâche dans le pense-bête : 
    $('#add').on('click', function() {
        var tache = $('#tache').val();
        if (tache != '') {
            $.ajax({
                type: 'POST',
                url: 'pensebete-ajout.php',
                data: {
                    libelle: tache
                },
                success: function(html) {
                    $('#tache').val('');
                    $('#taches').html(html);
                }
            });
        }
    });
    // Suppression dynamique d'une tâche dans le pense-bête : 
    $('#taches').each(function() {
        var $this = $(this);
        $this.on('click', '#trash', function() {
            $id = $(this).attr("data-attribute");
            if ($id != '') {
                $.ajax({
                    type: 'POST',
                    url: 'pensebete-ajout.php',
                    data: {
                        id: $id
                    },
                    success: function(html) {
                        $('#tache').val('');
                        $('#taches').html(html);
                    }
                });
            }
        });
    });
});

Code php : 

<?php

require ("connexion.php");

// Ajout d'une nouvelle tâche dans la BDD :
if (isset($_POST['libelle']) && !empty($_POST['libelle'])) {
	$libelle = $_POST['libelle'];
    //Requête préparée pour l'ajout :
    $requete1 = $bdd->prepare('INSERT INTO taches(libelle) VALUES(:libelle)');
    // Exécution de la requête :
    $requete1->execute(array(
    	'libelle' => $libelle
    ));
}

// Suppression d'une tâche dans la BDD :
if (isset($_POST['id']) && !empty($_POST['id'])) {
    $id_tache = $_POST['id'];
    //Requête préparée pour la suppression :
    $requete2 = $bdd->prepare('DELETE FROM taches WHERE id_tache = :id_tache');
    $requete2->execute(array(
        'id_tache' => $id_tache
    ));
}

// Chargement des tâches de la BDD à afficher dans le pense-bête : 
$requete3 = $bdd->query('SELECT taches.* FROM taches');
foreach($requete3 as $valeur) {
    echo $valeur['libelle'] . '<i id = "trash" data-attribute= "' . $valeur['id_tache'] . '" class="fa fa-trash alerte" aria-hidden="true"></i><br>';
}
?>
1
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
6 janv. 2023 à 16:53

Bonjour

Utilise un data-attribute pour y stocker laidi de chaque élément au niveau de ton HTML.

Il te sera alors facile de récupérer la valeur dans ton JS.


0
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 20
Modifié le 6 janv. 2023 à 20:00

Merci pour ton aide Jordan...

Je tourne autour de cette syntaxe mais sans résultat ! (Même en console !)
 

$requete2 = $bdd->query('SELECT taches.* FROM taches');
foreach($requete2 as $valeur) {
    echo $valeur['libelle'] . '<i data-id= "' . $valeur['id_tache'] . '" class="fa fa-trash alerte" aria-hidden="true"></i><br>';
}
// Suppression dynamique d'une tâche dans le pense-bête : 
$('.fa').each(function () {
    var $this = $(this);
    $this.on("click", function () {
        alert($(this).data('id'));
    });
});
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
Modifié le 6 janv. 2023 à 20:04

Regarde au niveau de ton html (le code généré de la page ) si ton id apparait bien dans le data attribute

Et côté JS, tu peux remplacer ton code par :

// Suppression dynamique d'une tâche dans le pense-bête : 
$('.fa').click(function() {
    let id = $(this).data('id');
    alert('id',id);

});

PS: pense aussi à regarder dans la console de ton navigateur si il n'y a pas des erreurs de code

PS²: Jordane (avec un E ..(le prénom a été "francisé" ... ))

0
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 20
6 janv. 2023 à 20:19

Désolé d'avoir écorché ton prénom, pourtant ce n'est pas la première fois que je l'écris !  ;-)

Le html généré donne ça :
 

<div class="taches" id="taches">
	Lancer taxe séjour
	<i data-id="27" class="fa fa-trash alerte" aria-hidden="true"></i>
	<br>
	Modifier client 87
	<i data-id="28" class="fa fa-trash alerte" aria-hidden="true"></i>
	<br>
</div>

Il ne se passe rien non plus avec ton code, et je ne comprends pas, la console reste désespérément vide !
Est-ce que c'est possible de surveiller un clic sur un <i> </i> ?

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 20
6 janv. 2023 à 20:42

L'alert fonctionne si je clic sur le :
<button id="add">
    <i class="fa fa-plus btn-ajout" alt="Ajouter un article" title="Ajouter un article"></i>
</button>

Du coup, je modifie  Javascript ainsi : 
$('.fa-trash').click(function() {
    let id = $(this).data('id');
    alert('id',id);
});

Mais toujours rien, même en console !

0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
6 janv. 2023 à 21:37

Il le faudrait le code source généré complet de ta page

0
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 20 > jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024
7 janv. 2023 à 09:11

Étrange : Quand je fais clic droit afficher la source, ma DIV 'taches' reste vide, alors qu'à l'écran il y a bien 2 taches !
 

Code source généré : 

<article class="accueil4">
	<h1>Pense bête !</h1>
	<input class="input-formulaire" id="tache" type="text"/>
	<button id="add"><i class="fa fa-plus btn-ajout" alt="Ajouter un article" title="Ajouter un article"></i></button>
	<div class="taches" id="taches"></div>
</article>
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024
7 janv. 2023 à 10:08

On ne s'est pas compris...

Tu affiches ta page ... Puis tu fais ctrl+u 

Tu copies l'intégralité du code et tu le colles ici 

0