SQL选择/插入/更新查询PHP MySQL

时间:2016-12-20 12:37:58

标签: php mysql

我有一个包含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);
}
?>

2 个答案:

答案 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值。所以,你可以做以下两件事之一:

  • 使用默认值,例如'2099-12-31'超时。
  • 使用触发器强制执行唯一性

在任何一种情况下,数据库本身都将验证数据,因此无论数据如何插入或更新,您都可以确信数据的完整性。

答案 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);
}