2014-09-15 2 views
-1

예약 교실 기능을 만듭니다. 이미 예약 된 교실을 사용자가 예약하면 내역을 반영하고 싶습니다. 나는 그것이 ifelse 문 작업을하지만, 그렇지 않으면 SQL INSERT 내부는 {} 내가 왜 잘 모릅니다 IF {} 후 한 번 실행하는지 테스트하고 캔트 실수php ifelse else 문을 계속 실행합니다.

$class=$_POST['class']; 
      $time=$_POST['time']; 
      $date=$_POST['date']; 
      $type=$_SESSION['type']; 

      $query=mysql_query("SELECT * FROM classroom"); 
      while($row=mysql_fetch_array($query)) 
      { 
       if ($row['name']==$class && $row['date']==$date && $row['time']==$time) 
       { 

        echo "The class at this time already been booked."; 
       } 
       else 
       { 
        mysql_query("INSERT INTO classroom(name,date,time,bookedby) VALUES('$class','$date','$time','$type')");     
        if ($_SESSION['username']=='admin') { 
        mysql_query("UPDATE classroom SET status='yes' WHERE name='$class' AND date='$date' AND time='$time'");     
        } 
        echo "booking submitted"; 
        break; 
       } 

      } 
+0

코드는 각 행이 일치하는지 확인하고 그렇지 않은 행마다 새 행을 삽입합니다. _any_ 행이 일치하는지 확인하고 _none_ 할 경우 새 행을 삽입하십시오. – Eric

+0

먼저 mysqli 또는 PDO를 준비된 문으로 사용하십시오. select where 문을 사용하면 PHP에서 루프를 돌릴 수없고 각 행을 비교할 수 없습니다. 직관적이지는 않습니다. 삽입하기 전에 조건을 추가하면됩니다. insert then then update – Ghost

+0

알았어요. 고마워. 모두 – user3042789

답변

0

사용한 논리가 아닌 손쉽게 찾을 수 옳은. 이 코드를 대신 사용해보십시오.

 $class=$_POST['class']; 
     $time=$_POST['time']; 
     $date=$_POST['date']; 
     $type=$_SESSION['type']; 

     $query=mysql_query("SELECT * FROM classroom where name='$class' && date='$date' && time='$time'"); 
     if(mysql_num_rows($query)>0) 
     { 
       echo "The class at this time already been booked."; 
     } 
     else 
     { 
       mysql_query("INSERT INTO classroom(name,date,time,bookedby) VALUES('$class','$date','$time','$type')");     
       if ($_SESSION['username']=='admin') { 
       mysql_query("UPDATE classroom SET status='yes' WHERE name='$class' AND date='$date' AND time='$time'");     
       } 
       echo "booking submitted"; 
       break; 


     } 

방금 ​​코드를 수정했습니다. mysqli/pdo의 사용법을 배우고, 더 이상 사용되지 않는 mysql 사용법을 바꾸는 것이 좋다.

date가 사전 정의 된 mysql 키워드이므로 'date'열 이름을 다른 것으로 변경하는 것이 좋습니다. 예약어에 포함되어 있지 않고 mysql에서 'date'의 사용을 허용하더라도, 혼동을 일으킬 수 있고 오류를 반환하는 일부 충돌이있을 수 있으므로 사용하지 않는 것이 좋습니다.

+0

mysql_num_rows는 선택된 총 행 수를 반환합니다. 0보다 큰 경우 (> 0) 조건을 만족하는 행이 있음을 의미합니다. 어떤 다른 학생들이 이미 수업 실을 예약했음을 의미합니다. – AeJey

관련 문제