File "T_008.php"

Full Path: /home/analogde/www/Freebox/Improve/T_008.php
File size: 7.74 KB
MIME-type: text/html
Charset: utf-8

<!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>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>

                <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">&times;</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') {

                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>