Insertion ajax avec PHP

delaville81 Messages postés 209 Statut Membre -  
delaville81 Messages postés 209 Statut Membre -
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. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour

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

    0
  2. delaville81 Messages postés 209 Statut Membre
     
    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
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      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.
      0
      1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Plutôt que de recréer une nouvelle discussion sur le forum pour ce problème.... Réponds à mes questions ça devrait aider !
        0
  3. delaville81 Messages postés 209 Statut Membre
     
    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
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      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
      0
  4. delaville81 Messages postés 209 Statut Membre
     
    Après que j'ai cliqué sur mon bouton valider


    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Tu n'as pas activé le debug xhr dans ta console
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. delaville81 Messages postés 209 Statut Membre
     




    Merdi de ton aide jordan45
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Que contient ton fichier php ?
      Il semble qu'il renvoie une réponse : "test"
      Mais je ne trouve aucune trace dans le code PHP que tu nous as posté précédemment de ce retour...

      De plus applique les consignes donné ton ce lien

      https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs


      .
      0
  7. delaville81 Messages postés 209 Statut Membre
     
    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
    0