Php 如何添加提交表单的时间
我在下面有这个页面,这是您提交表单时的操作。 我想知道您如何向这个函数添加时间函数,以便在“time”行中添加表单提交到我的数据库表的时间。我尝试了很多方法,但都无法成功:/Php 如何添加提交表单的时间,php,mysql,forms,date,mysqli,Php,Mysql,Forms,Date,Mysqli,我在下面有这个页面,这是您提交表单时的操作。 我想知道您如何向这个函数添加时间函数,以便在“time”行中添加表单提交到我的数据库表的时间。我尝试了很多方法,但都无法成功:/ <?php require 'db/connect.php'; if(isset($_POST['submitted'])) { $player = $_POST['inputWho']; $offense = $_POST['inputWhat']; $where = $_POST['i
<?php
require 'db/connect.php';
if(isset($_POST['submitted']))
{
$player = $_POST['inputWho'];
$offense = $_POST['inputWhat'];
$where = $_POST['inputPlace'];
$proof = $_POST['inputProof'];
$comments = $_POST['inputComments'];
$sqlinsert = "INSERT INTO offenses (player, reason, place, proof, comments) VALUES ('$player', '$offense', '$where', '$proof', '$comments')";
if (!mysqli_query($db, $sqlinsert)) {
die('Error inserting new record.'. "<br />". mysqli_error($db));
} //end of nested if
} //end of if
header("Location: success.php");
?>
使您的sql如下所示:
$sqlinsert = "INSERT INTO offenses (player, reason, place, proof, comments, time) VALUES ('$player', '$offense', '$where', '$proof', '$comments', NOW())";
created_time datetime default current_timestamp
使用MySQL函数NOW()。使您的sql如下:
$sqlinsert = "INSERT INTO offenses (player, reason, place, proof, comments, time) VALUES ('$player', '$offense', '$where', '$proof', '$comments', NOW())";
created_time datetime default current_timestamp
立即使用MySQL函数()
date_default_timezone_set('America/Los_Angeles');
$dateEnquiry = date("Y-m-d H:i:s", time());
$sqlinsert = "INSERT INTO offenses (player, reason, place, proof, comments, time) VALUES ('$player', '$offense', '$where', '$proof', '$comments', '$dateEnquiry')";
试试这个:
date_default_timezone_set('America/Los_Angeles');
$dateEnquiry = date("Y-m-d H:i:s", time());
$sqlinsert = "INSERT INTO offenses (player, reason, place, proof, comments, time) VALUES ('$player', '$offense', '$where', '$proof', '$comments', '$dateEnquiry')";
我通常处理此问题的方法是向表中添加一列,如下所示:
$sqlinsert = "INSERT INTO offenses (player, reason, place, proof, comments, time) VALUES ('$player', '$offense', '$where', '$proof', '$comments', NOW())";
created_time datetime default current_timestamp
您甚至不必在INSERT语句中包含它,它将在创建行时自动设置
EDIT:上述语句仅适用于类型TIMESTAMP,而不是DATETIME。(目前很多人可能仍然使用MySQL 5.5或更早版本。)这里的手册中讨论了这一点:
通过使用,可以避免此版本问题。(或者不使用MySQL。)
如果在更新时也需要设置列,则这是另一个问题
我发现通常最好从数据库内部获取时间,而不是从web服务器提供时间。这避免了web服务器与数据库服务器的时间稍微不同步的问题。(您甚至可能有多个web服务器彼此不同步。)我通常处理此问题的方法是在表中添加一列,如下所示:
$sqlinsert = "INSERT INTO offenses (player, reason, place, proof, comments, time) VALUES ('$player', '$offense', '$where', '$proof', '$comments', NOW())";
created_time datetime default current_timestamp
您甚至不必在INSERT语句中包含它,它将在创建行时自动设置
EDIT:上述语句仅适用于类型TIMESTAMP,而不是DATETIME。(目前很多人可能仍然使用MySQL 5.5或更早版本。)这里的手册中讨论了这一点:
通过使用,可以避免此版本问题。(或者不使用MySQL。)
如果在更新时也需要设置列,则这是另一个问题
我发现通常最好从数据库内部获取时间,而不是从web服务器提供时间。这避免了web服务器与数据库服务器的时间稍微不同步的问题。(您甚至可能有多个web服务器彼此不同步。)有几个php时间函数,您可以在php.net上查找,也可以在sql查询中使用UNIX_TIMESTAMP()或类似的东西。接下来,您的查询是开放的sql注入,只需使用mysql\u real\u escape\u string来转义您要插入的字符串,如果您不这样做,攻击者可以“构建自己的查询”并执行恶意代码。此外,您的代码示例是一场安全灾难:您正在接受用户提交的输入并将其直接发送到数据库。也许你只是为了保持你的例子简单而这样介绍它,但我想指出这一点,因为有人可能会看到你的代码并想模仿它。这是一个不好的例子。您应该使用带参数的预处理语句。参数不受SQL注入攻击的影响。任何时候,当你看到有人像这样将输入插入SQL字符串时,你就会看到一个巨大的危险信号,表明你正在寻找一个安全漏洞。我建议不要像@Sirac建议的那样试图逃避输入。它容易出错。只使用参数化查询。我听说人们更喜欢参数化查询而不是转义,但我从来没有听说过转义的问题。有几个php时间函数,请在php.net上查找,或者您可以在sql查询中使用UNIX_TIMESTAMP()或类似的东西。接下来,您的查询是开放的sql注入,只需使用mysql\u real\u escape\u string来转义您要插入的字符串,如果您不这样做,攻击者可以“构建自己的查询”并执行恶意代码。此外,您的代码示例是一场安全灾难:您正在接受用户提交的输入并将其直接发送到数据库。也许你只是为了保持你的例子简单而这样介绍它,但我想指出这一点,因为有人可能会看到你的代码并想模仿它。这是一个不好的例子。您应该使用带参数的预处理语句。参数不受SQL注入攻击的影响。任何时候,当你看到有人像这样将输入插入SQL字符串时,你就会看到一个巨大的危险信号,表明你正在寻找一个安全漏洞。我建议不要像@Sirac建议的那样试图逃避输入。它容易出错。只使用参数化查询。我听说人们更喜欢参数化查询而不是转义,但我从来没有听说过转义的问题。我也喜欢你的方法。@skywalker:你的方法也很有效,我想这是一个偏好的问题。就我个人而言,我只是希望尽可能地在数据库中保留定义。嘿,看看这个,我在表中创建了一个新行,名为“time”,格式为“datetime”,并将默认值设置为CURRENT_TIMESTAMP,但它不允许我添加rowSQL查询:altertableoffenses
addtime
DATETIME notnullopen
之后的默认当前_时间戳;MySQL说:Documentation#1067-'time'的默认值无效@aFreshKiwi:对不起,这只适用于MySQL v5.6.5或更高版本的DATETIME。对于早期版本,您只能使用带有时间戳类型的列。我也喜欢您的方法。@skywalker:您的方法也很好,我想这是您的偏好问题。就我个人而言,我只是希望尽可能地在数据库中保留定义。嘿,看看这个,我在表中创建了一个新行,名为“time”,格式为“datetime”,并将默认值设置为CURRENT_TIMESTAMP,但它不允许我添加rowSQL查询:altertableoffenses
addtime
DATETIME notnullopen
之后的默认当前_时间戳;MySQL说:Documentation#1067-'time'的默认值无效@aFreshKiwi:对不起,这只适用于MySQL v5.6.5或更高版本的DATETIME。对于早期版本,您可以