Bonjour !
**************************************************
edit du 19/09/2014
ce post a été déplacé depuis le section javascript car en fait le problème vient de PHP MysQl
**************************************************
J'ai créé une petite application web perso pour gérer ma collection de CDs.
Dans une liste d'éléments qui sont extraits depuis une BDD Mysql je rends modifiable l'élément h3 qui a la classe 'editable'
lorsque je clique sur ce h3, je rajoute un input type=text dans le h3 et un bouton de validation juste après ce h3 et je peux donc modifier le contenu du h3.
Lorsque je clique sur le bouton, je récupère l'index de l'élément (contenu dans un paragraphe précédent le h3) et le contenu de l'input text dont je me sers pour créer la variable sql.
J'envoie tout ça avec la fonction mettre_a_jour_titre() qui créé une requête Ajax avec le fichier _modif_titre.php qui met à jour la base de données avec le contenu du champ de type input.
Mon code fonctionne bien, je clique sur un titre h3, je le modifie, je clique que le bouton OK et ma BDD se met bien à jour et la requête Ajax retourne 'done' (response du fichier php).
Par contre, si je clique sur un h3 et que finalement je ne modifie rien, c'est à dire en laissant la valeur présente, alors quand je clique sur OK, l'Ajax retourne 'fail' (response du fichier php) et j'affiche le message 'problème avec la requête Sql' du fichier JS.
Le contenu dans la base MySql reste bien sur inchangé dans ce cas.
Je n'arrive pas à trouver de solution pour contourner cela...
code HTML (extrait)
code JS (extrait)
code PHP
Modifié par lionel_css3 (19 Sep 2014 - 10:52)
**************************************************
edit du 19/09/2014
ce post a été déplacé depuis le section javascript car en fait le problème vient de PHP MysQl
**************************************************
J'ai créé une petite application web perso pour gérer ma collection de CDs.
Dans une liste d'éléments qui sont extraits depuis une BDD Mysql je rends modifiable l'élément h3 qui a la classe 'editable'
lorsque je clique sur ce h3, je rajoute un input type=text dans le h3 et un bouton de validation juste après ce h3 et je peux donc modifier le contenu du h3.
Lorsque je clique sur le bouton, je récupère l'index de l'élément (contenu dans un paragraphe précédent le h3) et le contenu de l'input text dont je me sers pour créer la variable sql.
J'envoie tout ça avec la fonction mettre_a_jour_titre() qui créé une requête Ajax avec le fichier _modif_titre.php qui met à jour la base de données avec le contenu du champ de type input.
Mon code fonctionne bien, je clique sur un titre h3, je le modifie, je clique que le bouton OK et ma BDD se met bien à jour et la requête Ajax retourne 'done' (response du fichier php).
Par contre, si je clique sur un h3 et que finalement je ne modifie rien, c'est à dire en laissant la valeur présente, alors quand je clique sur OK, l'Ajax retourne 'fail' (response du fichier php) et j'affiche le message 'problème avec la requête Sql' du fichier JS.
Le contenu dans la base MySql reste bien sur inchangé dans ce cas.
Je n'arrive pas à trouver de solution pour contourner cela...
code HTML (extrait)
<div id="display-table">
<div class="row">
<div class="col col-left">
<a class="maj-image" title="425" href="#" ><img alt="425" src="images/425-1410706931-img.jpg" ></a>
</div>
<div class="col col-right">
<p><a href="modif-cd-pdo.php?id=425">425</a> - Rock</p>
<h2>Chicago</h2>
<h3 class="title-item editable">I</h3>
<p class="paru">paru: 1969 - - C</p>
</div>
</div>
<div class="row">
<div class="col col-left">
<a class="maj-image" title="426" href="#" ><img alt="426" src="images/426-1410706809-img.jpg" ></a>
</div>
<div class="col col-right">
<p><a href="modif-cd-pdo.php?id=426">426</a> - Rock</p>
<h2>Chicago</h2>
<h3 class="title-item editable">III</h3>
<p class="paru">paru: 1971 - - C</p>
</div>
</div>
<div class="row">
<div class="col col-left">
<a class="maj-image" title="427" href="#" ><img alt="427" src="images/427-1410706835-img.jpg" ></a>
</div>
<div class="col col-right">
<p><a href="modif-cd-pdo.php?id=427">427</a> - Rock</p>
<h2>Chicago</h2>
<h3 class="title-item editable">II</h3>
<p class="paru">paru: 1971 - - C</p>
</div>
</div>
</div>
code JS (extrait)
/* ********************************************** */
/* mise à jour titre h3 titre */
/* ********************************************** */
var clickable = true;
var idH3ToChange, h3NewContent, h3Tag, retourH3Update;
$(".col-right h3.editable").on('click', function(e) {
if (clickable == true) {
clickable = false; // bloque l'action sur click h3
var $this = $(this);
$(".col-right h3").removeClass('editable');
idH3ToChange = ($this.closest('.col-right').find("p a").text());
$this.wrapInner( "<input id='new-titre' type='text' size='50' value='" + $this.text() + "' name='new-name' >");
$this.after("<input id='go-h3' type='submit' value='Go' />");
} // fin du if clickable == true
}); // fin du on()
$(".col-right").on('click', '#go-h3', function(e) {
var $this = $(this);
h3Tag = $this.prev();
h3NewContent = h3Tag.find('input#new-titre').prop('value');
sql = "id=" + idH3ToChange + "&new_valeur=" + h3NewContent;
mettre_a_jour_titre(sql, h3Tag, h3NewContent);
$(".col-right h3").addClass('editable');
clickable = true;
});
/* ********************************************** */ //
/* fonction ajax h3 titre */
/* ********************************************** */
function mettre_a_jour_titre(options, baliseH3, contenuH3) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.addEventListener('readystatechange', function() {
if(this.readyState === 4) {
if(this.status === 200) {
retourH3Update = xmlhttp.responseText;
$("#go-h3").remove();
$("input#new-titre").remove();
if (retourH3Update == "done") {
baliseH3.html(contenuH3);
} else { // fail
baliseH3.html("problème avec la requête Sql");
}
} else { // status !== 200
baliseH3.html("problème http request");
}
}
});
xmlhttp.open('post', "_modif_titre.php", true);
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xmlhttp.send(options);
}
code PHP
<?php
$id = $_POST['id'];
$titre= $_POST['new_valeur'];
require_once('connexions/disco_idx_pdo.php');
$req = "UPDATE disques SET titre = '" . $titre. "' WHERE id = " . $id ;
if ($connexion->exec($req)):
echo 'done';
else:
echo 'fail';
endif;
?>
Modifié par lionel_css3 (19 Sep 2014 - 10:52)