我们目前有一个系统,我们有一个检查日期/时间冲突的函数,我们手动将所有可能的日期/时间冲突填充为参数。如何检查时间/日期冲突(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