我正在尝试使用Shift_ID
更新一系列日期,但输入的Shift_ID
取决于它所在的星期几。因此,例如,如果我有一系列日期$from = "2012-12-01"
$to = "2012-12-28"
我正在尝试制作它,以便我可以选中一个复选框(例如:value="Fri" name = "offdays[]"
)来表示天是offdays
。如果offdays
与设定范围内的某一天匹配,那么Shift_ID = "6"
则为工作日,而Shift_ID = "3"
希望这一切都有意义,我会尽力解释它,并给你一些有用的变量。
所以这是我的代码:
if(isset($_POST['submit']))
{
if(isset($_POST['offdays']))
{
//$off is set through the config settings//
$shift = mysqli_real_escape_string($_POST['shift']);
$from = mysqli_real_escape_string($_POST['from']);
$to = mysqli_real_escape_string($_POST['to']);
$emp_id = mysqli_real_escape_string($_POST['emp_id']);
foreach($_POST['offdays'] as $checkbox)
{
echo "Checkbox: " . $checkbox . "<br>";//error checking
$sql = ("SELECT Date FROM schedule WHERE (Date BETWEEN '$from' AND '$to') AND (Emp_ID = '$emp_id')");
if(!$result_date_query = $mysqli->query($sql))
{
echo "INSERT ERROR 1 HERE";
}
echo "SELECT SQL: " . $sql . "<br>";//error checking
while($row = $result_date_query->fetch_assoc())
{
echo "Date: " . $row['Date'] . "<br>";//error checking
$date = date('D',strtotime($row['Date']));
if($date == $checkbox)
{
echo "MATCHED! Date: " . $date . " Checkbox: " . $checkbox . "<br>";//error checking
$sql = ("UPDATE schedule SET Shift_ID = '$off' WHERE Date = '" . $row['Date'] . "' AND Emp_ID = '$emp_id'");
if(!$result_update_offdays_query = $mysqli->query($sql))
{
echo "INSERT ERROR 2 HERE";
}
echo "UPDATE DAYS OFF SQL: " . $sql . "<br><br>";//error checking
}
else
{
echo "NOT MATCHED! Date: " . $date . " Checkbox: " . $checkbox . "<br>";//error checking
$sql = ("UPDATE schedule SET Shift_ID = '$shift' WHERE Date = '" . $row['Date'] . "' AND Emp_ID = '$emp_id'");
if(!$result_update_shift_query = $mysqli->query($sql))
{
echo "INSERT ERROR 3 HERE";
}
echo "UPDATE SHIFT SQL: " . $sql . "<br><br>";//error checking
}
}
}
}
}
当我查看我的印刷回声时,一切都很完美!当某个日期在星期五登陆时,它会显示它正在输入Shift_ID = "6"
,而其他任何一天都会显示Shift_ID = "3"
。问题是表格没有反映我的陈述告诉我的内容,它们都只是更新到Shift_ID = "3"
。
最后我希望能够选择多个offdays
,但是当我选择多个时,它会在下一个循环中覆盖我前一天,这是有道理的。
我不知道发生了什么,如果有人能给我一些线索,我会非常感激。
更新:在更新后的日子之后添加exit;
,如下所示:
echo "UPDATE DAYS OFF SQL: " . $sql . "<br><br>";//error
exit;
它确实将休息日更新为Shift_ID = "6"
,因此必须在此之后发生。
编辑:好像问题出在用户权限上。我无法解释原因,但删除用户并创建具有完全权限的新用户后,事情开始起作用。我选择了@ andho的答案,因为他帮助我在聊天论坛中找到答案,并添加了清理代码的方法。
答案 0 :(得分:1)
这不能解决您的问题,但会简化解决方案!
如果您的offdays变量如下:$offdays = array('Fri', 'Sun');
您可以先在一个查询中将范围内的所有日期设置为$ shift:
UPDATE Schedule SET Shift_ID = '$shift' WHERE Date BETWEEN '$from' AND '$to' AND Emp_ID = '$emp_id'
然后你可以遍历foreach ($offdays as $offday) {
并更新那些日子:
UPDATE Schedule SET Shift_ID = '$off' WHERE Date BETWEEN '$from' AND '$to' AND Emp_ID = '$emp_id' AND DATE_FORMAT(Date, '%a') = '$offday'
这应该将范围中的所有$offday's
更新为$off
。
这将减少您的循环和查询,从而提供更精简的代码。
答案 1 :(得分:0)
$sql = ("SELECT `Date` FROM schedule WHERE (`Date` BETWEEN '$from' AND '$to') AND (Emp_ID = '$emp_id')");
对所有字段名称数据使用反引号(`),因为它在mysql中保留。