我目前正在开展一个项目,我需要在成员登录页面的数据库中存储信息。目前,我正在努力存储用户输入凭据的时间。它一直弹出“Duplicate entry'00B 00:00:00'关键'PRIMARY'”,我理解除了为什么我的时间不会作为实际时间处理的所有内容...下面的部分我正在使用的代码...可能出了什么问题?或者有更好的方法来调用当前时间戳而不是我正在做的事情。
$mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE)
or die("Failed to connect");
if(isset($_POST['submit'])) {
date_default_timezone_set('America/Phoenix');
$username = mysql_real_escape_string($_POST['userlogin']);
$password = mysql_real_escape_string($_POST['userpassword']);
$today = date("F j, Y, h:i:s A");
$sql = "SELECT * FROM Member WHERE loginName = '".$username."' AND password = '".$password."'"; //checks for user in database
//--password = SHA2(CONCAT('bar','paz'),512)";
$result = $mysqli->query($sql) or die($mysqli->error); //shoots an error if something is wrong
if($result->num_rows < 1) // if the username/password is incorrect then an error message appears
{
echo "Invalid username/password combination. Please try again.";
}
else
{
echo "Welcome."; //Successful
$today = date("F j, Y, h:i:s A");
header('Location: thankspage.html');
$sql = " INSERT INTO Login (loginName,loginTime)
VALUES ('$username', '$today' ) "; // creates the login time.
$result = $mysqli->query($sql) or die ($mysqli->error); // shoots an error if i did something wrong.
}
}
答案 0 :(得分:3)
更改日期时间格式
$today = date("F j, Y, h:i:s A");
到正确的
$today = date("Y-m-d H:i:s");
这是 Codepad 演示
或完全抛弃$today
并在MySQL端使用NOW()
(如果时区设置与Web服务器上的相同)
INSERT INTO Login (loginName, loginTime) VALUES ('$username', NOW())
^^^^^
旁注:,因为您已经使用mysqli
考虑学习并使用prepared statements而不是插入查询字符串,这使您可以完全接受sql注入。< / p>
答案 1 :(得分:0)
确定。但是,如果您的日期列为timestamp
类型。它应该更容易,它应该根据您当前的时区显示您的时间。如果dates
是日期列,那么我设置为
`dates` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
每次插入或更新查询时,都应使用CURRENT_TIMESTAMP
。假设
INSERT INTO Login (loginName,loginTime) VALUES ('$username', CURRENT_TIMESTAMP)