日付の範囲をで更新しようとしていますShift_ID
が、Shift_ID
入力される日付は曜日によって異なります。したがって、たとえば、日付の範囲がある場合は、チェックボックス(例:)を選択して、何日であるかを示すこと$from = "2012-12-01"
$to = "2012-12-28"
ができるようにしようとしています。が設定範囲内の日と一致する場合、それ以外の場合は就業日であり、value="Fri" name = "offdays[]"
offdays
offdays
Shift_ID = "6"
Shift_ID = "3"
うまくいけば、これはすべて1分で意味があります。私はそれを説明し、いくつかの有用な変数を提供するために最善を尽くしています。
だからここに私のコードがあります:
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の回答を選んだのは、彼がチャットフォーラムで回答を得るのを手伝ってくれ、コードをクリーンアップする方法も追加したからです。