Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
942 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

Ajout nouveau module+sauvegarde en BD

n°2305065
MaybeEijOr​Not
but someone at least
Posté le 30-08-2017 à 16:10:02  profilanswer
 

Reprise du message précédent :
Normalement si ça devrait le faire, qu'est-ce qui se passe quand tu le fais? Sinon faut revoir le JS si ça ne va pas.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
mood
Publicité
Posté le 30-08-2017 à 16:10:02  profilanswer
 

n°2305109
mecano31
Posté le 31-08-2017 à 09:49:11  profilanswer
 

Je pense que je vais le laisser comme ça et je le ferai évoluer plus tard.
Mais j'ai réfléchis à un autre problème.  
A ce stade il est impossible de rajouter un module dont le datatype n'existe pas encore dans la liste des modules (bloc_2).

n°2305110
mecano31
Posté le 31-08-2017 à 09:52:14  profilanswer
 

Je pense que je vais le laisser comme ça et je le ferai évoluer plus tard.
Mais j'ai réfléchis à un autre problème.  
A ce stade il est impossible de rajouter un module dont le datatype n'existe pas encore dans la liste des modules (bloc_2).
Dans mon switch je ne peux pas rajouter un datatype qui n'existe pas.

n°2305140
MaybeEijOr​Not
but someone at least
Posté le 31-08-2017 à 20:39:19  profilanswer
 

Non en effet mais je ne vois pas trop ce que tu voudrais faire de plus, après c'est quasiment partir sur un editeur HTML ?


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2305397
mecano31
Posté le 06-09-2017 à 09:44:00  profilanswer
 

Ce n'est pas grave !  
Je laisse comme ça en attendant.
C'est un plaisir d'avoir échangé avec toi.
Merci infiniment ! A bientôt !

n°2305424
MaybeEijOr​Not
but someone at least
Posté le 06-09-2017 à 22:33:19  profilanswer
 

Ok pas de problème, je ne vois juste pas ce que tu voudrais faire de plus au niveau du datatype car pour moi si tu veux que l'utilisateur puisse ajouter son propre datatype ça revient à lui proposer un éditeur HTML.
 
Enfin n'hésite pas si tu as d'autres questions.
 
a+.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2305509
mecano31
Posté le 09-09-2017 à 12:14:02  profilanswer
 

J'ai un autre souci.
En effet, j'aimerais en survolant un élément (image, titre, texte, lien,...etc) pouvoir cliquer dessus et ouvrir une modale me permettant de modifier son contenu.  
Il s'agit de la mise à jour puisque le module est déjà enregistré en base de données. Tout marche bien jusqu'au niveau de la mise à jour. J'aimerais, quand je modifie un élément, pouvoir l'afficher automatiquement après la fermeture de la modale sans recharger la page. Ce qui n'est pas le cas. Quand je modifie un contenu et l'enregistre en base de données, il faut que je recharge ma page pour voir le changement. Ce qui n'est pas cool.
 
Voici le lien jsfiddle avec mon exemple : https://jsfiddle.net/mecano/fqcgn0vj/3/
 
Et la partie traitement PHP :
 

Code :
  1. //récupération "propre" des variable)
  2.     $img = isset($_POST['img']) ? $_POST['img'] : NULL;
  3.     $titre = isset($_POST['titre']) ? $_POST['titre'] : NULL;
  4.     $texte = isset($_POST['texte']) ? $_POST['texte'] : NULL;
  5.     $prix = isset($_POST['prix']) ? $_POST['prix'] : NULL;
  6.     $url = isset($_POST['url']) ? $_POST['url'] : NULL;
  7.     $url_titre = isset($_POST['url_titre']) ? $_POST['url_titre'] : NULL;
  8.     $id = !empty($_POST['id']) ? $_POST['id'] : NULL;
  9.     function update_content($img,$titre,$texte,$prix,$url,$url_titre,$id){
  10.         if ($img) {
  11.             $sql = "UPDATE test_newsletter SET image = :img WHERE id = :id";
  12.             $datas = array(":img"=>$img, ":id"=>$id);
  13.             return queryExec($sql,$datas);
  14.         } elseif ($titre) {   
  15.             $sql = "UPDATE test_newsletter SET titre = :titre WHERE id = :id";
  16.             $datas = array(":titre"=>$titre, ":id"=>$id);
  17.             return queryExec($sql,$datas);
  18.         } elseif ($texte) {   
  19.             $sql = "UPDATE test_newsletter SET texte = :texte WHERE id = :id";
  20.             $datas = array(":texte"=>$texte, ":id"=>$id);
  21.             return queryExec($sql,$datas);
  22.         } elseif ($prix) {   
  23.             $sql = "UPDATE test_newsletter SET prix = :prix WHERE id = :id";
  24.             $datas = array(":prix"=>$prix, ":id"=>$id);
  25.             return queryExec($sql,$datas);
  26.         } elseif ($url && $url_titre) {   
  27.             $sql = "UPDATE test_newsletter SET url = :url, url_titre = :url_titre WHERE id = :id";
  28.             $datas = array(":url"=>$url, ":url_titre"=>$url_titre, ":id"=>$id);
  29.             return queryExec($sql,$datas);
  30.         }
  31.     }
  32.     function queryExec($sql,$datas){
  33.         global $db;
  34.         try {
  35.             $req = $db->prepare($sql);
  36.             $res = $req->execute($datas);
  37.             $result = array(
  38.                'status'=> $res,
  39.                'msg'=>'Saisie enregistrée avec success !',
  40.                'debug'=>array("requete"=>$sql, "datas"=>$datas)
  41.             );
  42.         } catch (Exception $e) {
  43.             //erreur dans la requete
  44.             $result = array(
  45.                'status'=>false,
  46.                'msg'=>'Erreur ! '.$e->getMessage(),
  47.                'debug'=>array("requete"=>$sql, "datas"=>$datas)
  48.             );
  49.         }
  50.         return $result;
  51.     }
  52.     if($id && ($img || $titre || $texte || $prix || $url || $url_titre)) {
  53.         $msg = update_content($img,$titre,$texte,$prix,$url,$url_titre,$id); 
  54.         print_r($msg);
  55.     } else {
  56.         //pas d'ID
  57.         $msg = array( 'status'=>false,
  58.             'msg'=>"Erreur !",
  59.             'debug'=>$_POST
  60.         );
  61.     }
  62.     // send data as json format
  63.     echo json_encode($msg);

n°2305521
MaybeEijOr​Not
but someone at least
Posté le 10-09-2017 à 14:32:08  profilanswer
 

Euh je n'arrive pas à faire fonctionner ton jsfiddle (pas de modale qui apparaît au survole ou au click), déjà la dernière fois j'avais dû ajouter la library jquery UI mais là je ne sais pas quelle library tu utilises. Enfin si tenté que tu en utilises une car je ne vois pas de dépendance spécifique.
 
 
N.B. : je ne vais pas avoir beaucoup de temps dans les deux prochaines semaines donc c'est possible que je ne réponde pas rapidement.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2305529
mecano31
Posté le 10-09-2017 à 22:49:07  profilanswer
 

Quand tu survoles un élément il y a un font bleu qui apparaît et au milieu de ce font bleu il y a un autre élément que je rajoute à l'aide de jQuery :

Code :
  1. $(this).append('<div class="row-edit-hover"><i class="fa fa-pencil" style="line-height:30px;"></i></div>');

. C'est sur cet élément qu'il faut cliquer pour voir apparaître la modale.
 
J'utilise que la librairie jquery. Tout le code est de jquery côté js.

n°2305534
MaybeEijOr​Not
but someone at least
Posté le 11-09-2017 à 12:19:02  profilanswer
 

Ok je viens de trouver le petit cercle qui apparaît, je ne sais pas si ça vient de jsFiddle ou du code mais faut placer le curseur au milieu de la zone surlignée pour voir apparaître le cercle. Ce n'est pas très instinctif :
 
Souris par-dessus le texte :
http://img110.xooimage.com/files/d/c/f/img1-5306f1f.jpg
 
Souris pile au milieu du texte :
http://img110.xooimage.com/files/5/2/8/img2-5306f23.jpg
 
 
Sinon j'essaye de regarder ça dans l'après-midi.

mood
Publicité
Posté le 11-09-2017 à 12:19:02  profilanswer
 

n°2305538
MaybeEijOr​Not
but someone at least
Posté le 11-09-2017 à 16:07:28  profilanswer
 

Faut simplement traiter tes différents cas séparément au lieu de les écraser par les suivants :
 

Code :
  1. big_parent.text(toSave.titre);
  2.                  big_parent.text(toSave.prix);
  3.                  big_parent.text(toSave.url_title);
  4.               big_parent.text(toSave.texte);
  5.               big_parent.attr("href",toSave.url);
  6.               big_parent.attr("src",toSave.img);

 
 
Remplacer par quelque chose du genre :
 

Code :
  1. switch(big_parent.attr("data-type" )) {
  2.     case "title":
  3.         big_parent.text(toSave.titre);
  4.         break;
  5.     case "price":
  6.         big_parent.text(toSave.prix);
  7.         break;
  8.     case "text":
  9.         big_parent.text(toSave.texte);
  10.         break;
  11.     case "link":
  12.         big_parent.attr("href",toSave.url);
  13.         big_parent.text(toSave.url_title);
  14.         break;
  15.     case "image":
  16.         big_parent.attr("src",toSave.img);
  17. }


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2305548
mecano31
Posté le 11-09-2017 à 19:52:18  profilanswer
 

J'ai corrigé et ça marche très bien.
J'ai un souci du même ordre. Mais là je souhaiterais masquer un module quand on clique sur le bouton supprimer.
Dans ma table j'ai créé un champ active qui est égale à 1 par défaut (affiché). Quand la valeur du champ vaut 0 le module est masqué.  
J'arrive à le masque mais il faut que je recharge la page pour qu'il disparaisse.  
 
Voici l'exemple: c'est la continuité du code précédent :  

Code :
  1. <div class="row" data-id="1">
  2. <div class="row-edit" data-type="image" data-id="1"><img src="http://zupimages.net/up/17/32/bgot.jpg" width="100" height="100"></div>
  3. <div class="size-paragraphe">
  4.                <h1 class="row-edit" data-type="title" data-id="1">Lorem ipsum - titre produit</h1>
  5.        <p class="row-edit" data-type="text" data-id="1">Oportunum est, ut arbitror, explanare nunc causam, quae ad exitium praecipitem. Oportunum est, ut arbitror, explanare nunc causam, quae ad exitium praecipitem. Oportunum est, ut arbitror, explanare nunc causam, quae ad exitium praecipitem.</p>
  6.        <p class="row-edit" data-type="price" data-id="1"><strong>Prix : 300€</strong></p>
  7.        <p class="row-edit" data-type="link" data-id="1"><a href="monlien.com">J'en profite</a></p>
  8.         </div>
  9. </div>


Code :
  1. function add_delete(){
  2.       $(".row" ).append('<div class="row-delete"><i class="fa fa-times"></i></div>');
  3. }
  4. add_delete();
  5. function delete(){
  6.       $(".row-delete" ).click(function() {
  7.      var $this = $(this).parent();
  8.      //$this.parent().remove();
  9.      datas = {'id': $this.data("id" )};
  10.      $.post("moduleDelete.php", datas, function(response) {
  11.                console.log(response);
  12.              });
  13.       });
  14. }
  15. delete();


Code :
  1. if (isset($_POST['id'])){
  2.      $id = $_POST['id'];
  3.    
  4.      $q= array('id'=>$id);
  5.      $sql = 'UPDATE newsletter SET active = 0 WHERE id = :id';
  6.      $req = $db->prepare($sql);
  7.      $req->execute($q) or die(print_r($req->errorInfo()));
  8. }


Message édité par mecano31 le 11-09-2017 à 20:02:11
n°2305549
MaybeEijOr​Not
but someone at least
Posté le 11-09-2017 à 20:06:03  profilanswer
 

Tu as juste à faire un delete ou un fadeout lors du click sur "supprimer" comme tu faisais précédemment, faut juste récupérer le bon élément mais normalement ta fonction de suppression le fait déjà. :??:


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2305552
MaybeEijOr​Not
but someone at least
Posté le 11-09-2017 à 20:11:05  profilanswer
 

Ah tu as édité quand je postais mon message.

 

Donc c'est bien remove() et non delete() comme je disais dans mon message précédent mais sinon :

 
Code :
  1. var $this = $(this).parent();
  2. //$this.parent().remove();
 

Ta deuxième ligne sans le .parent() (et décommentée) puisqu'il est déjà dans la ligne précédente, ça ne fonctionne pas?


Message édité par MaybeEijOrNot le 11-09-2017 à 20:11:38

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2305702
mecano31
Posté le 15-09-2017 à 14:33:49  profilanswer
 

C'est corrigé. Ça fonctionne !
J'ai un autre souci :
J'ai changé la façon de modifier les images. Au lieu que de changer juste l'url d'une image je souhaiterais l'uploader.
Pour l'upload le système d'appel de la modale est un peu différent du précédent qu'on a traité. Ce que j'aimerais faire c'est de récupérer le data-id d'un élément sur lequel on veut uploader l'image. Je récupère les infos de l'image uploadée par contre je n'ai pas réussi à récupérer le data-id.  
 
Code de l'exemple :

Code :
  1. <div class="row upload" data-id="1">
  2.     <div class="row-edit" data-type="image" data-id="1"><img src="http://zupimages.net/up/17/32/bgot.jpg" width="100" height="100"></div>
  3.     <div class="size-paragraphe">
  4.                    <h1 class="row-edit" data-type="title" data-id="1">Lorem ipsum - titre produit</h1>
  5.            <p class="row-edit" data-type="text" data-id="1">Oportunum est, ut arbitror, explanare nunc causam, quae ad exitium praecipitem. Oportunum est, ut arbitror, explanare nunc causam, quae ad exitium praecipitem. Oportunum est, ut arbitror, explanare nunc causam, quae ad exitium praecipitem.</p>
  6.            <p class="row-edit" data-type="price" data-id="1"><strong>Prix : 300€</strong></p>
  7.            <p class="row-edit" data-type="link" data-id="1"><a href="monlien.com">J'en profite</a></p>
  8.      </div>
  9. </div>
  10. <!-- ##upload modale -->
  11. <div class="edit-uple" id="edit-upload">
  12.      <div class="edit-box" style="height:230px;">
  13.            <div class="edit-box-title">Upload file</div>
  14.            <div class="edit-box-content">
  15.                  <div class="edit-box-content-text">Image</div>
  16.                  <div class="edit-box-content-field"><input type="file" name="fileUpload" class="edit-box-content-field-input file"/></div>
  17.             </div>
  18.             <div class="edit-box-buttons">
  19.                   <div class="edit-box-buttons-save-file">Save</div>
  20.                   <div class="edit-box-buttons-cancel-file">Cancel</div>
  21.             </div>
  22.       </div>
  23. </div>
  24. <!-- ##fin upload modale -->


Code :
  1. // upload
  2. function add_upload(){
  3. $(".upload" ).append('<div class="row-upload"><i class="fa fa-upload"></i></div>');
  4. }
  5. add_upload();
  6. function perform_upload(){
  7. $(".row-upload" ).click(function(){
  8.  $(".edit-uple" ).fadeIn(500);
  9.  $(".edit-uple .edit-box" ).slideDown(500);
  10.  var $this = $(this).parent();
  11.  $(".edit-box-buttons-save-file" ).click(function() {
  12.   $(this).parents('.edit-uple').fadeOut(500).children().slideUp(500);
  13.   var $this = $(this).parents().find('input[name="fileUpload"]');
  14.          var files = $this[0].files;
  15.          if (files.length > 0) {
  16.              //var img = files[0];
  17.              createFormData(files);
  18.          }
  19.   function createFormData(image) {
  20.        var formImage = new FormData();
  21.        formImage.append('imageModule', image[0]);
  22.        uploadFormData(formImage);
  23.    }
  24.    function uploadFormData(formData) {
  25.         $.ajax({
  26.             url: "upload.php",
  27.             type: "POST",
  28.             data: formData,
  29.             contentType:false,
  30.             cache: false,
  31.             processData: false,
  32.             success: function(data){
  33.           console.log(data);
  34.           console.log(me.data("id" ));
  35.             }
  36.         });
  37.    }
  38.     });
  39.     });
  40.     //close uple
  41.     $(".edit-box-buttons-cancel-file" ).click(function() {
  42.  $(this).parents('.edit-uple').fadeOut(500).children().slideUp(500);
  43.     });
  44. }
  45. perform_upload();

n°2305737
MaybeEijOr​Not
but someone at least
Posté le 16-09-2017 à 14:40:20  profilanswer
 

Théoriquement ici tu peux récupérer le data-id si je ne me plante pas :
 

Code :
  1. $(".row-upload" ).click(function(){
  2. $(".edit-uple" ).fadeIn(500);
  3. $(".edit-uple .edit-box" ).slideDown(500);
  4. var $this = $(this).parent();
  5. var dataId = $this.data-id;


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2305739
mecano31
Posté le 16-09-2017 à 16:53:04  profilanswer
 

Je n'ai réussi à le passer dans la requête ajax à côté de:  formData.

n°2305743
MaybeEijOr​Not
but someone at least
Posté le 16-09-2017 à 18:14:58  profilanswer
 

Comment ça à côté? Si tu veux qu'il soit envoyé il faut le mettre dedans.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2305749
mecano31
Posté le 16-09-2017 à 22:42:41  profilanswer
 

Je voulais dire dans formData.
Désolé pour le lapsus.
 
J'ai fait ceci :
 

Code :
  1. var dataId = $this.data-id;
  2. if (files.length > 0) {
  3.      createFormData(files, dataId);
  4. }
  5. function createFormData(image, id) {
  6.       var formImage = new FormData();
  7.       formImage.push({'imageModule': image[0], 'id': id});
  8.       uploadFormData(formImage);
  9. }
  10. function uploadFormData(formData) {
  11.       $.ajax({
  12.      url: "upload.php",
  13.      type: "POST",
  14.      data: formData,
  15.      contentType:false,
  16.      cache: false,
  17.      processData: false,
  18.      success: function(data){
  19.                    console.log(data);
  20.      }
  21.        });
  22. }

n°2305750
MaybeEijOr​Not
but someone at least
Posté le 17-09-2017 à 12:24:24  profilanswer
 

Et donc là tu n'arrives pas à le récupérer?
 
Que renvoie un console.log sur dataId?


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2305763
mecano31
Posté le 17-09-2017 à 22:27:35  profilanswer
 

Oui j'arrive à récupérer le dataId.
Le problème est réglé mais un autre demeure.
Quand j'uploade une image elle n'est pas mise à jour immédiatement. Il faut que je recharge la page pour la voir.
C'est le même problème que le sujet précédent.  
 
 
console.log(dataId) me renvoie bien l'id du module.
 

Code :
  1. var dataId = $this.data("id" );
  2.     console.log(dataId); // me renvoi l'id du module
  3.     if (files.length > 0) {
  4.          createFormData(files);
  5.     }
  6.     function createFormData(image) {
  7.           var formImage = new FormData();
  8.           formImage.append('imageModule', image[0]);
  9.           formImage.append('dataId', dataId);
  10.           uploadFormData(formImage);
  11.     }
  12.     function uploadFormData(formData) {
  13.           $.ajax({
  14.               url: "upload.php",
  15.               type: "POST",
  16.               data: formData, // je récupère bien les infos du fichiers mais d'id module
  17.               contentType:false,
  18.               cache: false,
  19.               processData: false,
  20.               success: function(data){
  21.                    console.log(data);
  22.               }
  23.          });
  24.     }


Message édité par mecano31 le 19-09-2017 à 17:01:03
n°2305858
MaybeEijOr​Not
but someone at least
Posté le 20-09-2017 à 10:20:19  profilanswer
 

Pas certain d'avoir compris, c'est tout le formData qui ne passe pas?
 

Code :
  1. formImage.append('imageModule', image[0]);
  2.           formImage.append('dataId', dataId);


 
Dans ce cas là essaye peut-être tout bêtement de déclarer comme ça :
 

Code :
  1. formImage.imageModule = image[0];
  2.           formImage.dataId = dataId;


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2305875
mecano31
Posté le 20-09-2017 à 12:04:06  profilanswer
 

Le formData passe bien. Je récupère le dataId et je fais mon upload normalement.
Mais une fois l'upload est fait il faut que je recharge la page pour voir l'image.  
Je souhaiterais afficher mon image dès que je l'upload sans rechargement.
 
Merci

n°2305890
MaybeEijOr​Not
but someone at least
Posté le 20-09-2017 à 14:16:18  profilanswer
 

Suffit de modifier l'image dès lors où la mise à jour réussie, un truc du genre :
 

Code :
  1. function(data){
  2.                    console.log(data);
  3.                    $("data-id[value="+data.dataId+"] img" ).attr("src", link);
  4.               }


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2305893
mecano31
Posté le 20-09-2017 à 15:19:14  profilanswer
 

A quoi correspond le link dans :

Code :
  1. $("data-id[value="+data.dataId+"] img" ).attr("src", link);


 
Est-ce que égale à : data.image ou data.imageModule,...etc ?

n°2305895
MaybeEijOr​Not
but someone at least
Posté le 20-09-2017 à 15:27:01  profilanswer
 

Cela correspond au lien qui mène vers l'image mais ça c'est ton php qui doit te le communiquer je pense.
Donc ça correspond à un data.link ou data.image, je ne connais pas le contenu de ta variable de retour...


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2305896
mecano31
Posté le 20-09-2017 à 15:39:16  profilanswer
 

En fait, je récupère mes datas de cette manière :
 
code js :
 

Code :
  1. var dataId = $this.data("id" );
  2. if (files.length > 0) {
  3.      createFormData(files);
  4. }
  5. function createFormData(image) {
  6.     var formImage = new FormData();
  7.     formImage.append('imageModule', image[0]);
  8.     formImage.append('dataId', dataId);
  9.     uploadFormData(formImage);
  10. }
  11. function uploadFormData(formData) {
  12.    $.ajax({
  13.         url: "upload.php",
  14.         type: "POST",
  15.         data: formData,
  16.         contentType:false,
  17.         cache: false,
  18.         processData: false,
  19.         success: function(data){
  20.              console.log(data);
  21.         }
  22.    });
  23. }


Code :
  1. // upload.php
  2. $dossier_upload = "images/";
  3. if (is_array($_FILES)) {
  4.      if (isset($_FILES['imageModule']['tmp_name']) && isset($_POST['dataId'])) {
  5.          // Traitement  
  6. $tmp_file = $_FILES['imageModule']['tmp_name'];
  7. $dataId = intval($_POST['dataId']);
  8. if (!is_uploaded_file($tmp_file)) {
  9.  echo 'Le fichier est introuvable';
  10. }
  11. $type_file = $_FILES['imageModule']['type'];
  12. if (!strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'png') && !strstr($type_file, 'gif')){
  13.  echo 'Le fichier n\'est pas une image';
  14. }
  15. $type_size = $_FILES['imageModule']['size'];
  16. if ($type_size >= 2000000) {
  17.  echo 'La taille du fichier dépasse le maximum autorisé';
  18. }
  19. $ext = strtolower(pathinfo($_FILES['imageModule']['name'], PATHINFO_EXTENSION));
  20. $name_file = uniqid().".".$ext;
  21. $cheminCible = $dossier_upload.$name_file;
  22. $resultat = move_uploaded_file($tmp_file, $cheminCible);
  23. $q = array('name_file'=>$name_file, 'dataId'=>$dataId);
  24. $sql = 'UPDATE newsletter SET image = :name_file WHERE newsletter_id = :dataId';
  25. $req = $db->prepare($sql);
  26. $req->execute($q) or die(print_r($req->errorInfo()));
  27.     }
  28. }

n°2305902
MaybeEijOr​Not
but someone at least
Posté le 20-09-2017 à 16:37:13  profilanswer
 

Ohla, plusieurs choses à revoir côté php.
 
Déjà les If ils servent à quoi??? Ils ne stoppent en rien le processus. Là les If font juste dire un message mais le script continu après, c'est à dire que même si quelqu'un veut uploader quelque chose d'autre qu'une image il pourra le faire. De plus il faut bien penser que le plus important reste de configurer le php.ini pour la taille maximale des fichiers à charger. Évidemment mieux vaut faire une première vérification côté client via JS pour lui éviter d'envoyer un fichier trop lourd.
 
Après côté réponse à créer, il faut que tu fasses un tableau qui stocke les messages d'erreurs et les autres infos (dataId et name_file) puis à la fin du script tu serialize ton tableau en JSON et tu fais un echo dessus. Ensuite côté JS tu dois alors déserializé la réponse (data) pour ensuite accéder au contenu.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2305904
mecano31
Posté le 20-09-2017 à 16:46:08  profilanswer
 

Avec cette fonction :

Code :
  1. function createFormData(image) {
  2.     var formImage = new FormData();
  3.     formImage.append('imageModule', image[0]);
  4.     formImage.append('dataId', dataId);
  5.     uploadFormData(formImage);
  6. }


 
Je ne peux pas faire de tableau pour créer la réponse. Parce que la fonction me renvoie tous les datas stockés dans formData.
J'ai essayé de faire un tableau comme :

Code :
  1. var toSend = {'dataId': dataId, 'imageModule': imageModule};

mais ça n'a pas marché.

n°2305938
MaybeEijOr​Not
but someone at least
Posté le 21-09-2017 à 13:10:22  profilanswer
 

Non mais je parle du côté PHP pour la réponse.
Côté JS, la fonction appelée en cas de succès de la requête Ajax prend pour argument la réponse apportée par le fichier PHP.
La réponse apportée par PHP pouvant être soit un fichier xml soit un fichier js soit du texte (sous forme HTML ou Json).


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2305955
mecano31
Posté le 21-09-2017 à 21:59:45  profilanswer
 

Dans le code ci-dessous que j'ai modifié j'affiche bien les messages d'erreur mais je ne récupère pas les datas (lien de l'image et autres).
Je pense que l'objet formData étant lui même un objet ne peut pas être sous format json à mon avis.

Code :
  1. var dataId = $this.data("id" );
  2. if (files.length > 0) {
  3.      createFormData(files);
  4. }
  5. function createFormData(image) {
  6.     var formImage = new FormData();
  7.     formImage.append('imageModule', image[0]);
  8.     formImage.append('dataId', dataId);
  9.     uploadFormData(formImage);
  10. }
  11. function uploadFormData(formData) {
  12.    $.ajax({
  13.         url: "upload.php",
  14.         type: "POST",
  15.         data: formData,
  16.         contentType:false,
  17.         cache: false,
  18.         processData: false,
  19.         dataType: 'json',
  20.         success: function(data){
  21.              console.log(data);
  22.              $("data-id[value="+data.dataId+"] img" ).attr("src", data.imageModule);
  23.         }
  24.    });
  25. }


Code :
  1. // upload.php
  2. $dossier_upload = "images/";
  3. if (is_array($_FILES)) {
  4.      if (isset($_FILES['imageModule']['tmp_name']) && isset($_POST['dataId'])) {
  5.           // Traitement   
  6.           $tmp_file = $_FILES['imageModule']['tmp_name'];
  7.           $dataId = intval($_POST['dataId']);
  8.           if (!is_uploaded_file($tmp_file)) {
  9.                $result = array(
  10.                      'status'=>false,
  11.                      'msg'=>'Le fichier est introuvable '.$e->getMessage(),
  12.                      'debug'=>array("requete"=>$sql, "datas"=>$datas)
  13.                 );
  14.           }
  15.           $type_file = $_FILES['imageModule']['type'];
  16.           if (!strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'png') && !strstr($type_file, 'gif')){
  17.                $result = array(
  18.                      'status'=>false,
  19.                      'msg'=>'Le fichier n\'est pas une image '.$e->getMessage(),
  20.                      'debug'=>array("requete"=>$sql, "datas"=>$datas)
  21.                 );
  22.           }
  23.           $type_size = $_FILES['imageModule']['size'];
  24.           if ($type_size >= 2000000) {
  25.                 $result = array(
  26.                      'status'=>false,
  27.                      'msg'=>'La taille du fichier dépasse le maximum autorisé '.$e->getMessage(),
  28.                      'debug'=>array("requete"=>$sql, "datas"=>$datas)
  29.                 );
  30.           }
  31.           $ext = strtolower(pathinfo($_FILES['imageModule']['name'], PATHINFO_EXTENSION));
  32.           $name_file = uniqid().".".$ext;
  33.           $cheminCible = $dossier_upload.$name_file;
  34.           $resultat = move_uploaded_file($tmp_file, $cheminCible);
  35.           $sql = 'UPDATE newsletter SET image = :name_file WHERE newsletter_id = :dataId';
  36.           $datas = array('name_file'=>$name_file, 'dataId'=>$dataId);
  37.           try {
  38.                 $req = $db->prepare($sql);
  39.                 $res = $req->execute($datas);
  40.                 $result = array(
  41.                      'status'=> $res,
  42.                      'msg'=>'Mise à jour effectuée avec success !',
  43.                      'debug'=>array("requete"=>$sql, "datas"=>$datas)
  44.                 );
  45.            } catch (Exception $e) {
  46.                 $result = array(
  47.                      'status'=>false,
  48.                      'msg'=>'Erreur ! '.$e->getMessage(),
  49.                      'debug'=>array("requete"=>$sql, "datas"=>$datas)
  50.                 );
  51.            }     
  52.      }
  53. }
  54. // send data as json format
  55. echo json_encode($result);


Message édité par mecano31 le 21-09-2017 à 22:28:37
n°2305990
MaybeEijOr​Not
but someone at least
Posté le 22-09-2017 à 13:36:28  profilanswer
 

Non mais formData on s'en fout, c'est ce que tu envoies au fichier PHP et a priori ça marche bien.
 
Maintenant ce qu'on veut c'est ce que retourne le fichier PHP. Que renvoie ton console.log(data)? Normalement maintenant tu devrais pouvoir accéder à ton image et à l'id comme suit :
 

Code :
  1. var image = data.debug.datas.name_file;
  2. var dataId = data.debug.datas.dataId;


 
À confirmer qu'il ne faille pas deserializer les données mais je pense qu'en précisant le datatype Json comme tu l'as fait ça devrait être bon.
 
 
Et attention, comme je te le précisais plus tôt, ici :

Code :
  1. $resultat = move_uploaded_file($tmp_file, $cheminCible)


Quelque soit la taille ou le type de fichier tu l'upload et le garde. Tes If font retourner un certain message d'erreur mais n'arrêtent en rien le processus.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2305995
mecano31
Posté le 22-09-2017 à 15:19:02  profilanswer
 

J'obtiens le résultat suivant avec le code ci-dessous :  
{"status":true,"msg":"Mise à jour effectuée avec success !","debug":{"requete":"UPDATE newsletter
 SET image = :name_file WHERE newsletter_id = :dataId","datas":{"name_file":"59c50c1127f9d
.jpg","dataId":1}}}    
 
L'upload se passe bien mais je n'affiche toujours pas mon image avant de recharger la page.
 

Code :
  1. function uploadFormData(formData) {
  2.    $.ajax({
  3.         url: "upload.php",
  4.         type: "POST",
  5.         data: formData,
  6.         contentType:false,
  7.         cache: false,
  8.         processData: false,
  9.         dataType: 'json',
  10.         success: function(data){
  11.              console.log(data);
  12.              var image = data.debug.datas.name_file;
  13.              var dataId = data.debug.datas.dataId;
  14.              $("data-id[value="+data.dataId+"] img" ).attr("src", data.image);
  15.         }
  16.    });
  17. }


Message édité par mecano31 le 23-09-2017 à 17:22:35
n°2306039
MaybeEijOr​Not
but someone at least
Posté le 24-09-2017 à 12:03:42  profilanswer
 

Faut quand même remplacer par les variables correspondantes :
 

Code :
  1. $("data-id[value="+dataId+"] img" ).attr("src", data.name_file);


 
Mais bon je pense que data.name_file ne suffit pas pour le lien vers l'image, mais moi je ne connais pas le chemin...


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2306040
mecano31
Posté le 24-09-2017 à 13:35:39  profilanswer
 

Je ne comprends pas le rôle de ces deux variables :

Code :
  1. var image = data.debug.datas.name_file;
  2. var dataId = data.debug.datas.dataId;

n°2306042
MaybeEijOr​Not
but someone at least
Posté le 24-09-2017 à 14:47:04  profilanswer
 

Elles ne sont pas utiles, c'était juste pour te montrer comment récupérer les infos depuis la réponse apportée par le fichier PHP.
 
Tu envoies ta requête ajax, tu récupères côté PHP des données, tu les traites, tu en envoies de nouvelles au client (dont le lien vers l'image et l'id du module en question).


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2306119
mecano31
Posté le 28-09-2017 à 15:10:27  profilanswer
 

J'ai corrigé et ça marche !
Merci encore et encore pour ton aide !
A bientôt !
 

Code :
  1. var image = data.debug.datas.name_file;
  2.     var dataId = data.debug.datas.dataId;
  3.     $("div[data-id="+dataId+"] img" ).attr("src", "chemin/"+image);


Message édité par mecano31 le 29-09-2017 à 09:48:05
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
ajout d'une valeur dans résultat d'une requête d'une autre tablepython installation module
Pb ajout contact outlookJ'ai besoin d'aide pour mon nouveau projet
module ngramsModule Emailing pour Mailjet
Comment exporter une feuille dans un nouveau fichierImport module ou module.truc ou import*
BD EBPCakeBox ajout d'une fonction renommer
Plus de sujets relatifs à : Ajout nouveau module+sauvegarde en BD


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR