2010-11-12 6 views
0

Я новичок в PHP и не считаю себя кодером. Я занимаюсь своим первым действием, основанным на базе данных, и у меня возникают проблемы с правильной форматировкой даты. Строка, в которой я форматирую дату, кажется, игнорируется. Я делаю что-то невероятно неправильно?Формат вывода даты в 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 />"; 
    } 
?> 

ответ

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"]); 
+0

+1 для указания уязвимости. –

+0

И, конечно же, MySQL отлично подходит для форматирования даты: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format. Возможно, лучше сделать это на стороне БД и сохранить двойное преобразование (mysql date -> string вместо mysql -> php -> string). –

+0

Спасибо. Работает без проблем. И дополнительная благодарность за ужесточение моей безопасности! – Jeremiah

0

Похоже, что вы не отображаются сообщения об ошибках, потому что с вашим кодом, вы должны по крайней мере, получите предупреждение за $ date, которое не определено при первом использовании.

Это как вождение без какой-либо приборной панели.

Если вы работаете над средой разработки, убедитесь, что отображаются ошибки (параметр apache_page), и высокий уровень ошибок (установите для параметра error_reporting значение -1 для максимального выхода ошибки).

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, чтобы переменная сохранялась в строке результата с именем, которое ожидает ваш код.

Смежные вопросы