}
}
- // Update a row/s in a Database Table
+
+// Update a row/s in a Database Table
public function Update( ) {
}
<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}>
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
$this->offset = $offset;
}
+ // protecting data format
+ public function quote($value) {
+ return $this->db->quote($value);
+ }
/**
* Add the release function
**/
</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%;">
$dsearch="";
$selectedField = 'rcptto';
+
if (isset($_POST['limit']))
$limit=intval($_POST['limit']);
if (isset($_POST['offset']))
$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");
->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) {
<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">
<span class="translatable">Subject</span>
</TH>
</TR>
+</THEAD>
+<TBODY d="bodyRows">
$line
+</TBODY>
</Table>
$tblfooter
</CENTER>
--- /dev/null
+/**
+ * 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));
+ });
+
+});
+