Php I';我试图根据发布时间戳将注册日期添加到mysql中

Php I';我试图根据发布时间戳将注册日期添加到mysql中,php,mysql,mysqli,Php,Mysql,Mysqli,这对我来说是可行的,但它在mysql中添加了日期时间为1970 01 00:00 include("mysql_connect.php"); $phpdate = strtotime( $mysqldate ); $mysqldate = date( 'Y-m-d H:i:s', $phpdate ); //check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysql

这对我来说是可行的,但它在mysql中添加了日期时间为1970 01 00:00

include("mysql_connect.php");
$phpdate = strtotime( $mysqldate );
$mysqldate = date( 'Y-m-d H:i:s', $phpdate );

//check connection
if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$sql = "INSERT INTO people (username, email, sign_up_date) VALUES ('$_POST[username]','$_POST[usermail]', '" . $mysqldate . "'  )";

if (!mysqli_query($mysqli,$sql)) {
    die('Error: ' . mysqli_error($mysqli));
}
echo "1 record added";

mysqli_close($mysqli);
这是我的html表单:

<section class="loginform tmr">
<form name="login" action="regi.php" method="post" accept-charset="utf-8">
    <label for="username">Username: </label><br />
        <input type="username" name="username" placeholder="Handle" required><br />
        <input type="hidden" name="sign_up_date" value="<?php echo $_POST['sign_up_date'] ?>">
    <label for="usermail">Email: </label><br />
        <input type="email" name="usermail" placeholder="yourname@email.com" required><br />
    <label for="password">Password: </label><br />
        <input type="password" name="password" placeholder="password" required><br />
        <input type="submit" value="Login">
</form>
</section>
此外,我有一个名为account_permissions enum('a','b','c')的字段,我想知道如何将其插入表单中(我是否应该使用另一个隐藏输入)。。。我需要它一直默认为“a”


任何帮助都将不胜感激。谢谢。

请检查此处的日期时间格式,并根据您随时间获得的时间戳()创建它

或者,您可以将日期存储在时间戳中


关于enum,您可以添加一个包含这三个值的选择框。

如果您的
注册日期
列数据类型为
日期
,您可以使用MySQL函数:

INSERT INTO people (username, email, sign_up_date)
  VALUES ('name', 'email', CURDATE())
请记住,
DATE
列只存储日期,而不存储一天中的时间。如果要将一天中的时间精确到秒,请将其设为
DATETIME
列,并用
NOW()
而不是
CURDATE()
填充。如果要将一天中的时间精确到几分之一秒,请将其设为
时间戳
列,并用
当前时间戳
填充


重要提示:注意mysqli背后的要点是避免使用
之类的表达式。。。值('$\发布[用户名]“,”,“
,这使您容易受到SQL注入攻击。有关更多信息,请参阅,并遵循他们的指导原则-SQL注入是一个非常现实的威胁。

您所做的一切毫无意义。您正在用PHP生成日期,将其输出到页面,通过表单发送回,然后重新格式化并在SQL中使用。这有什么问题?

您甚至可以将该列的默认值设置为
CURRENT\u TIMESTAMP()
,而不必发送它

$sql = "INSERT INTO people (username, email) 
    VALUES ('$_POST[username]','$_POST[usermail]' )";
请注意,您的SQL是可以注入的,因为您没有清理$\u帖子

ALTER TABLE `people` MODIFY COLUMN `sign_up_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;

运行此查询一次以更改您的表并删除php代码中与“注册日期”字段相关的所有内容可以解决您的所有问题。基本上,这意味着当您插入新记录时,mysql将自动将当前日期值指定给“注册日期”字段作为默认值。

这可以帮助您:等等,您正在生成日期在PHP中,将其输出到页面,通过表单将其发送回,然后在新行中填充列,而不只是使用
NOW()
在SQL中?现在工作得非常出色。感谢您的解释和帮助。如果时间允许,我会将此标记为正确答案。您能帮我回答问题的第二部分吗?例如,如果我希望默认帐户权限为“c”或“b”。抱歉,我没有完全理解问题的这一部分,但下面是一个例子一般回答:如果您将列定义为“not null”-
account\u permissions enum('a','b','c')not null
-并插入一行而不指定
account\u premissions
值,MySQL将自动将其设置为第一个
enum
值(
a
),所以您不需要从PHP方面做任何事情。我不太确定我是否理解您提供的链接上的信息。这些是准备好的语句?要始终默认,一个简单的方法是更改
enum
定义。例如,如果您想始终默认为
b
,则可以定义e列为
account\u permissions enum('b','a','c')NOT NULL
。或者为了让它更明显(总是一件好事),将该列定义为
account\u permissions enum('a','b','c')NOT NULL默认值'b'
。谢谢您的帮助,我知道您提到了使用NOW()在你最初的评论中。我不知道这个函数。我应该仍然使用$u POST['sign\u up\u date'的隐藏输入吗
$sql = "INSERT INTO people (username, email) 
    VALUES ('$_POST[username]','$_POST[usermail]' )";
ALTER TABLE `people` MODIFY COLUMN `sign_up_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;