如何在不同时间在同一列上存储2条记录?

时间:2017-04-04 13:32:00

标签: php html mysql sql

我尝试使用将在不同时间点击的按钮将2个DATETIME记录并排存储。目前,记录只是存储在彼此之下,如下所示:

|---------------------|------------------|------------------|
|          ID         |     clock_in     |     clock_out    |
|---------------------|------------------|------------------|
|          1          |     14:50:05     |     00:00:00     |
|---------------------|------------------|------------------|
|          2          |     00:00:00     |     14:52:45     |
|---------------------|------------------|------------------|

Id喜欢这样存储的记录,单击两个按钮,或者单击一个按钮两次(一次为&#34; clock_in&#34;再次为&#34; clock_out&#34;):< / p>

|---------------------|------------------|------------------|
|          ID         |     clock_in     |     clock_out    |
|---------------------|------------------|------------------|
|          1          |     14:50:05     |     14:52:45     |
|---------------------|------------------|------------------|
|          2          |     09:12:40     |     13:32:33     |
|---------------------|------------------|------------------|

代码示例:

<h2>Clock In</h2>
 <form action="" method="REQUEST">
   <button name="click" class="click">Clock In!</button>
 </form>
<h2>Clock Out</h2>
 <form action="" method="REQUEST">
   <button name="click2" class="click2">Clock Out!</button>
 </form>

<?php
 require('db.php');

 if(isset($_REQUEST['click']))
 {
    $clock_in = date('Y-m-d H:i:s');;
    echo "Clocked in at: " . $clock_in . "<br>";

    $query = "INSERT into `records` (clock_in)
   VALUES ('$clock_in')";
    $result = mysqli_query($con,$query);
 }

 if(isset($_REQUEST['click2']))
 {
    $clock_out = date('Y-m-d H:i:s');;
    echo "Clocked out at: " . $clock_out . "<br>";

    $query = "INSERT into `records` (clock_out)
  VALUES ('$clock_out')";
    $result = mysqli_query($con,$query);
 }
?>

2 个答案:

答案 0 :(得分:1)

哦,从哪里开始, 1st:选择POST或GET,更好的POST。 第二:使用过滤器,为什么使用POST / GET而不是REQUEST。 第3名:为什么用Y-m-d初始化date(),只使用时间? 第四:使用准备好的陈述。当您在SQL中编写Var并且不更改它时,在创建生产软件时,您可以使用MySQLi多少,在几秒钟内就会被黑客攻击。我看到的问题是,你可以点击而不点击。你需要一点JS和Ajax,所以你可以在点击Click_in时禁用Button Click_out并启用它。所以你可以使用“INSERT”和“SELECT”(检查db中是否设置了click_in)和“UPDATE”。

<?php
$clockIn = "";
$clockOut = "";
$id = null;
$anyGodLikeOutPut = "";
$PDO = new PDO("mysql:host=localhost;dbname=timetrack;charset=utf8;", "username", "passwort");

if (filter_has_var(INPUT_POST, "click")) {
    $clockIn = date('H:i:s');
    $sql = "INSERT INTO `records`(`ID`, `clock_in`) VALUES (NULL, :cin)";
    $PDOStatement = $PDO->prepare($sql);
    $PDOStatement->bindParam(":cin", $clockIn, PDO::PARAM_STR);
    if ($PDOStatement->execute()) {
        $anyGodLikeOutPut = "Your result: " . $clockIn;
    } else {
        throw new \Exception("MYSQL Error: " . implode(",", $PDOStatement->errorInfo()));
    }
}
if (filter_has_var(INPUT_POST, "click2") && filter_has_var(INPUT_POST, "id")) {
    $id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);
    $clockOut = date('H:i:s');
    $sql = "UPDATE `records` SET `ID` = :id, `clock_out`= :cout";
    $PDOStatement = $PDO->prepare($sql);
    $PDOStatement->bindParam(":id", $id, PDO::PARAM_INT);
    $PDOStatement->bindParam(":cout", $clockOut, PDO::PARAM_STR);
    if ($PDOStatement->execute()) {
        $anyGodLikeOutPut = "Your result: " . $clockOut;
    } else {
        throw new \Exception("MYSQL Error: " . implode(",", $PDOStatement->errorInfo()));
    }
}
?>
<!DOCTYPE html>
<html lang="de">
<head></head>
<body>
<?= $anyGodLikeOutPut; ?>
<form action="" method="post">
    <h2>Clock In</h2>
    <button name="click" class="click">Clock In!</button>
</form>
<form action="" method="post">
    <h2>Clock Out</h2>
    <button name="click2" class="click2">Clock Out!</button>
    <input type="hidden" name="id" value="<?= $id; ?>">
</form>
</body>
</html>

答案 1 :(得分:0)

您必须在某处存储第一个日期的ID。也许隐藏输入。然后,如果设置了隐藏输入,则应该使用该特定ID在该特定行上运行UPDATE查询。