Bonjour à toutes et à tous,
Explication du problème : Dans un formulaire de modification d'une publication effectuée par un producteur dans son espace perso, j'ai un bouton modifier avec une action javascript en jQuery permettant d'afficher un textarea avec le contenu de la dernière publication pour modification.
Lorsque je soumets le formulaire avec le bouton submit le contenu du champ textarea est "updaté" dans la base des publications (donc ok) par contre la page
renvoyée par le serveur est la page contenant le script php de mise à jour de la publication et non la page contenant la publication mise à jour.
Voici les fichiers impliqués :
et le fichier php permettant la mise à jour dans la table des publications
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 <code type="javascript"> /** script traitant de la mise à jour de la zone de texte de publication dans l'espace producteur */ $(document).ready(function() { $(".modifier").click(function() { // récupérer dans une variable la valeur de la zone de publication var publication = $(".zone_publier").text(); /** objectif : Une fois que nous avons récupéré la valeur textuelle de la div stockant la dernière publication du producteur, nous devons afficher le champ textarea du formulaire. Cependant ce champ textarea doit contenir la dernière publication du producteur afin que ce dernier puisse modifier celle-ci. */ // il faut créer un nouveau formulaire pour la modification du dernier texte publié par le producteur. // pour effectuer "un retour à la ligne" dans du texte il faut concaténer ce texte avec l'opérateur + var $form = $('<form name="form3" id="formTextModif" method="post" action="modif_publierTexte.php">' + '<textarea name="contenu" rows="15" cols="130" maxlength="5000" required="required">' + publication + '</textarea>' + '<div id="loader" style="display:none"><img src="img/loader.gif" alt="loader" /></div>' + '<p><input type="submit" class="publier" name="submit2" id="submit2" value="Publier" /></p>' + '</form>'); // on utilise la méthode prepend() pour ajouter le texte du formulaire dans la div modifierTexte du fichier zone_producteur.php $("#modifierTexte").prepend($form); $(".modifier").fadeOut(2000); $(".zone_ajout").fadeOut(2000); }); // fin $(".modifier").click(...) // lors de la soumission du formulaire $("#formTextModif").submit(function(e) { // pendant la soumission on affiche le loader d'attente ajax $("#loader").show(); e.preventDefault(); // empêcher le navigateur de soumettre lui même le formulaire // on récupère la valeur modifiée du champ textarea du formulaire var contenu = $(this).find("textarea[name=contenu]").val(); $.ajax({ url: $(this).attr('action'), type: $(this).attr('method'), data: $(this).serialize(), error: function() { alert("erreur !"); }, success: function(retour){ alert("Données obtenues : " + retour ); } }); // fin $.ajax }); // fin ("#formTextModif").submit() }); //fin $(document) </code>
Merci d'avance,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 <code type="php"> <?php /** Script effectuant le traitement de la mise à jour dans la table publicationS du texte publié depuis le formulaire*/ session_start(); // on débute une session pour récupérer les variables de session require_once 'includes/inc_connexion.php'; // pour se connecter à la Base de données include 'includes/inc_identification.php'; // pour accéder à l'identifiant de connexion $conn=opendb_conn(); // on se connecte à la Base de données if(isset($_POST['contenu']) && !empty($_POST['contenu']) && isset($_SESSION['id'])) { $contenu = htmlspecialchars($_POST['contenu']); $id = $_SESSION['id']; // id du producteur stocké en base //$date = date("Y-m-d H:i:s"); // requête pour la mise à jour de la publication du producteur en base $req = "update publications set texte=:texte, date=NOW() where idproducteur=:id order by publication_id desc limit 1"; // on prépare le traitement de la requête $stm=$conn->prepare($req); // Tentative de mise à jour en base d'une (nouvelle) publication en utilisant le mode transactionnel // bloc try ... catch() try { // on débute la transaction $conn->beginTransaction(); // on associe les marqueurs nommés avec les variables crées plus haut $stm->bindParam(':texte', $contenu, PDO::PARAM_STR); $stm->bindParam(':id', $id, PDO::PARAM_INT); // exécution de la requête $stm->execute(); // on commit $conn->commit(); print 'Mise à jour effectuée ...'; } catch(PDOException $e) { // on rollback si cela se passe mal $conn->rollback(); // on affiche un message d'erreur print '</br>'; print "Erreur lors de la mise à jour en base !: " . $e->getMessage() . "</br>"; } // fin bloc try ... catch() } // if(isset(...)) ?> </code>
Transact.
Partager