我試圖用Shift_ID
來更新日期範圍,但輸入Shift_ID
取決於它是星期幾。因此,例如,如果我的日期範圍爲$from = "2012-12-01"
$to = "2012-12-28"
我正在嘗試使其可以選擇一個複選框(例如:value="Fri" name = "offdays[]"
)來指示哪一天是offdays
。如果offdays
與每天在設定範圍內匹配,那麼Shift_ID = "6"
否則是工作一天Shift_ID = "3"
while foreach循環內循環問題
希望這將是行得通的在一分鐘內,我盡我所能來解釋它,以及給你一些有用的變量。
因此,這裏是我的代碼:
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
}
}
}
}
}
當我看到我打印echo語句,一切都是完美的!當日期在星期五登陸時,它顯示它正在輸入Shift_ID = "6"
,其他日期顯示爲Shift_ID = "3"
。問題是這些表格沒有反映我的陳述告訴我的內容,他們都只是更新到Shift_ID = "3"
。
最後,我希望能夠選擇多個offdays
,但是當我選擇多個時,它會覆蓋我在下一個循環中的前一天,這很有意義。
我不知道發生了什麼,如果任何人都可以給我一個線索,我會非常感激。
UPDATE:當我的日子過更新後添加exit;
,像這樣:
echo "UPDATE DAYS OFF SQL: " . $sql . "<br><br>";//error
exit;
它更新一天假Shift_ID = "6"
,所以它必須有一些之後發生。
編輯:看起來問題是用戶權限。我無法解釋爲什麼,但在刪除用戶並創建具有完全權限的新用戶之後,事情開始奏效。我選擇了@ andho的答案,因爲他幫助我在聊天論壇中找到了答案,並且還添加了一種方法來清理我的代碼。
爲了你自己的緣故,你應該逃避'$ shift','$ to','$ from'和'$ emp_id'條目'$ emp_id = mysqli_real_escape_string($ _ POST ['emp_id']);' – Lucas
@盧卡斯是的,謝謝,我會這樣做。 –
14小時沒有答案,我完全被難住了,顯然其他人也是! –