]> SAFE projects GIT repository - jmp/mailleur/commitdiff
lvlmai.php, json start to be connected to php.
authorJean-Marc Pigeon <jmp@safe.c>
Tue, 16 Dec 2025 20:00:59 +0000 (15:00 -0500)
committerJean-Marc Pigeon <jmp@safe.c>
Tue, 16 Dec 2025 20:00:59 +0000 (15:00 -0500)
www/devsql.php
www/gesdis.php
www/gessql.php
www/lvlmai.php
www/selectajax.js [new file with mode: 0644]

index 19aba76bcc0f2d3cc72d6969eff3b6765343f2cb..b84501b5a183d8fd5f4ff90f570820e1c4e4574e 100644 (file)
@@ -45,7 +45,8 @@ class devsql     {
       }
     }
 
-  // Update a row/s in a Database Table
+  
+// Update a row/s in a Database Table
   public function Update( )     {
     }    
 
index df27b484308fb41ce69bcef0b78d7b6b01f57f22..93d0c84d56633e34e8fd017bfdb860f71986de32 100644 (file)
@@ -188,6 +188,7 @@ $STR  = <<<EOT
 <script defer src="translations.js?v={$curtime}"></script>
 <script defer src="directives.js?v={$curtime}"></script>
 <script defer src="coloration.js?v={$curtime}"></script>
+<script defer src="selectajax.js?v={$curtime}"></script>
 <link rel="stylesheet" href="theme.css?v=$curtime">
 </HEAD>
 <BODY data-theme={$theme}>
index 729724f71ae3c7f1a08faa28892b9ea39a49e28d..017cc0fe0356b0989a92e8a68a7a280ef837c38f 100644 (file)
@@ -9,7 +9,7 @@ include_once "subrou.php";
 include_once "devsql.php";
 
 class probe       {
-    private devsql $db;                 // devsql database instance
+    protected $db;                      // devsql database instance
     private string $table;              // table name
 
     private ?string $where = null;      // WHERE conditions
@@ -30,6 +30,10 @@ class probe       {
       $this->offset = $offset;
     }
 
+    // protecting data format
+    public function quote($value) {
+      return $this->db->quote($value);
+      }
     /**
      * Add the release function
      **/
index 363d5cdbb2a8fff354b1b101e874fb5d53e926b0..98cede39ec95d3cd001e7fab73397b55deeffecf 100644 (file)
@@ -97,7 +97,7 @@ $STR  = <<<EOT
 </FORM>
 </TD>
 <TD align=left>
-<FORM action="{$myfilename}.php" method="post">
+<FORM id="searchForm" action="{$myfilename}.php" method="post">
 <FONT SIZE=+1>
     <span class="translatable" trkey="Search">Search</span>
     <input type="text" id="searchInput" value="{$dsearchHtml}" name="dsearch" size=20 style="font-size: 100%;">
@@ -141,6 +141,7 @@ $offset=0;
 $dsearch="";
 $selectedField = 'rcptto';
 
+
 if (isset($_POST['limit']))
   $limit=intval($_POST['limit']);
 if (isset($_POST['offset']))
@@ -162,7 +163,7 @@ if (isset($_POST['dsearch'])) {
     $selectedField = 'rcptto';
 
   // filtrage selon le champ choisi
-  $safeSearch = $this->db->quote('%' . $dsearch . '%');
+  $safeSearch = $rqst->quote('%' . $dsearch . '%');
   if ($selectedField === 'creation') {
     // pour la date, on peut filtrer par LIKE
     $rqst->where("$selectedField::text LIKE $safeSearch");
@@ -199,6 +200,16 @@ $actions=$rqst->order("creation desc")
               ->limit($limit)
               ->GET();
 
+if(isset($_POST['ajax']) && $_POST['ajax'] == 1) {
+  header('Content-Type: application/json');
+  echo json_encode([
+    'rows'   => $actions,
+    'search' => $dsearch
+    ]);
+  exit; // très important pour ne pas générer le reste de la page
+  }
+
+
 $line="";
 $count=$offset+1;
 foreach($actions as $action) {
@@ -267,6 +278,7 @@ $top
 <CENTER>
 $tblheader
 <table class="table-userlist" WIDTH="100%" BORDER="1" CellSpacing="0">
+<THEAD id="headerRow">
 <TR>
 <TH align=center>Num</TH>
 <TH align=center class="filter-col" trkey="Status">
@@ -291,7 +303,10 @@ $tblheader
 <span class="translatable">Subject</span>
 </TH>
 </TR>
+</THEAD>
+<TBODY d="bodyRows">
 $line
+</TBODY>
 </Table>
 $tblfooter
 </CENTER>
diff --git a/www/selectajax.js b/www/selectajax.js
new file mode 100644 (file)
index 0000000..fcfc7ef
--- /dev/null
@@ -0,0 +1,63 @@
+/**
+ * selectajax.js
+ *
+ * Gère l'envoi POST AJAX pour la sélection de colonnes et la recherche,
+ * puis met à jour dynamiquement le tableau HTML dans lvlmai.php.
+ *
+ * Dépendances : aucun framework nécessaire (vanilla JS)
+ */
+
+document.addEventListener('DOMContentLoaded', function(){
+
+    // Sélection du formulaire
+    const form = document.getElementById('searchForm');
+    if(!form) return; // sécurité si formulaire non présent
+
+    form.addEventListener('submit', function(e){
+        e.preventDefault(); // empêche le rechargement de la page
+
+        // Construction du FormData pour POST
+        const formData = new FormData(form);
+
+        // Indiquer au backend qu'on veut du JSON
+        formData.set('ajax', '1');
+
+        // Envoi POST via fetch
+        fetch('lvlmai.php', {
+            method: 'POST',
+            body: formData
+        })
+        .then(response => response.json())
+        .then(data => {
+            const headerRow = document.getElementById('headerRow');
+            const bodyRows = document.getElementById('bodyRows');
+
+            // Vider le tableau précédent
+            headerRow.innerHTML = '';
+            bodyRows.innerHTML = '';
+
+            if(data.length === 0) return;
+
+            // Générer les en-têtes dynamiques
+            Object.keys(data[0]).forEach(col => {
+                const th = document.createElement('th');
+                th.textContent = col;
+                headerRow.appendChild(th);
+            });
+
+            // Générer les lignes
+            data.forEach(row => {
+                const tr = document.createElement('tr');
+                Object.values(row).forEach(val => {
+                    const td = document.createElement('td');
+                    td.textContent = val;
+                    tr.appendChild(td);
+                });
+                bodyRows.appendChild(tr);
+            });
+        })
+        .catch(err => console.error('Erreur AJAX:', err));
+    });
+
+});
+