8768 sujets

Développement web côté serveur, CMS

Bonjour à tous,

J'ai un problème de sauvegarde côté PHP d'une partie de mes éléments qui ont une variable commune. Je souhaiterais modifier un titre, une image, un lien et son titre et enregistrer la modification en bd dans ma table qui a la structure suivante :

// Structure de la table `newsletter`
CREATE TABLE IF NOT EXISTS `newsletter` (
  `newsletter_id` int(11) NOT NULL AUTO_INCREMENT,
  `url_lien` varchar(255) NOT NULL,
  `titre_url_lien` varchar(255) NOT NULL,
  `titre` varchar(255) NOT NULL,
  `description` text NOT NULL,
  `image` varchar(255) NOT NULL,
  PRIMARY KEY (`newsletter_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
// Contenu de la table `newsletter`
INSERT INTO `newsletter` (`newsletter_id`, `url_lien`, `titre_url_lien`, `titre`, `description`, `image`) VALUES
(1, 'http://link-j-en-profite', 'J''en profite', 'Item 1', 'Incenderat autem audaces usque ad insaniam homines ad haec, quae nefariis egere conatibus, Luscus quidam curator urbis subito visus: eosque ut heiulans baiolorum praecentor ad expediendum quod orsi sunt incitans vocibus crebris. qui haut longe postea ideo vivus exustus est.', 'image_01.jpg'),
(2, 'http://link-contact', 'Contact', 'Item 2', 'Incenderat autem audaces usque ad insaniam homines ad haec, quae nefariis egere conatibus, Luscus quidam curator urbis subito visus: eosque ut heiulans baiolorum praecentor ad expediendum quod orsi sunt incitans vocibus crebris. qui haut longe postea ideo vivus exustus est.', 'image_02.jpg'),
(3, 'http://link-a-propos', 'A propos', 'Item 3', 'Incenderat autem audaces usque ad insaniam homines ad haec, quae nefariis egere conatibus, Luscus quidam curator urbis subito visus: eosque ut heiulans baiolorum praecentor ad expediendum quod orsi sunt incitans vocibus crebris. qui haut longe postea ideo vivus exustus est.', 'image_03.jpg');

Le code HTML est le suivant :

<div>
  <h4 class="row-edit" data-type="title" data-id="<?=$row['newsletter_id']; ?>"><?=$row['titre'];?></h4>
  <p class="row-edit" data-type="image" data-id="<?=$row['newsletter_id']; ?>"><img src="<?=$row['image'];?>"></p>
  <p class="row-edit" data-type="text" data-id="<?=$row['newsletter_id']; ?>><?=$row['description'];?></p>
  <div ><a href="<?=$row1['url_lien']; ?>" class="row-edit" data-type="link" data-id="<?=$row['newsletter_id']; ?>"><?= $row['titre_url_lien']; ?></a></div>
</div>
<!-- Modale -->
<div class="edit" id="edit-title">
  <div class="edit-box" style="">
    <div class="edit-box-title">Edit Link</div>
    <div class="edit-box-content">
      <div class="edit-box-content-text">Title</div>
      <div class="edit-box-content-field"><input type="text" class="edit-box-content-field-input title"/></div>
      <div class="edit-box-content-text">URL:<span>(full address including    http://)</span></div>
 
      <div class="edit-box-content-field"><input type="text" class="edit-box-content-field-input url"/></div>
    </div>
    <div class="edit-box-buttons">
      <div class="edit-box-buttons-save">Save</div>
      <div class="edit-box-buttons-cancel">Cancel</div>
    </div>
  </div>
</div>
<div class="edit" id="edit-link">
  <div class="edit-box" style="">
    <div class="edit-box-title">Edit Link</div>
    <div class="edit-box-content">
      <div class="edit-box-content-text">Title</div>
      <div class="edit-box-content-field"><input type="text" class="edit-box-content-field-input title"/></div>
      <div class="edit-box-content-text">URL:<span>(full address including    http://)</span></div>
 
      <div class="edit-box-content-field"><input type="text" class="edit-box-content-field-input url"/></div>
    </div>
    <div class="edit-box-buttons">
      <div class="edit-box-buttons-save">Save</div>
      <div class="edit-box-buttons-cancel">Cancel</div>
    </div>
  </div>
</div>
<!-- Fin Modale -->

Le code JS :

console.clear();
(function hover_edit(){
    var big_parent;  
  $(".row-edit").hover(
    function() {
        $(this).append('<span class="row-edit-hover"><i class="fa fa-pencil" style="line-height:30px;"></i></span>');
    }, 
    function() {
        $(this).children(".row-edit-hover").remove();
    }
  )
  $("a").click(function(e) {e.preventDefault()});
  $("body").on('click', ".row-edit-hover i", function(e) {
        e.preventDefault();
        big_parent = $(this).parent().parent();
    
       //edit title
       if(big_parent.attr("data-type")=='title'){
           $("#edit-title .title").val(big_parent.text());
           $("#edit-title").fadeIn(500);
           $("#edit-title .edit-box").slideDown(500);
       }    
       //edit link
       if(big_parent.attr("type")=='link'){
          $("#edit-link .title").val(big_parent.text());
          $("#edit-link .url").val(big_parent.attr("href"));
          $("#edit-link").fadeIn(500);
          $("#edit-link .edit-box").slideDown(500);
       }
       $(".edit-box-buttons-save").click(function() {
           var toSave = {};
           $(this).parents('.edit').fadeOut(500).children().slideUp(500);
           [#red]big_parent.text($("#edit-title .title").val());[/#]
           big_parent.text($("#edit-text .text").val());
           big_parent.attr("href",$("#edit-link .url").val());
           big_parent.attr("src",$("#edit-image .image").val());
           toSave = {
                'id'   : big_parent.data('id'),
                'url'  : big_parent.attr('href'),
                'img' : big_parent.attr('src'),
               [#darkred] 'text' : big_parent.text()[/#]
           }
           console.info(toSave);
           $.post("page-update.php", toSave, function(response) {
                if(response.status) {
                    $("#msg").removeClass('danger');
                    $("#msg").addClass('success').html(response.msg);
                } else {
                    $("#msg").removeClass('success');
                    $("#msg").addClass('danger').html(response.msg);
                }
             }, 'json');
        });
    });
})();


// page-update.php
function update_newsletter($url,$img,$text,$id){
  $sql = "UPDATE newsletter SET url_lien = :url, titre_url_lien = :text, titre = :text, description = :text,  image = :img WHERE newsletter_id = :id";
  $datas = array(":url"=>$url, ":img"=>$img, ":text"=>$text, ":id"=>$id);
  return queryExec($sql,$datas);
}
function queryExec($sql,$datas){
 global $db;
 try {
    $req = $db->prepare($sql);
    $res = $req->execute($datas);
    $result = array(
           'status'=> $res,
           'msg'=>'Saisie enregistrée avec success !',
           'debug'=>array("requete"=>$sql, "datas"=>$datas)
          );
  } catch (Exception $e) {
    //erreur dans la requete
    $result = array(
           'status'=>false,
           'msg'=>'Erreur ! '.$e->getMessage(),
           'debug'=>array("requete"=>$sql, "datas"=>$datas)
     );
  } 
   return $result;
}
if($id){
   $msg = update_newsletter($url,$img,$text,$id); 
} else {
  //pas d'ID
  $msg = array( 'status'=>false,
       'msg'=>"Erreur ! ID de ligne vide !",
       'debug'=>$_POST
   );
}      
// send data as json format
echo json_encode($msg);

J'ai une même variable texte pour le titre et le titre du lien : $text = isset($_POST['text']) ? $_POST['text'] : "";. Après sauvegarde la console m'affiche ceci :
{"status":true,"msg":"Saisie enregistrée avec success !","debug":{"requete":"UPDATE newsletter
SET titre = :text WHERE newsletter_id = :id","datas":{":text":"",":id":"11"}}}. Pourtant je récupère bien mon élément dans la popup mais il enregistre un champ vide. Et c'est idem pour le titre du lien. Merci pour votre aide.
Cordialement,
Re,

Merci @Zelena d'avoir pris le temps de me répondre.
Mais ton lien ne m'aide pas car je n'ai pas un problème au niveau PDO.
Je pense que le problème est au niveau de la récupération de la variable pour la passer en $_POST. En javascript je récupère les valeurs de mes variables textes, le titre, le titre du lien et la description de cette façon :

big_parent.text($("#sim-edit-title .title").val());
big_parent.text($("#sim-edit-text .text").val());

Et ensuite dans mon tableau :

toSave = {
      ..........
 
      'text' : big_parent.text()
};


Est-ce que ce n'est pas dû au fait la fonction text() ne sait pas quel contenu récupérer ? Puisqu'elle est utilisée pour plusieurs élément, du coup elle met le champ vide. Par exemple : pour l'image et le lien la sauvegarde marche très bien.
Cdlt,
Modifié par dinolam (24 Jul 2017 - 14:29)
Désolée, je ne connais pas Jquery… (et encore moins cette nouvelle façon de faire de l'Ajax, si j'ai bien compris).

Je vais peut-être dire une bêtise mais… pourquoi ne pas mettre la valeur de 'text' dans une variable locale, valeur que vous pourriez vérifier ?

Smiley confus
Zelena a écrit :
Désolée, je ne connais pas Jquery… (et encore moins cette nouvelle façon de faire de l'Ajax, si j'ai bien compris).
Je vais peut-être dire une bêtise équipement photovoltaïque mais… pourquoi ne pas mettre la valeur de 'text' dans une variable locale, valeur que vous pourriez vérifier ?
Smiley confus

Bonjour,
Moi aussi je ne connais vraiment pas grand chose sur ce point.
Et pourtant j'aimerais bien aidé aussi.
leonaE102 a écrit :
Et pourtant j'aimerais bien aidé aussi.

Mais oui c'est ça toggle()...

Bonjour,

Déjà il faut savoir si le JS récupère bien ton texte, qu'y-a-t-il dans la console ? Retrouves-tu bien ton texte via le console.info(toSave) ?

NB : Je vois également que tu ne m'as pas écouté quand à la gestion des événements dans des événements, cela va te jouer des tours... Smiley decu
Bonjour,

Merci pour réponses.
@SolidSnake, voici le résultat de ma console pour un exemple de sauvegarde d'un titre que j'ai testé et mis dans mon précédent post :
{"status":true,"msg":"Saisie enregistrée avec success !","debug":{"requete":"UPDATE newsletter
SET titre = :text WHERE newsletter_id = :id","datas":{":text":"",":id":"11"}}}
Object {id: 11, url: "", img: "", text: ""}
Je pense le problème est là au niveau de la récupération. Je fais le test uniquement pour le text. Pour l'url et l'img ça marche normalement.

Pour ce qui est de la gestion d'événement dans événement je n'ai pas d'autres solutions. Si tu as des solutions pour ça je suis preneur.

Cdlt,
Modifié par dinolam (25 Jul 2017 - 17:02)