XMLHttpRequest, lien entre un javascript et la base de donnée à incrémenter
Posté : 22 mai 2021, 17:15
Bonjour,
J'ai une base de données contenant plusieurs tables, dont l'une comprend notamment les adresses des photos, avec leurs noms, leurs catégories et deux colonnes à remplir, un compteur de vues et un compteur de téléchargement.
La visualisation des photos est réalisée par Fancybox 3.
Je ne parviens pas à recevoir la donnée transmise par l'objet XHR en PHP pour incrémenter la table concernée de la database.
le PHP pour la préparation de la visualisation :
Le php pour les images :
le script de création de l'objet XHR :
Le script Fancybox :
Le script counter.js déclenché par onclick sur une photo :
Le script counter.php qui doit recevoir la donnée par le javascript :
Tout fonctionne très bien !
Cependant je ne parviens pas à recevoir et/ou à envoyer (je ne sais pas) la donnée qui est l'id de la photo dans sa table.
Pouvez-vous m'aider, je suis dans cette impasse depuis déjà plus d'une semaine...
Merci d'avance !!
J'ai une base de données contenant plusieurs tables, dont l'une comprend notamment les adresses des photos, avec leurs noms, leurs catégories et deux colonnes à remplir, un compteur de vues et un compteur de téléchargement.
La visualisation des photos est réalisée par Fancybox 3.
Je ne parviens pas à recevoir la donnée transmise par l'objet XHR en PHP pour incrémenter la table concernée de la database.
le PHP pour la préparation de la visualisation :
Code : Tout sélectionner
for ($i=0 ; $i < $result->num_rows ; $i++) {
$row = $result->fetch_assoc() ;
$id = $row['id'];
$path_img = $row['path_img'];
$path_img400 = $row['path_img400'];
$path_img1020 = $row['path_img1020'];
$description = $row['description'];
$id_members = $row['id_members'];
// Extraction du prénom, nom et pays de l'auteur de la photo
$result1 = $conn->query('SELECT firstname, lastname, country FROM members WHERE id = "' . $id_members . '"');
if ($result1) {
$row1 = $result1->fetch_assoc();
$firstname = $row1['firstname'];
$lastname = $row1['lastname'];
$country = $row1['country'];
}Code : Tout sélectionner
// Conception de la grille de présentation des photos
echo '<div class="grid2">';
echo '<a id="' . $id . '" onclick="counter("' . $id . '")" class="d-block mb-4" href="' . $path_img . '" data-fancybox data-caption="' . $description,'<br>',$firstname,' ',$lastname,' - ',$country . '" style="margin: 5px;"><img class="img-fluid" src="' . $path_img400 . '" alt="" /></a>';
echo '</div>';
echo '<span id="msg"></span>';
}
$result->free();
?>le script de création de l'objet XHR :
Code : Tout sélectionner
function getXMLHttpRequest(){
var xhr = null;
if (window.XMLHttpRequest || window.ActiveXObject) {
if (window.ActiveXObject) {
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}else {xhr = new XMLHttpRequest();
}
}else {
alert("Navigateur incompatible avec XMLHTTPRequest");
return null;
}return xhr;
}Le script Fancybox :
Code : Tout sélectionner
$("[data-fancybox]").fancybox({
// Les options
preventCaptionOverlap: true,
buttons: [
"zoom",
"fullScreen",
"download",
"thumbs",
"close"
],
animationEffect: "zoom-in-out",
transitionEffect: "tube",
afterShow : function( instance, current ){
var itemId = current.opts.$orig.attr('id');
counter(itemId);
msg.innerText = itemId;
},
});Code : Tout sélectionner
function counter(itemId) {
let xhr = getXMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
resultat.innerHTML = xhr.responseText;
}
}
xhr.open("GET", "counter.php?itemId='+itemId+'", true);
xhr.send();
}Code : Tout sélectionner
if (isset($_GET['itemId'])) {
$itemId = htmlspecialchars($_GET['itemId']);
echo $itemId . ' <br><br><br><br> $itemId à la ligne 23 de counter.php';
$query = "SELECT * FROM img WHERE id = '$itemId'";
$result = mysqli_query($conn, $query);
if (!empty($result)){// Si itemId est trouvé dans la table img on incrémente le compteur viewed
$sql = "UPDATE img set viewed = (viewed + 1) WHERE id = '$itemId'";
$result1 = mysqli_query($conn, $sql);
}
}Cependant je ne parviens pas à recevoir et/ou à envoyer (je ne sais pas) la donnée qui est l'id de la photo dans sa table.
Pouvez-vous m'aider, je suis dans cette impasse depuis déjà plus d'une semaine...
Merci d'avance !!