La suppression ne marche pas!
Résolu
bonjour à tous je tente de supprimer des éléments dans ma base de donnée avec la méthode ajax ça ne marche pas
quand je clique sur supprimer rien ne se passe.
Pourriez vous me donner un coup de main svp
voici le code
voici script
le code php qui doit s'excuté pour supprimer
quand je clique sur supprimer rien ne se passe.
Pourriez vous me donner un coup de main svp
voici le code
<div class="uk-grid uk-grid-collapse" data-uk-grid-margin>
<div class="uk-width-large-3-10 hidden-print uk-visible-large">
<div class="md-list-outside-wrapper">
<ul class="md-list md-list-outside notes_list" id="notes_list">
<li class="heading_list uk-text-danger">Notes Importantes</li>
<?php
while ($donneeN=$envoiN->fetch()){ ?>
<li>
<a href="#" class="md-list-content" data-note-id="<?php echo $donneeN['libelle']; ?>">
<span class="md-list-heading uk-text-truncate"><?php echo $donneeN['titre']; ?></span>
<input name="note_id" id="noteid" class="md-list-head uk-text-truncate" type="hidden" placeholder="<?php echo $donneeN['id']; ?>" />
<span class="md-list-head uk-text-truncate" hidden="">
<?php echo $donneeN['id']; ?>
</span>
<span class="uk-text-small uk-text-muted"></br><?php echo $donneeN['datec']; ?>
</span>
</a>
</li>
<?php } ?>
</ul>
</div>
</div>
<div class="uk-width-large-7-10">
<div class="md-card md-card-single">
<form method="POST" action="../traitement/add_note.php" enctype="multipart/form-data">
<div class="md-card-toolbar hidden-print">
<div class="md-card-toolbar-actions">
<button type="submit" class="md-btn md-btn-success md-btn-wave-light waves-effect waves-button waves-light" href=""><i class="md-icon material-icons"></i></button>
<div class="md-card-dropdown" data-uk-dropdown="{pos:'bottom-right'}">
<i class="md-icon material-icons"></i>
<div class="uk-dropdown uk-dropdown-small">
<ul class="uk-nav">
<li><a id="supprimer" >
<i class="material-icons uk-margin-small-right" ></i>supprimer</a></li>
</ul>
</div>
</div>
</div>
<input name="note_title" id="note_title" class="md-card-toolbar-input" type="text" placeholder="Ajouter un titre" />
<input name="note_id" id="note_id" class="md-card-toolbar-input" type="hidden" placeholder="" />
</div>
<div class="md-card-content">
<textarea name="note_content" id="note_content" class="md-input" cols="30" rows="12" placeholder="Ajouter une note"></textarea>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
voici script
<script>
$('#supprimer').click(function(){
var note_id = $('#note_id').val();
$.ajax({
url : "../traitement/delete_note.php",
method : "post",
data : {note_id: note_id},
success : function(reponse){
//alert(note_id);
}
});
});
});
</script>
le code php qui doit s'excuté pour supprimer
<?php
if(isset($_POST['note_id'])){
$note_id = $_POST['note_id'];
require "../../inc/bd_con.php";
$result = $db->prepare("DELETE FROM note WHERE id='$note_id'");
$result->execute();
if($result){
echo 'data supprimer';
}
}
?>
10 réponses
Résumé de la discussion
Problème central : le bouton supprimer ne déclenche pas la requête Ajax et l identifiant de la note n est pas transmis correctement, ce qui empêche l effacement en base de données. Des éléments bloquants apparaissent : l identifiant est pris dans un champ caché unique, alors que chaque élément doit fournir son propre identifiant, et l identifiant du bouton supprimer est dupliqué. Pour corriger, appliquer une délégation d évènement sur un élément parent, lire l identifiant via data-note-id du bouton cliqué et envoyer cette valeur, puis sécuriser la requête PDO avec des paramètres bind et vérifier retour.
-
ModérateurBonjour,
Ajoute le "error" dans ton ajax$.ajax({ url : "../traitement/delete_note.php", method : "post", data : {note_id: note_id}, success : function(reponse){ //alert(note_id); console.log('Suppression OK',note_id); }, error: function (jqXHR, textStatus, errorThrown) { console.log('error ajax',qXHR, textStatus,); } });
et regarde dans la console de ton navigateur si il n'y a rien qui s'affiche !
-
je vois pas mal de msg d'error qui s'affiche
-
quand je vais dans la partie console du navigateur voici les messages d'erreur. quand je clique sur le bouton pour supprimer rien ne se produit, rien ne s'affiche
-
quand je fais ce code ci le message alert s'affiche avec l'id mais ne supprime rien du tout
$('#supprimer').click(function(){ var note_id = $('#note_id').val(); $.ajax({ url : '../traitement/delete_note.php', method : 'post', data : {note_id: note_id}, success : function(reponse){ alert(note_id); } }); });-
Salut,
normal JavaScript fonctionne (j suppose que vous avez corrigé vos erreurs pour cela) sur l'ordinateur client(la personne qui affiche le site) et la base de données est sur le serveur.
AJAX fait un pont entre les 2 en utilisant des (fichiers de)métadonnées en XML, CSV, JSON...etc... de façon asynchrone(les requêtes serveurs sont faites en amont de leur utilisation pour les fournir de façon préparées quand on en a besoin.
C'est ici que ça se passe si vous voulez fonctionner sur le serveur et à fortiori envoyer une requête à la base de données:
url : '../traitement/delete_note.php',
Je veut dire dans le fichier PHP qui est indiqué.
Pour plus d'informations sur le langage de bases de données que PHP permet d'envoyer via PDO:
https://fr.wikipedia.org/wiki/Structured_Query_Language -
ModérateurPeux tu faire un console.log de la variable reponse et nous montrer ce que ça donne ?
$('#supprimer').click(function(){ var note_id = $('#note_id').val(); $.ajax({ url : '../traitement/delete_note.php', method : 'post', data : {note_id: note_id}, success : function(reponse){ console.log("reponse ajax",reponse); alert(note_id); } }); });
Il faudrait également nous montrer le code de ton fichier delete_note.php
-
-
l'id s'affiche met la suppression ne s'effectue pas
-
delete_note.php
<?php if(isset($_POST['note_id'])){ $note_id = $_POST['note_id']; require "../../inc/bd_con.php"; $result = $bd->prepare("DELETE FROM note WHERE id='$note_id' "); $result->execute(); if($result){ echo 'data supprimer'; } } ?> -
ModérateurJe t'ai demandé de nous montrer ce que t'affiche la console de ton navigateur..........
Où est-ce ????
Concernant ton PHP, je t'invite lire ET à appliquer les conseils suivants :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Et donc.. à le modifier comme ceci:<?php error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //bdd require_once "../../inc/bd_con.php"; //récupération PROPRE des variables AVANT de les utiliser $note_id = !empty($_POST['note_id']) ? $_POST['note_id'] : NULL; $result = null; if($note_id){ $sql = "DELETE FROM note WHERE id=:note_id "; $datas = array(':note_id'=>$note_id); try{ $result = $bd->prepare($sql); $result->execute(); if($result){ $result = 'note supprimée'; } }catch(Exception $e){ $result = "Erreur " . $e->getMessage(); } } echo json_encode($result); ?>
Et à remettre le ERROR dans ton code JS...$.ajax({ url : "../traitement/delete_note.php", method : "post", data : {note_id: note_id}, success : function(reponse){ console.log("reponse ajax",reponse); alert(note_id); }, error: function (jqXHR, textStatus, errorThrown) { console.log('error ajax',jqXHR, textStatus,); alert('ERREUR ! Merci de consulter la console pour voir le souci'); } });
Bien entendu, quand tu dis que la suppression ne se fait pas... tu parles bien DANS LA BDD ?
Car si c'est "juste" visuellement sur la page, c'est normal vu que tu n'as rien codé dans ce sens....
-
le message dans la console du navigateur
-
-
@jordane45hoo je viens de voir dans la console
-
@jordane45c'est donc la requête sql ou il y'a un souci
-
@jordane45j'ai cliqué sur debogueur dans le navigateur et j'ai ce messae "
reponse ajax "Erreur SQLSTATE[HY093]: Invalid parameter number: no parameters were bound" "
-
-
j'ai modifié le code delecte_note.php et celui du script ajax mais la suppression ne s'effectue toujours pas j'ai juste le message alert avec l 'id
-
ModérateurEt qu'as tu modifié ?
Si tu ne nous le montres pas... ça va être compliqué de t'aider.
De plus, j'aimerai assez que tu nous montres une capture de la console javascript de ton navigateur lorsque tu cliques sur le "supprimer"...
De préférence, utiliser Firefox pour faire tes tests.
La console (au niveau ajax) est plus pratique.
Il faudra déplier la petite fleche qui se trouve devant la ligne de ton appel ajax et nous montrer le contenu de l'onglet Paramètres et de l'onglet reponse
-
@jordane45voici limage quand je clique sur "supprimer" , j'ai modifié le script en mettant ce que vous m'aviez envoyé
-
-
Modérateur
-
@jordane45
$('#supprimer').click(function(){ var note_id = $('#note_id').val(); $.ajax({ url : "../traitement/delete_note.php", method : "post", dataType : "json", data : {note_id: note_id}, success : function(reponse){ console.log("reponse ajax",reponse); alert(note_id); } }); });
-
-
ModérateurJe viens de voir des erreurs dans le code php que je t'avais donné....
ceci devrait corriger le tir<?php error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //bdd require_once "../../inc/bd_con.php"; //récupération PROPRE des variables AVANT de les utiliser $note_id = !empty($_POST['note_id']) ? $_POST['note_id'] : NULL; $result = array(); $result['DEBUG'] = $_POST; if($note_id){ $sql = "DELETE FROM note WHERE id=:note_id "; $datas = array(':note_id'=>$note_id); try{ $prep = $bd->prepare($sql); $res = $prep->execute($datas); if($res){ $result['SUCCESS'] = 'note supprimée'; } }catch(Exception $e){ $result['ERROR'] = "Erreur " . $e->getMessage(); } }else{ $result['ERROR'] = 'note_id Null ou inconnu !'; } echo json_encode($result); ?>
-
-
Modérateur@delavega470Moi ce qui m'étonne .. ce sont les \n que tu as autour de ton id ...
A la limite, déjà pour limiter les soucis, tu peux modifier le code comme ceci$note_id = !empty($_POST['note_id']) ? intval($_POST['note_id']) : NULL;
Il serait bien également de t'assurer que tes fichiers sont bien encodés en utf8 sans BOM ( voir chapitre 1 de ce lien )
https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8
Après.. le script ne remontant plus d'erreur....il n'y a plus aucune raison pour que ça ne fonctionne pas.
Peux tu nous faire un DUMP (structure + données ) de ta table note ? -
@jordane45
$note_id = !empty($_POST['note_id']) ? intval($_POST['note_id']) : NULL;
j'ai ajouté intval() et c'est passé merci beaucoup -
Modérateur@delavega470Alors mets le sujet en résolu.
Mais bon.. ça n'empeche pas qu'il n'est pas normal que tu aies des \n autour de ton ID envoyé en ajax...
-