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

标签 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     |
|---------------------|------------------|------------------|

我希望像这样存储记录,当单击两个按钮时,或者如果单击一个按钮两次(一次为“clock_in”,再次为“clock_out”):

|---------------------|------------------|------------------|
|          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);
 }
?>

最佳答案

哦,从哪里开始, 第一:选择POST或GET,最好是POST。 第二:使用过滤器,这就是为什么使用 POST/GET 而不是 REQUEST。 第三:当你只使用时间时,为什么用 Y-m-d 初始化 date() ? 第四:使用准备好的语句。当你在 SQL 中编写 Var 并且不更改它时,当你创建生产软件时,你可以尽可能地使用 MySQLi,你会在几秒钟内被黑客攻击。我看到的一个问题是,您可以单击退出而无需单击进入。您需要一点 JS 和 Ajax,因此您可以禁用按钮 Click_out 并在单击 Click_in 时启用它。因此,您可以使用“INSERT”和“SELECT”(检查数据库中的 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>

关于php - 如何在不同时间将2条记录存储在同一列上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43208754/

相关文章:

PHP 页面不显示 mysqli fetch

php - mysqli_connect fatal error : require()

jquery - 仅限 OSX Firefox 中的 CSS 混合混合模式错误

php - mysqli_fetch_row 不返回结果,但 mysqli_fetch_assoc 返回结果

mysql - 如何在单个查询中执行复杂的插入、选择、更新?

mysql - LEFT JOIN 内的 SQL JOIN

php - 如何在 php 中创建一个填充前四个星期的下拉菜单

php - 如何将门禁读卡器与PHP链接?

javascript - 完成滑动输入类型="range"后触发函数

html - 更改最后一个字母颜色