Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
Freebox
/
Improve
:
T_009.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Table Interactif</title> <!-- Lien vers le fichier CSS de Bootstrap --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.2/dist/css/bootstrap.min.css" rel="stylesheet"> <style> table { border-collapse: collapse; margin: 20px 0; width: 100%; max-width: 600px; } th, td { border: 1px solid #000; text-align: center; padding: 8px; cursor: pointer; } .active { background-color: #4caf50; color: white; } button { margin-top: 20px; padding: 10px 20px; font-size: 16px; cursor: pointer; } </style> </head> <body> <table id="interactiveTable"> <thead> <tr> <th>pipo</th> <th>1</th> <th>2</th> <th>3</th> <th>4</th> <th>5</th> <th>6</th> <th>7</th> <th>8</th> <th>9</th> <th>10</th> </tr> </thead> <tbody> <tr> <td>pipo1</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> </tr> </tbody> </table> <!-- Bouton Sauvegarder --> <button id="saveButton" class="btn btn-primary">Sauvegarder</button> <!-- Bouton Charger --> <button id="loadButton" class="btn btn-secondary">Charger</button> <!-- Bouton Réinitialiser --> <button id="resetButton" class="btn btn-danger">Réinitialiser</button> <!-- Modal Bootstrap pour la confirmation de réinitialisation --> <div class="modal fade" id="resetModal" tabindex="-1" aria-labelledby="resetModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="resetModalLabel">Confirmation</h5> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <div class="modal-body"> Voulez-vous vraiment réinitialiser toutes les cellules ? </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">Annuler</button> <button type="button" class="btn btn-primary" id="confirmResetButton">OK</button> </div> </div> </div> </div> <!-- Lien vers jQuery, Popper.js et Bootstrap JS --> <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.2/dist/js/bootstrap.min.js"></script> <script> const table = document.getElementById('interactiveTable'); // Gestion du clic sur les cellules table.addEventListener('click', (event) => { const cell = event.target; // Vérifier si l'élément cliqué est une cellule (td) et non un header (th) if (cell.tagName === 'TD') { // Si c'est la première colonne, on permet l'édition du texte if (cell.cellIndex === 0) { // Vérification des caractères spéciaux (uniquement alphanumériques autorisés) const currentValue = cell.textContent; const input = prompt("Entrez un texte alphanumérique pour cette cellule :", currentValue); // Si l'utilisateur entre du texte, vérifier qu'il est alphanumérique if (input && /^[a-zA-Z0-9]*$/.test(input)) { cell.textContent = input; // Mettre à jour la cellule avec le texte } else if (input) { alert("Les caractères spéciaux ne sont pas autorisés."); } } else { // Si ce n'est pas la première colonne, basculer entre 0 et 1 if (cell.textContent === '0') { cell.textContent = '1'; cell.classList.add('active'); } else if (cell.textContent === '1') { cell.textContent = '0'; cell.classList.remove('active'); } } } }); // Sauvegarde des données via XMLHttpRequest document.getElementById('saveButton').addEventListener('click', () => { const rows = table.querySelectorAll('tbody tr'); const data = []; rows.forEach(row => { const rowData = []; const cells = row.querySelectorAll('td'); cells.forEach(cell => { rowData.push(cell.textContent); }); data.push(rowData); }); const xhr = new XMLHttpRequest(); xhr.open("POST", "saveToDB.php", true); xhr.setRequestHeader("Content-Type", "application/json"); xhr.onload = function() { if (xhr.status === 200) { alert(xhr.responseText); // Affiche la réponse du serveur } else { alert("Erreur de sauvegarde des données"); } }; xhr.send(JSON.stringify(data)); }); // Charger les données depuis la base de données via XMLHttpRequest document.getElementById('loadButton').addEventListener('click', () => { const xhr = new XMLHttpRequest(); xhr.open("GET", "loadFromDB.php", true); xhr.onload = function() { if (xhr.status === 200) { const rowData = JSON.parse(xhr.responseText); // Parse la réponse JSON const rows = table.querySelectorAll('tbody tr'); rowData.forEach((dataRow, rowIndex) => { const row = rows[rowIndex] || table.insertRow(); dataRow.forEach((cellData, cellIndex) => { let cell = row.cells[cellIndex]; if (!cell) { cell = row.insertCell(cellIndex); // Insérer la cellule si elle n'existe pas } cell.textContent = cellData; cell.classList.remove('active'); // Réinitialiser la classe active if (cellData === '1') { cell.classList.add('active'); } }); }); } else { alert("Erreur de chargement des données"); } }; xhr.send(); }); // Bouton Réinitialiser pour ouvrir la boîte de dialogue de confirmation document.getElementById('resetButton').addEventListener('click', () => { $('#resetModal').modal('show'); // Ouvrir la modal Bootstrap }); // Bouton OK pour réinitialiser les cellules document.getElementById('confirmResetButton').addEventListener('click', () => { // Réinitialiser toutes les cellules à '0' const rows = table.querySelectorAll('tbody tr'); rows.forEach(row => { const cells = row.querySelectorAll('td'); cells.forEach(cell => { cell.textContent = '0'; cell.classList.remove('active'); // Supprimer la classe active }); }); $('#resetModal').modal('hide'); // Fermer la modal }); </script> </body> </html>