par
gefriche » 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 :
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'];
}
Le php pour les images :
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;
},
});
Le script counter.js déclenché par onclick sur une photo :
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();
}
Le script counter.php qui doit recevoir la donnée par le javascript :
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);
}
}
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 !!
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 :
[code]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]
Le php pour les images :
[code]// 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();
?>[/code]
le script de création de l'objet XHR :
[code]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;
}[/code]
Le script Fancybox :
[code]$("[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]
Le script counter.js déclenché par onclick sur une photo :
[code]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]
Le script counter.php qui doit recevoir la donnée par le javascript :
[code]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);
}
}[/code]
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 !!