2012-11-28 78 views
0

我試圖用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的答案,因爲他幫助我在聊天論壇中找到了答案,並且還添加了一種方法來清理我的代碼。

+1

爲了你自己的緣故,你應該逃避'$ shift','$ to','$ from'和'$ emp_id'條目'$ emp_id = mysqli_real_escape_string($ _ POST ['emp_id']);' – Lucas

+0

@盧卡斯是的,謝謝,我會這樣做。 –

+0

14小時沒有答案,我完全被難住了,顯然其他人也是! –

回答

1

這並不解決您的問題,但簡化了解決方案!

如果您offdays變量如下:$offdays = array('Fri', 'Sun');

您可以先設定範圍爲$換擋所有日期在一個查詢:

UPDATE Schedule SET Shift_ID = '$shift' WHERE Date BETWEEN '$from' AND '$to' AND Emp_ID = '$emp_id' 

然後你就可以通過foreach ($offdays as $offday) {循環和更新這些offdays :

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

這將減少您的循環和查詢,從而提供更精簡的代碼。

+0

嚴重尊重您在聊天中給我的所有幫助,我真的很感激它! –

0
$sql = ("SELECT `Date` FROM schedule WHERE (`Date` BETWEEN '$from' AND '$to') AND (Emp_ID = '$emp_id')"); 

對所有字段名日期使用反引號(`),因爲它是在mysql中保留的。

+0

我不確定我的評論爲何被刪除?無論如何,感謝您的回覆,我已經按照您的建議添加了反引號。這不能解決問題。 –