我有一个包含userID(int),timeIN(日期),timeOUT(日期)列的表
我在mysql数据库中插入一条记录。首先,我检查另一个表中的userID是否正确,如果正确,它将添加userID和timeIN(日期)的新记录,而timeOUT将为NULL,否则如果userID不正确,则会显示错误。我希望我的代码能够检查用户当前是否为timeIN,因此它将阻止双重输入。如果userID的值等于用户输入且timeIN不为null且timeOUT为null,我还想插入或更新timeOUT(日期)。
请帮助......谢谢。
这是我插入userID和timeIN的代码:插入mysql数据库时的IT工作。
<?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);
}
?>
答案 0 :(得分:1)
您应该在数据库中处理这些检查。您在数据库中执行的当前检查可以通过外键约束来处理:
alter table dtr add constraint fk_dtr_userId
foreign key (userId) references employee(userId);
第二个意味着您只需要一行NULl
值。理想情况下,可以使用唯一约束来处理:
alter table dtr add constraint unq_dtr_userId_timeOut
unique (userId, timeOut);
不幸的是(对于这种情况),MySQL允许对唯一约束重复NULL值。所以,你可以做以下两件事之一:
在任何一种情况下,数据库本身都将验证数据,因此无论数据如何插入或更新,您都可以确信数据的完整性。
答案 1 :(得分:0)
我是通过未经测试的手机完成的,但您会了解正在发生的事情
if(isset($check))
{
$sql="SELECT * FROM dtr WHERE userID = $userID";
$result = mysqli_query($con,$sql);
$check = mysqli_fetch_array($result);
if(isset($check))
{
echo "Already in";
if(isset($check['timeIN']) && !isset($check['timeOUT']))
{
$sql = "UPDATE dtr SET timeOUT= now() WHERE userID=$userID";
mysqli_query($con, $sql);
mysqli_close($con);
}
}
else
{
$sql = "INSERT INTO dtr (userID,timeIN) VALUES ('$userID', now())";
mysqli_query($con, $sql);
mysqli_close($con);
echo 'Time IN Successful!';
}
}
else
{
echo 'Invalid USER ID. Please try again!';
mysqli_close($con);
}