From 42bd7c36de0eb2f35c29db57c79d8eb4e1dcaf8d Mon Sep 17 00:00:00 2001 From: stephan Date: Thu, 18 Jun 2026 10:37:04 -0400 Subject: [PATCH] Refactor SQL queries to handle 'no_bib' as unsigned integers This commit introduces a new function, fxBibSqlNoBibUnsigned, to ensure that 'no_bib' values are treated as unsigned integers in SQL queries. The existing SQL statements in ajax_bib_range.php and inc_fx_promoteur.php are updated to utilize this function, enhancing data integrity and comparison accuracy. These changes improve the overall reliability of bib number handling in the application. --- ajax_bib_range.php | 7 +++-- php/inc_fx_promoteur.php | 59 +++++++++++++++++++++++++++------------- 2 files changed, 44 insertions(+), 22 deletions(-) diff --git a/ajax_bib_range.php b/ajax_bib_range.php index 8466045..e3d86fc 100644 --- a/ajax_bib_range.php +++ b/ajax_bib_range.php @@ -203,16 +203,17 @@ if ($action == 'save') { exit; } + $sqlBibNumRp = fxBibSqlNoBibUnsigned('rp.no_bib'); $sqlCheckOrphans = " SELECT COUNT(*) FROM resultats_participants rp INNER JOIN inscriptions_epreuves_bib b ON b.epr_bib_id = $id WHERE rp.epr_id = b.epr_id - AND rp.no_bib BETWEEN b.epr_bib_start AND b.epr_bib_finish + AND $sqlBibNumRp BETWEEN b.epr_bib_start AND b.epr_bib_finish AND ( - rp.no_bib < $start - OR rp.no_bib > $end + $sqlBibNumRp < $start + OR $sqlBibNumRp > $end ) "; diff --git a/php/inc_fx_promoteur.php b/php/inc_fx_promoteur.php index 709de4c..6ae7aac 100644 --- a/php/inc_fx_promoteur.php +++ b/php/inc_fx_promoteur.php @@ -3714,6 +3714,16 @@ if ($teamMode <= 0) { 0 ) ) AS nb_trous, @@ -3797,28 +3812,29 @@ function fxInfosBibRange($epr_id = 0, $epr_bib_id = 0){ UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) n4 ) t WHERE t.num BETWEEN b.epr_bib_start AND IFNULL(( - SELECT MAX(rp.no_bib) + SELECT MAX($sqlBibNumRp) FROM resultats_participants rp WHERE rp.epr_id = b.epr_id - AND rp.no_bib BETWEEN b.epr_bib_start AND b.epr_bib_finish + AND $sqlBibNumRp BETWEEN b.epr_bib_start AND b.epr_bib_finish ), b.epr_bib_start - 1) AND t.num NOT IN ( - SELECT rp.no_bib + SELECT $sqlBibNumRp FROM resultats_participants rp WHERE rp.epr_id = b.epr_id + AND $sqlBibNumRp > 0 ) ) AS liste_trous, ( - SELECT GROUP_CONCAT(DISTINCT rp.no_bib ORDER BY rp.no_bib SEPARATOR ',') + SELECT GROUP_CONCAT(DISTINCT $sqlBibNumRp ORDER BY $sqlBibNumRp SEPARATOR ',') FROM resultats_participants rp WHERE rp.epr_id = b.epr_id - AND rp.no_bib BETWEEN b.epr_bib_start AND b.epr_bib_finish + AND $sqlBibNumRp BETWEEN b.epr_bib_start AND b.epr_bib_finish AND ( SELECT COUNT(*) FROM resultats_participants rp2 WHERE rp2.epr_id = rp.epr_id - AND rp2.no_bib = rp.no_bib + AND $sqlBibNumRp2 = $sqlBibNumRp ) > 1 ) AS liste_doublons @@ -3826,7 +3842,8 @@ function fxInfosBibRange($epr_id = 0, $epr_bib_id = 0){ LEFT JOIN resultats_participants p ON p.epr_id = b.epr_id - AND p.no_bib BETWEEN b.epr_bib_start AND b.epr_bib_finish + AND $sqlBibNumP BETWEEN b.epr_bib_start AND b.epr_bib_finish + AND $sqlBibNumP > 0 WHERE $where_sql AND b.epr_bib_start IS NOT NULL @@ -4297,7 +4314,7 @@ $blnRangeLocked = fxBibRangeIsLocked($range);
-
+
@@ -4438,6 +4455,7 @@ if (!empty($data)) { // DB // 👉 mode normal (DB) +$sqlBibNumP = fxBibSqlNoBibUnsigned('p.no_bib'); $sqlParticipants = " SELECT p.*, @@ -4449,8 +4467,8 @@ $sqlParticipants = " AND c.epr_id = p.epr_id WHERE p.is_cancelled = 0 AND p.epr_id = " . intval($epr_id) . " - " . ($hasRange ? "AND p.no_bib BETWEEN $start AND $end" : "") . " - ORDER BY p.no_bib"; + " . ($hasRange ? "AND $sqlBibNumP BETWEEN $start AND $end" : "") . " + ORDER BY $sqlBibNumP"; $tabParticipants = $objDatabase->fxGetResults($sqlParticipants); } @@ -4718,6 +4736,7 @@ function fxGetNextAvailableBib($epr_id, $tabRanges) { global $objDatabase; $epr_id = intval($epr_id); + $sqlBibNum = fxBibSqlNoBibUnsigned('no_bib'); if ($epr_id <= 0 || empty($tabRanges)) { return null; @@ -4744,7 +4763,7 @@ function fxGetNextAvailableBib($epr_id, $tabRanges) { SELECT COUNT(*) FROM resultats_participants WHERE epr_id = $epr_id - AND no_bib = $i + AND $sqlBibNum = $i "; $exists = (int)$objDatabase->fxGetVar($sql); @@ -4797,6 +4816,7 @@ function fxFindNextBatchBib($epr_id, $tabRanges, $mode, &$usedBib, $teamMode = 1 $epr_id = intval($epr_id); $teamMode = (int)$teamMode; + $sqlBibNum = fxBibSqlNoBibUnsigned('no_bib'); foreach ($tabRanges as $range) { $start = (int)$range['start']; @@ -4816,7 +4836,7 @@ function fxFindNextBatchBib($epr_id, $tabRanges, $mode, &$usedBib, $teamMode = 1 SELECT COUNT(DISTINCT pec_id) FROM resultats_participants WHERE epr_id = $epr_id - AND no_bib = $i + AND $sqlBibNum = $i AND is_cancelled = 0 AND pec_id > 0 "; @@ -4829,7 +4849,7 @@ function fxFindNextBatchBib($epr_id, $tabRanges, $mode, &$usedBib, $teamMode = 1 SELECT COUNT(*) FROM resultats_participants WHERE epr_id = $epr_id - AND no_bib = $i + AND $sqlBibNum = $i AND is_cancelled = 0 "; if ((int)$objDatabase->fxGetVar($sqlCheck) === 0) { @@ -5133,6 +5153,7 @@ function fxGetParticipantsForBatchReset($epr_id, $ranges) { return []; } + $sqlBibNumP = fxBibSqlNoBibUnsigned('p.no_bib'); $where = []; foreach ($tabRanges as $r) { @@ -5140,7 +5161,7 @@ function fxGetParticipantsForBatchReset($epr_id, $ranges) { $start = (int)$r['start']; $end = (int)$r['end']; - $where[] = "(p.no_bib BETWEEN $start AND $end)"; + $where[] = "($sqlBibNumP BETWEEN $start AND $end)"; } if (empty($where)) { @@ -5157,7 +5178,7 @@ function fxGetParticipantsForBatchReset($epr_id, $ranges) { AND ( " . implode(' OR ', $where) . " ) - ORDER BY p.no_bib + ORDER BY $sqlBibNumP "; return $objDatabase->fxGetResults($sql);