我尝试使用在不同时间单击的按钮将 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/