我有一个包含列 userID(int)、timeIN(date)、timeOUT(date) 的表
我正在mysql数据库中插入一条记录。首先,我检查另一个表中的 userID 是否正确,如果正确,它将添加 userID 和 timeIN(date) 的新记录,而 timeOUT 将为 NULL,否则如果 userID 不正确,它将显示错误。我希望我的代码能够检查用户当前是否处于 timeIN 状态,这样可以防止重复输入。如果 userID 的值等于用户输入且 timeIN 不为 null 并且 timeOUT 为 null,我还想插入或更新 timeOUT(date)。
请帮忙...谢谢。
这是我插入 userID 和 timeIN 的代码:插入 mysql 数据库时它可以工作。
<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
require_once('dbConnect.php');
$userID = $_POST['userID'];
$sql = "SELECT * FROM employee WHERE userID='$userID'";
$result = mysqli_query($con,$sql);
$check = mysqli_fetch_array($result);
if(isset($check)){
$sql = "INSERT INTO dtr (userID,timeIN) VALUES ('$userID', now())";
mysqli_query($con, $sql);
echo 'Time IN Successful!';
}else{
echo 'Invalid USER ID. Please try again!';
}
mysqli_close($con);
}
?>
最佳答案
您应该在数据库内处理这些检查。您当前在数据库中进行的检查可以通过外键约束来处理:
alter table dtr add constraint fk_dtr_userId
foreign key (userId) references employee(userId);
第二个意味着您只需要一行具有 NUL1
值。理想情况下,这可以通过唯一的约束来处理:
alter table dtr add constraint unq_dtr_userId_timeOut
unique (userId, timeOut);
不幸的是(对于这种情况),MySQL 允许唯一约束使用重复的 NULL 值。因此,您可以执行以下两件事之一:
- 使用默认值,例如“2099-12-31”表示超时。
- 使用触发器来强制唯一性
无论哪种情况,数据库本身都会验证数据,因此无论数据如何插入或更新,您都可以对数据完整性充满信心。
关于php - SQL 选择/插入/更新查询 PHP MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41242556/