我是PHP新手,不认为自己是编码员。我正在处理我的第一个数据库驱动的操作,并且无法正确地格式化日期输出。我格式化日期的行似乎被忽略了。我做了一件令人难以置信的错事吗?
这是页面上的输出:
Comment from: Jeremiah
1289594028
here is my comment
以下是代码:
<?php
$name = $_POST['name'];
$comment = $_POST['comment'];
if($name && $comment and ereg("^[A-Za-z0-9' -]+$",$name) and ereg("^[A-Za-z0-9' -,.:;()!?&#@'/]+$",$comment))
{
mysql_query("insert into pilot_comments (name,comment,date,page) values ('$name', '$comment',NOW(),'challenge1')");
}
elseif($_POST['submitted']==1)
{
echo "<img src='images/structure/commenting_spacer.png' height='1' width='249'>";
echo "<br /><br /><div style='width:209px; background-color:#ff0000; padding:20px'><span class='white bold fourteen'>Uh oh! You may have:<br /><br />(1) Entered special characters, or <br /><br />(2) Not entered text into both fields.</span><br /><br /><span class='white twelve'>(This helps me fight spam. Thanks for understanding.)</span></div><br /><br />";
}
?>
<?php
$result = mysql_query("select name,comment,UNIX_TIMESTAMP(date) from pilot_comments where page='challenge1' order by date desc");
echo mysql_error();
$date = date("l, F j, Y \a\t g:i:s \P\S\T",$date);
while(list($name,$comment,$date) = mysql_fetch_row($result))
{
echo "<img src='images/structure/commenting_spacer.png' height='1' width='249'>";
echo "<div STYLE='word-wrap:break-word;width:249px;left:0px'><span class='twelve gray'><br />Comment from: </span><span class='twelve gray bold'>$name</span></div>";
echo "<span class='ten light-gray bold'>$date<br /><br /></span>";
echo "<div STYLE='word-wrap:break-word;width:249px;left:0px'><span class='fourteen green bold'>$comment</span></div><br /><br />";
}
?>
答案 0 :(得分:3)
移动此行:
$date = date("l, F j, Y \a\t g:i:s \P\S\T",$date);
在while循环中(每次迭代都会创建一个新的$date
,因此格式化会丢失):
while(list($name,$comment,$date) = mysql_fetch_row($result))
{
$date = date("l, F j, Y \a\t g:i:s \P\S\T",$date);
... rest goes here ...
顺便说一句,您的代码容易受到SQL injection的攻击。您应该在使用脚本进行实际使用之前解决这个问题,方法是在转义函数中包含$_POST
的每一个提及,如下所示:
$name = mysql_real_escape_string($_POST["name"]);
答案 1 :(得分:0)
看起来你没有显示错误,因为对于你的代码,你应该至少得到一个$ date的警告,这在第一次使用时是未定义的。
这就像没有任何仪表板的驾驶一样。
如果您正在开发环境,请确保显示错误(display_errors apache设置),并且您的错误级别很高(将error_reporting设置为-1以获得最大错误输出)。
答案 2 :(得分:0)
您需要将$date = date("l, F j, Y \a\t g:i:s \P\S\T",$date);
移至while
循环
将它放在循环之外,对于循环的每次迭代,数据库中的值不会存储在$date
中。
您还需要在查询中将UNIX_TIMESTAMP(date)
更改为UNIX_TIMESTAMP(date) as date
,以便使用您的代码所期望的名称将变量保存在结果行中。