2012-11-28 5 views
0

Shift_ID으로 날짜 범위를 업데이트하려고하는데 입력 한 Shift_ID은 그 요일에 따라 다릅니다. 예를 들어, 일정 범위가있는 경우 $from = "2012-12-01"$to = "2012-12-28" 어떤 날이 offdays인지 나타내는 확인란 (예 : value="Fri" name = "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 
         }    
        } 
       }  
      } 
     } 

는, 모든 것이 완벽 :

그래서 여기 내 코드입니다! 금요일에 날짜가 표시되면 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의 답변을 선택하여 채팅 포럼에서 답변을 얻고 코드를 정리할 수있는 방법을 추가했습니다.

+1

직접 $ shift, $ to, $ from 및 $ emp_id 항목을 $ escape = mysqli_real_escape_string ($ _ POST [ 'emp_id']); ' – Lucas

+0

@ 루카스 네, 고마워요, 제가 할 것입니다. –

+0

대답없이 14 시간, 나는 완전히 난처하게되고 명백하게 모두는 역시이다! –

답변

1

이 방법으로 문제가 해결되지는 않지만 솔루션이 간단 해집니다!

은 다음과 당신의 offdays 변수가되는 것처럼 그런 다음

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

당신이 foreach ($offdays as $offday) {을 반복하고 그 offdays를 업데이트 할 수 있습니다 $offdays = array('Fri', 'Sun');

당신은 첫 번째 쿼리에서 $ 변화에 범위의 모든 날짜를 설정할 수 있습니다 : $off의 범위에있는 모든 $offday's를 업데이트해야

UPDATE Schedule SET Shift_ID = '$off' WHERE Date BETWEEN '$from' AND '$to' AND Emp_ID = '$emp_id' AND DATE_FORMAT(Date, '%a') = '$offday' 

.

이렇게하면 코드가 희박 해져 루프와 쿼리가 줄어 듭니다.

+0

채팅에서 나에게 준 모든 도움에 대한 존경심, 정말 고맙습니다! –

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

mysql에 예약되어 있으므로 모든 필드 이름 날짜에 백틱 (`)을 사용하십시오.

+0

내 의견이 삭제 된 이유를 모르겠습니다. 어쨌든, 답장을 보내 주셔서 감사합니다. 제안했던대로 백틱을 추가했습니다. 이것은 불행히도 문제를 해결하지 못합니다. –

관련 문제