Insertion ajax avec PHP

Fermé
delaville81 Messages postés 188 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 12 avril 2024 - 7 sept. 2020 à 12:01
delaville81 Messages postés 188 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 12 avril 2024 - 9 sept. 2020 à 12:39
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

A voir également:

6 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
7 sept. 2020 à 13:04
Bonjour

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

0
delaville81 Messages postés 188 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 12 avril 2024
7 sept. 2020 à 13:40
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
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
7 sept. 2020 à 19:46
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
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024
7 sept. 2020 à 21:09
Plutôt que de recréer une nouvelle discussion sur le forum pour ce problème.... Réponds à mes questions ça devrait aider !
0
delaville81 Messages postés 188 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 12 avril 2024
8 sept. 2020 à 12:30
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
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
8 sept. 2020 à 13:09
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
delaville81 Messages postés 188 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 12 avril 2024
8 sept. 2020 à 16:21
Après que j'ai cliqué sur mon bouton valider




0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
8 sept. 2020 à 18:51
Tu n'as pas activé le debug xhr dans ta console
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
delaville81 Messages postés 188 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 12 avril 2024
9 sept. 2020 à 12:15




Merdi de ton aide jordan45
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
9 sept. 2020 à 12:21
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
delaville81 Messages postés 188 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 12 avril 2024
9 sept. 2020 à 12:39
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