我們目前有一個系統,我們有一個檢查日期/時間衝突的函數,我們手動將所有可能的日期/時間衝突填充爲參數。如何檢查時間/日期衝突(PHP/MySQL)
即:
//session conflicts checker
function chkConflicts($sessions) {
if (!is_array($sessions)) {
$arrsessions = explode(',', $sessions);
} else {
$arrsessions = $sessions;
}
$conflictcount = 0;
foreach ($arrsessions as $thissession) {
if (($_POST[trim($thissession)] != '' && $_POST[trim($thissession)] != 0) || $_POST[trim($thissession) . '_faculty'] != '' && $_POST[trim($thissession) . '_faculty'] != 0) {
$conflictcount++;
}
}
if ($conflictcount > 1) {
return false;
} else {
return true;
}
}
使用像這樣:
if (!chkConflicts('hours_5_p02_800, hours_5_p03_800, hours_5_p07_800, hours_5_p04_800')) {
$errmsg .= 'There is a conflict at 8:00am in the selections. ';
}
其非常繁瑣,而且耗費時間來查找這些以及手動填充的功能/ PARAMS ..
我需要一種新的方法!我希望只是得到一個衝突的列表,並突出顯示頁面上的(表格)行,並提供有關您在突出顯示的區域中存在衝突的消息(較少具體,然後提供確切時間..等等,仍然獲得工作用戶完成)
所有的用戶交互是通過複選框完成的,有反映在表中的列名:在使用
hours_5_p02_800, hours_5_p03_800, hours_5_p07_800,
hours_5_p04_800,hours_9_reg_session_300_845
(相同的名字:
即上面的chkConflicts函數)
我有(間其他)兩列:恭敬地sessiondate varchar(255) & presentationtime varchar(255)
。
隨着會議日期的數據看起來像:2015年9月9日
和呈現實時數據看起來像:8:45 AM - 9:05 AM(如果這個問題不能確定,但包括它的爲了充分披露)
我沒有對數據庫的控制很多,但我可能可以得到的時間分成兩列(開始/結束),如果這將是最好的?
在任何chkConflict函數被調用之前。用戶的'選擇'被記錄/保存到表中。然後衝突檢查被調用。
//record hours for each day
function recordHours() {
$arrflds = explode(',', $_POST['fieldlist']);
$sql = "UPDATE {$this->eventcode}_cme SET";
foreach($arrflds as $key) {
$sql .= " " . addslashes(trim($key)) . " = '" . addslashes($_POST[trim($key)]) . "',";
}
$sql .= " lastupdated = '" . date('Y-m-d H:i:s') . "' WHERE id = '" . $_SESSION[$this->eventcode . '_id'] . "'";
$this->debugout .= ($this->debug) ? 'Record hours: ' . $sql . '<br>' . $this->crlf : '';
$result = mysql_query($sql) or exit('Error recording hours: ' . mysql_error());
}
*我正在更新PDO的東西后,我得到了衝突的東西計算出來。 (謝謝)
我不介意這一點,因爲chkConflict函數(即使選擇已保存)不會讓用戶前進,直到錯誤(s)消息被照顧(因此更新表時再次衝突得到解決)..
我想我將不再需要使用chkConflict方法,並改變recordHours函數不僅更新表..但因爲它有'fieldlist'數組被張貼..我需要做衝突檢查那裏以及...或可能調用recordHours另一個函數並傳遞相同的字段列表...
列數據並不真正用於s活動或(當前)衝突檢查... NAME列。
我的問題是我不知道如何去做日期/時間衝突檢查?
重新蓋:字段列表和列名命名,如:
ie: hours_5_p02_800, hours_5_p03_800, hours_5_p07_800,hours_5_p04_800,hours_9_reg_session_300_845
(並且是時間24小時制)
例如:hours_9_reg_session_300_845
9 = date
reg = event code
300 = session code
845 = session time(24-hour format)
在思維更多,它更像是我需要做一些PHP中的字符串解析(在字段列表名稱上)並對其進行轉換/檢查?
我需要把字符串拆分成它的部分,並對它進行某種(連接/字符串構建)比較?
基本上我收到提交的字段被格式化爲上面和匹配表的列名的列表...
我如何可以通過這個字段列表一樣到一個新的功能(或其他)獲得任何衝突回來?
謝謝... 看來(我越看看它,如上所述)我需要可能做到這一點在PHP的一些事情..使用字段列表數組,而不是/作爲MySQL函數.. 我也不認爲你的例子真的與當前的項目一致。 從用戶選擇的1-x複選框中可以找到任何地方..然後發送這些(fieldlist數組)以保存表格。 我需要檢查是否有任何列表衝突。我沒有選擇一個..他們選擇了很多。 – whispers
嗯..你可能是正確的,在經過更多的思考之後,fieldlist-array的名字可能不能被使用,因爲沒有任何結束時間可用於任何事情。 也許在END時間添加字段列表名稱會有幫助嗎? 我試圖找到一種避免手動查看會話時間的方法,並將它們添加到函數中,以查看是否選擇了它們中的任何一個來報告衝突..其非常......我不知道「手動「?大聲笑 – whispers