我正在开设聊天室计划,我希望有时间提交信息进行录制和显示,但我遇到了问题(否则我不会在这里)。该程序使用表格记录日期/时间如下:
$table_str = "CREATE TABLE IF NOT EXISTS `$ChatTable`
(
`username` VARCHAR(16) NOT NULL,
`message` VARCHAR(280) NOT NULL,
`updated_at` TIMESTAMP DEFAULT 0,
`posted_at` DATETIME DEFAULT NULL
)";
当提交消息时,它应该记录发布时的当前日期/时间,然后从表中选择它,但我的问题是它以某种方式记录了非法值并显示了数据为:0000-00-00 00:00:00即使我可以在td id = time中使用注释掉的部分显示日期/时间而没有太大困难,但它只显示当前时间而不是存储它。有什么帮助吗?我在网上搜索答案,但没有找到解决方案。
$result = mysqli_query($con,"SELECT * FROM $ChatTable");
echo "<table border='1'>
<tr>
<th>User</th>
<th>Message</th>
<th>Time Posted</th>
</tr>";
while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td id='usersty'>" . $row['username'] . "</td>";
echo "<td id='messagesty'>" . $row['message'] . "</td>";
echo "<td id= 'time'>" . /*gmdate('l F \ jS, Y h:i:s A')*/$row['posted_at'] . "</td>";
echo "</tr>";
}
echo "</table>";
这是插入信息的地方:
$posted_at= mysqli_query(date('YY-MM-DD','HH:MM:SS'));
$sql= "INSERT INTO $ChatTable ( username, message, posted_at )
VALUES ( '$username', '$_POST[$message]', '$_POST[posted_at]')";
if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
答案 0 :(得分:0)
你的问题在于这一行:
$posted_at= mysqli_query(date('YY-MM-DD','HH:MM:SS'));
它存在多个问题:
1)当你的意思是mysqli_query()
时,你正在使用mysqli_real_escape_string()
。但是您不需要转义该值,因为它不包含任何可能破坏您查询的字符。
2)您错误地使用了date()
。第一个参数是它将生成的字符串的格式,第二个参数是我们在这里不使用的可选Unix时间戳。
3)日期字符串的格式也是错误的。有关如何正确格式化日期字符串的信息,请参阅date()
页面。
以下是您更正后的代码:
$posted_at = date('Y-m-d H:i:s');
另一种方法是在查询中设置更清晰,更快的值:
$sql= "INSERT INTO $ChatTable ( username, message, posted_at )
VALUES ( '$username', '$_POST[$message]', NOW())";
答案 1 :(得分:0)
您的查询似乎有误,以下是插值数组值的方法:
$sql= "INSERT INTO $ChatTable ( username, message, posted_at )
VALUES ( '$username', '{$_POST[$message]}', '{$_POST['posted_at']}')";
注意:并非这是构建查询的最佳方式,但可能只是为了您的目的。