IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Enregistrer des données dans une table mysql via ajax


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 211
    Par défaut Enregistrer des données dans une table mysql via ajax
    Bonjour,

    J'essai d'insérer des données dans une table mysql via ajax et cela ne fonctionne pas alors je fais:
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $(".frmComment").submit(function() {
     
    $.ajax({
    method: "POST",
    url"../content/insertComment.php",
    data: $(".frmComment").serialize(),
    })
    .done(function() {
    $(".return").html("<link rel='stylesheet' type='text/css' href='../content/bootstrap-5.0.0-alpha3-dist/css/bootstrap.min.css'><p class='alert-success p-3 rounded text-center col-lg-4'>Votre commentaire a bien été enregistré !</p>")
    })
    return false;
    });
    Mon php:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    require_once '../controller/dbConfig.php';
     
                $stmt3 = $conn->prepare('UPDATE demandes SET myComment = ? WHERE demande_id = ?');
                $stmt3->bind_param('si', $_POST['myComment'], $_POST['hidden_demande_id']);
                $stmt3->execute();
                $stmt3->close();
    Mon formulaire:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <form action="" method="POST" name="frmComment" class="frmComment" id="frmComment">
                            <input type="hidden" name="hidden_demande_id" value="<?php echo $demande_id; ?>">
                            <div class="col">
                                <textarea class="col-lg-4 mb-1 myComment" name="myComment" id="myComment"></textarea>
                            </div>
                            <div class="col">
                                <button class="btn btn-secondary float-left" type="submit" name="regComment"
                                    id="regComment">Enregistrer</button>
                            </div>
                        </form>

    Je précise que mon php fonctionne bien et enregistre bien mes données dans ma table si je ne passe pas par ajax.

    Rien ne se passe et dans l'onglet network du débogueur quand je clique sur insertComment.php il n'y a rien donc pas d'erreur.

    Je vous remercie de votre aide

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 670
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 670
    Par défaut
    si vous ne voyez pas de requête AXAJ dans l'onglet "réseau", c'est qu'il y a un souci dans le code javascript donc c'est là que vous devez débuguer.

  3. #3
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 513
    Par défaut
    Bonjour,

    Il faut toujours utiliser le callback fail d'ajax pour t'assurer qu'il n'y a aucune erreur, et utiliser les arguments (data et err dans l'exemple) et aussi des console.log ou alert.

    Si l'insertion dans la base de donnée n'est pas effectuée, le message <p class='alert-success p-3 rounded text-center col-lg-4'>Votre commentaire a bien été enregistré !</p> s'affichera toujours, ce qu'il ne faut pas et donc tu dois générer le message en PHP et pas en js.

    Puis je ne vois pas l'intérêt de recharger le <link /> de bootstrap à chaque succès d'ajax, pourquoi ne pas le mettre tout au début de la page dans <head> tout simplement ou peu import ?

    Si tu utilises mysqli, as-tu essayé d'insérer des caractères spéciaux dans les commentaires par exemple ? aucun problème d'encodage ?

    Exemple :

    JS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    .done(function(data) {
        console.log("Done :",data);//cette ligne doit apparaitre dans la console du navigateur.
        $(".return").html(data);//le message du fichier php est enregistré dans data
    })
    .fail(function(err){
       alert("Erreur ajax :"+err);
    });
    PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ... 
    $stmt3->execute();
    if($stmt3->affected_rows>0) echo "<p class='alert-success p-3 rounded text-center col-lg-4'>Votre commentaire a bien été enregistré !</p>";
    else echo "<p class='alert-danger'>Aucune modification n'a été effectuée !</p>";
    $stmt3->close();

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 211
    Par défaut
    Merci à vous deux pour vos réponses .fail ne me renvoie aucune erreur ajax et je n'ai pas de problème de caractères spéciaux alors je vais continuer à chercher.

  5. #5
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 513
    Par défaut
    J'ai oublié un truc très important, la page est rechargée quand tu cliques sur le bouton submit, car il n'y a aucun preventDefault() dans ton code.

    Ajoutes là avant l'appel d'ajax :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $(".frmComment").submit(function(event) {
       event.preventDefault();//empêcher le rechargement de la page
       $.ajax(....)
    });

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 211
    Par défaut
    Maintenant l'enregistrement des données se fait bien sans recharger la page mais pour la récupération, il faut la recharger.

    Code js : 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
     
      $(document).ready(function() {
          getCommentaire();
    $(".frmComment").submit(function(event) {
                  event.preventDefault();
     
                  $("#myComment").val().replace(/<|>/g, "") // prevent xss;
     
                  $.ajax({
                      method: "POST",
                      url: "../content/insertComment.php",
                      data: $(".frmComment").serialize(),
                  })
     
                  .done(function(data) {
                          console.log("Done :", data);
                          $(".return").html(data);
                      })
                      .fail(function(err) {
                          alert("Erreur ajax :" + err);
                      });
                  return false;
              });
          });
     
          function getCommentaire() {
              let searchParams = new URLSearchParams(window.location.search)
              searchParams.has('demande_id')
              let demande_id = searchParams.get('demande_id')
              console.log(demande_id);
     
              $.ajax({
                  method: 'POST',
                  url: '../content/recupComment.php',
                  data: { "demande_id": demande_id },
                  success: function(data) {
                      $(".afficher").html(data);
                  }
              });
          }
             });

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 01/09/2018, 20h03
  2. Insertion des données dans une table mysql
    Par joulive dans le forum ASP
    Réponses: 6
    Dernier message: 15/04/2010, 20h55
  3. [MySQL] Enregistrement da données dans une table Mysql
    Par xunil2003 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/03/2010, 17h27
  4. enregistrement des logs dans une table mysql
    Par ferjani.kais dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/11/2007, 08h58
  5. Enregistrer des données dans une table à partir du code
    Par Ragnarok85 dans le forum Access
    Réponses: 4
    Dernier message: 24/01/2007, 13h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo