我尝试使用将在不同时间点击的按钮将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);
}
?>
答案 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查询。