2017-02-27 93 views
1

我有一個Textbox(用於員工ID)和一個Time In按鈕,用於保存員工ID,當前日期和當前時間(點擊時不同的列)到數據庫。問題是我如何才能將時間限制在一天一次。PHP MySQL考勤 - 如何限制時間(每天一次)

這裏是我的代碼:

<?php 
    require "sampledb.php"; 

    date_default_timezone_set("Asia/Hong_Kong"); 

    $date = date('Y-m-d'); 
    $time = date('h:i:s'); 

    if(isset($_POST['in'])){ 
     $sql = "INSERT INTO timein(empid, date, time) VALUES(".$_POST['eid'].", '$date', '$time')"; 
     $conn->exec($sql); 

     if($sql==true){ 
      echo '<script language="javascript">'; 
      echo 'alert("Time in Successful")'; 
      echo '</script>'; 
      echo '<meta http-equiv="refresh" content="0;url=sample.php" />'; 
      }else{ 
      echo "Time in Failed"; 
     } 
    } 
?> 

<html> 
    <head> 
    </head> 
    <body> 
     <form method="POST" action=""> 
      <?php echo date("d/m/y : h:i:sa", time()) . "<br>"; ?> 
      <input type="text" name="eid" placeholder="Employee ID"> 
      <input type="submit" name="in" value="Time in"> 
     </form> 
    </body> 
</html> 
+1

您可以在表格中添加與empid相關的唯一日期。所以在那個特定日期只有一個特定的empoyee條目 – Shan

+0

讓MySQL用一個UNIQUE KEY處理這個問題 –

+0

但是如果我把日期設置爲UNIQUE KEY,那麼新的僱員ID將不能進入時間IN – Jon

回答

-1

在做之前你的SQL INSERT,做一個SELECT語句,看是否有在規定日期該員工的行。 如果num_rows爲0,則繼續進行INSERT。 如果num_rows不是0,則顯示錯誤警報消息。

嘗試以下在您的PHP。

if(isset($_POST['in'])){ 
     $eid = $_POST['eid']; 
     $sql = "SELECT empid FROM timein WHERE empid='$eid' AND date='$date'"; 
     $con->exec($sql); 
     $count = $con->rowCount(); 
     if($count == 0){ 
      $sql = "INSERT INTO timein(empid, date, time) VALUES(".$_POST['eid'].", '$date', '$time')"; 
      $conn->exec($sql); 
echo '<script language="javascript">'; 
      echo 'alert("Time in Successful")'; 
      echo '</script>'; 
      echo '<meta http-equiv="refresh" content="0;url=sample.php" />'; 
     } else { 
      echo "Time in Failed"; 
     } 

    } 
+0

這可能會在極少數情況下導致重複記錄。 (用戶雙擊,2個選擇查詢返回0個記錄,將發生2個插入)。所以一個獨特的關鍵是解決方案 – Johan

+0

我不明白爲什麼downvote。如果是這樣的話,他可以使用Post,Redirect,Get方法。或者在第一次點擊時禁用按鈕。 –

+0

因爲我認爲它只有一半的解決方案。數據庫應該負責數據的完整性。不是(客戶端)腳本 – Johan

1

您可以同時在列上添加一個唯一約束(EMPID &日期)下面的查詢

運行到表第一

ALTER TABLE `timein` ADD UNIQUE `unique_index`(`empid `, `date`); 

EMPID和日期的組合必須是獨特。