Actualiser test.html
CI / PHP Syntax Check (push) Has been cancelled
CI / JavaScript Lint (push) Has been cancelled
CI / Docker Build Test (push) Has been cancelled
CI / Validate Translation Files (push) Has been cancelled
CI / Auto-merge develop → main (push) Has been cancelled
CI / Create GitHub Release (push) Has been cancelled

This commit is contained in:
2026-06-17 20:24:11 +00:00
parent 978088ae23
commit 94eeba280a
+17 -19
View File
@@ -82,45 +82,43 @@
const checkedBoxes = document.querySelectorAll('.prod-check:checked'); const checkedBoxes = document.querySelectorAll('.prod-check:checked');
if(checkedBoxes.length === 0) return alert("Coche des produits !"); if(checkedBoxes.length === 0) return alert("Coche des produits !");
const btn = document.getElementById('save-btn'); const btn = document.getElementById('save-btn');
btn.disabled = true; btn.disabled = true;
btn.textContent = "Traitement en cours..."; btn.textContent = "Traitement en cours...";
let successCount = 0; let successCount = 0;
let errorCount = 0; let errorCount = 0;
// --- TENTATIVE DE RÉCUPÉRATION DU JETON ---
// Regarde le nom du champ "name" dans le Payload de ta requête qui marche
// Ici on essaie les plus courants
let token = document.querySelector('input[name="csrf_token"]')?.value ||
document.querySelector('input[name="_token"]')?.value || "";
for (const checkbox of checkedBoxes) { for (const checkbox of checkedBoxes) {
let p = fullProductList[checkbox.dataset.index]; let p = { ...fullProductList[checkbox.dataset.index] };
let formData = new FormData(); let formData = new FormData();
for (let key in p) { for (let key in p) { formData.append(key, p[key]); }
formData.append(key, p[key]);
}
formData.set('category', newCat); formData.set('category', newCat);
if (token) formData.append('csrf_token', token); // Ajuste 'csrf_token' si besoin
try { try {
// On ajoute l'en-tête X-Requested-With qui est souvent le verrou du 403
let res = await fetch('api/index.php?action=product_save', { let res = await fetch('api/index.php?action=product_save', {
method: 'POST', method: 'POST',
body: formData, body: formData,
headers: { headers: { 'X-Requested-With': 'XMLHttpRequest' }
'X-Requested-With': 'XMLHttpRequest'
}
}); });
// On récupère le texte pour voir ce que le serveur dit vraiment en cas d'erreur if (res.ok) successCount++;
let resultText = await res.text(); else {
let text = await res.text();
if (res.ok) { console.error("Échec:", text);
successCount++;
} else {
console.error("Échec sur " + p.name + " (Code " + res.status + "):", resultText);
errorCount++; errorCount++;
} }
await new Promise(r => setTimeout(r, 300)); await new Promise(r => setTimeout(r, 300));
} catch (e) { } catch (e) {
console.error("Erreur critique sur " + p.name, e);
errorCount++; errorCount++;
} }
} }
@@ -128,7 +126,7 @@
await loadData(); await loadData();
btn.disabled = false; btn.disabled = false;
btn.textContent = "APPLIQUER AUX COCHÉS"; btn.textContent = "APPLIQUER AUX COCHÉS";
alert(`Traitement terminé :\n- Succès : ${successCount}\n- Erreurs : ${errorCount}\n\n(Vérifie la console F12 pour le détail des erreurs)`); alert(`Terminé :\n- Succès : ${successCount}\n- Erreurs : ${errorCount}`);
} }
</script> </script>
</body> </body>