Insertion ajax avec PHP

Bonjour,
je cherche la bonne méthode pour insérer des données en BDD via JS/AJAX.
J'ai cherché mais je ne trouve pas
Le code JS
$(document).ready(function (){
  $("#publier").click(function (){
      $.ajax({
          url: 'subject.php',
          type: 'POST',
          data: {subject: $("#subject").val()},
          success: function (result) {
              alert('success');
          }
      });
  });
});


Le HTML
<form>  
                        <div class="div_flex">
                            <div class="col-1 col-sm-1 col-md-1 img-user">
                                <img src="<?php echo avatar($_SESSION['id_membre']); ?>" class="clipClass">
                            </div>
                            <div class="col-md-9">
                                <div class="form-group">
                                    <textarea class="textarea-subject" name="subject" id="subject" rows="3" placeholder="Tapez votre texte<?php echo membre_prenom($_SESSION['id_membre']); ?>"></textarea>
                                    <a class="btn_input"><i class="far fa-image" id="ico_image"></i><span class="name">Photos</span></a>
                                    <input type="file" name="img_sujet" id="imgSujet" value="" lang="fr" accept=".jpg,.jpeg,.gif,.png" onchange="loadFile(event)">
                                </div>
                            </div>
                        </div>
                        <div class="image" id="image">
                            <img src="" id="output" class="img-fluid" alt="">
                            <a class="btn_del" onclick="delFile(event)"><i class="fas fa-trash-alt delete" id="trash"></i></a>
                        </div>
                        <div id="testdiv"></div>
                        <hr>
                        <div class="ligne_top"></div>
                        <div>                         
                           <button type="button" class="btn btn-primary btn-sm publier" id="publier">Publier</button>	
                        </div>
                    </form>


Le PHP
require '../connexion.php';

$subject = $_POST['subject'];
$date_sujet = date("Y-m-d H:m:s");	
$id_user = $_SESSION['id_user'];
$timeStamp = time();
$imgSujet = $_FILES['img_sujet'];


    $sql_insert = "INSERT INTO sujet (id_user, date, texte_sujet) values (:id_user, :date, :texte_sujet)";
    $stmt = $pdo->prepare($sql_insert);
    include 'smiley_encode.php';	
    $nb = $stmt->execute(array(':id_user'=>$id_user, ':date'=>$date_sujet, ':texte_sujet'=>$subject));	
    $last_id = $pdo->lastInsertId();



Merci d'avance pour votre aide

Configuration: Macintosh / Safari 13.1


--
Bien PHPment et MySQLment
Delaville

6 réponses

  1. Modérateur
    Bonjour

    Le bon code js ??
    Ben.. c'est celui que tu nous montres....

    1. Mon problème est que ça ne marche pas, aucune insertion ne s'effectue.
      Je sollicite votre aide car je ne trouve pas l'erreur

      Merci
      1. Modérateur
        Commence par regarder la console JavaScript de ton navigateur lorsque tu exécute ce code Ajax et montre-nous ce que ça ta fiche.

        Nb: pour déboguer plus facilement les requêtes Ajax je t'invite fortement à utiliser le navigateur Firefox.
      2. Modérateur
        @jordane45Plutôt que de recréer une nouvelle discussion sur le forum pour ce problème.... Réponds à mes questions ça devrait aider !
    2. J'ai testé sur Firefox, la console ne me retrouve aucune erreur.

      J'ai réutilisé une fonction testée fonctionnelle dans un autre projet.

      function insertData(){
        var subject=$("#subject").val();
        var img_sujet=$("#img_sujet").val();
        
        var datas = {subject:subject,img_sujet:img_sujet};
        // AJAX code to send data to php file.
          $.ajax({
              type: "POST",
              url: "subject.php",
              //data: datas,
              data: datas,
              dataType: "JSON",
              success: function(data) {
                $("#message").html(data);
                $("p").addClass("alert alert-success");
              },
              error: function (xhr, ajaxOptions, thrownError) {
                alert(xhr.status);
                alert(thrownError);
              }
          });
        }
      


      En cliquant sur mon bouton publier (j'ai ajouté un
      onclick
      ) ma fonction
      affiche bien le
      $("p").addClass("alert alert-success");
      , donc je pas bien dans le success.
      Le problème est que les donnés ne sont pas transmises dans le PHP.
      Comment faire ?

      Merci
      1. Modérateur
        il faudrait que tu nous montres l'onglet réponse de ta requête ajax ...
        celle que tu peux visualiser dans l'onglet console de ton navigateur Firefox
    3. Après que j'ai cliqué sur mon bouton valider


      1. Modérateur
        Tu n'as pas activé le debug xhr dans ta console
    4. J'ai testé une autre fonction JS
      function insertData(){
        var form = $('form').get(0);
        var formData = new FormData(form);
        $.ajax({
          type		: 'POST', 
          url		: 'subject.php',
          data		: formData, 
          dataType	: 'json',
          processData: false,
          contentType: false,
          success: function(formData) {
            $("#message").html(formData);
            $("p").addClass("alert alert-success");
          },
          error: function (xhr, ajaxOptions, thrownError) {
            alert(xhr.status);
            alert(thrownError);
          }
        });
      }
      


      Mon fichier PHP
      require '../connexion.php';//connexion à la base
      
      $subject = $_POST['subject'];
      $date_sujet = date("Y-m-d H:m:s");	
      $id_user = $_SESSION['id_user'];
      $timeStamp = time();
      $imgSujet = $_FILES['img_sujet'];
      $sql_insert = "INSERT INTO sujet (id_user, date, texte_sujet) values (:id_user, :date, :texte_sujet)";
          $stmt = $pdo->prepare($sql_insert);
          include 'smiley_encode.php';	
          $nb = $stmt->execute(array(':id_user'=>$id_user, ':date'=>$date_sujet, ':texte_sujet'=>$subject));	
          $last_id = $pdo->lastInsertId();
          
          if (!empty($_FILES['img_sujet']['name'])) {                         
              $nom_fichier = $_FILES['img_sujet']['name'];					
              $ext         = explode('.', $nom_fichier);
              $ext         = strtolower($ext[count($ext) - 1]);
              $nom_md5     = md5($nom_fichier);
              $taille      = $_FILES['img_sujet']['size'];
              $type        = $_FILES['img_sujet']['type'];
              $tmp         = $_FILES['img_sujet']['tmp_name'];
              $chemin      = utf8_encode(stripslashes($nom_fichier));
      
              $dossier="blog/".$_SESSION['id_user'].''.$timeStamp.''.$last_id.".".$ext.""; 
              if(move_uploaded_file ($_FILES['img_sujet']['tmp_name'][$i], $dossier)) {
                  $img_sujet = $_SESSION['id_user'].''.$timeStamp.''.$last_id.".".$ext;	
                  $sql_img_sujet = "INSERT INTO img_sujet (id_sujet, id_user, date, img_sujet) values (:id_sujet, :id_user, :date, :img_sujet)";
                  $date_img = date("Y-m-d H:m:s");	
                  $stmt=$pdo->prepare($sql_img_sujet);
                  $nb = $stmt->execute(array(':id_sujet'=>$last_id, ':id_user'=>$id_user, ':date'=>$date_img, ':img_sujet'=>$img_sujet));				
              }
          }
      
          $array = [$_POST['subject'], $_FILES['img_sujet']];
          // J'indique au navigateur que je retourne du JSON
          header('Content-type: application/json');
          // Je transforme mon tableau en JSON et je l'imprime dans le body de ma réponse
          echo json_encode($array);
      


      HTML
      <form id="publie" action="subject.php" method="post" enctype="multipart/form-data">
                              <div class="div_flex">
                                  <div class="col-1 col-sm-1 col-md-1 img-user">
                                      <img src="<?php echo avatar($_SESSION['id_membre']); ?>" class="clipClass">
                                  </div>
                                  <div class="col-md-9">
                                      <div class="form-group">
                                          <textarea class="textarea-subject" name="subject" id="subject" rows="3" placeholder="Exprimez-vous, <?php echo membre_prenom($_SESSION['id_membre']); ?>"></textarea>
                                          <a class="btn_input"><i class="far fa-image" id="ico_image"></i><span class="name">Photos</span></a>
                                          <input type="file" name="img_sujet" id="img_sujet" value="" lang="fr" accept=".jpg,.jpeg,.gif,.png" onchange="loadFile(event)">
                                      </div>
                                  </div>
                              </div>
                              <div class="image" id="image">
                                  <img src="" id="output" class="img-fluid" alt="">
                                  <a class="btn_del" onclick="delFile(event)"><i class="fas fa-trash-alt delete" id="trash"></i></a>
                              </div>
                              <div id="testdiv"></div>
                              <hr>
                              <div class="ligne_top"></div>
                              <div>
                                 <button type="button" class="btn btn-primary btn-sm publier" id="publier" onclick="insertData()">Publier</button>	
                               
                                  
                                 
                              </div>
                              <p id="message"></p>
                          </form>
      


      Pour la réponse "teste" c'est que je tape dans le texarea de mon form.

      Je vais suivre le lien que tu m'a envoyé (dans la journée).
      Merci

      Discussions similaires

      probléme avec ajax svp

      4 réponses