Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何添加提交表单的时间_Php_Mysql_Forms_Date_Mysqli - Fatal编程技术网

Php 如何添加提交表单的时间

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

我在下面有这个页面,这是您提交表单时的操作。 我想知道您如何向这个函数添加时间函数,以便在“time”行中添加表单提交到我的数据库表的时间。我尝试了很多方法,但都无法成功:/

<?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查询:altertable
offenses
add
time
DATETIME notnull
open
之后的默认当前_时间戳;MySQL说:Documentation#1067-'time'的默认值无效@aFreshKiwi:对不起,这只适用于MySQL v5.6.5或更高版本的DATETIME。对于早期版本,您只能使用带有时间戳类型的列。我也喜欢您的方法。@skywalker:您的方法也很好,我想这是您的偏好问题。就我个人而言,我只是希望尽可能地在数据库中保留定义。嘿,看看这个,我在表中创建了一个新行,名为“time”,格式为“datetime”,并将默认值设置为CURRENT_TIMESTAMP,但它不允许我添加rowSQL查询:altertable
offenses
add
time
DATETIME notnull
open
之后的默认当前_时间戳;MySQL说:Documentation#1067-'time'的默认值无效@aFreshKiwi:对不起,这只适用于MySQL v5.6.5或更高版本的DATETIME。对于早期版本,您可以