Page 1 of 1

Date formatting issue

Posted: Sun Apr 28, 2013 8:56 pm
by geneh23
Hey everyone,

So everything works fine as far as functionality but I want to change the date format to display something like "Thu., Apr 25th, 2013 4: 28 PM". I can get every page to show up with this format execpt for the blog_read.php file. I don't know why this is because I've used the same code. Here are my files. Please help! Thanks in advance!

blog_list.php
<?php

include('core/init.inc.php');

?>
<!DOCTYPE html PUBLIC "-//WC3//DTD XHTML 1.0 Strict//EN" "http://www.w3/org/TR/xhtml1/DTD/xhtml-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>Blog</title>
	</head>
	<body>
		<div>
			<?php
			
			$posts = get_posts();
			
			foreach ($posts as $post){
				?>
				<h2><a href="blog_read.php?pid=<?php echo $post['id']; ?>"><?php echo $post['title']; ?></a></h2>
				<h4>By <?php echo $post['user']; ?> on <?php echo $post['date']; ?></h4>
				<h4>(<?php echo $post['total_comments']; ?> comments, last comment <?php echo $post['last_comment']; ?>)</h4>
				
				<hr />
				
				<p><?php echo $post['preview']; ?></p>
				<?php
			}
			
			?>
		</div>
	</body>
</html>
blog_post.php
<?php

include('core/init.inc.php');

if (isset($_POST['user'], $_POST['title'], $_POST['body'])) {
	add_post($_POST['user'], $_POST['title'], $_POST['body']);
	header('Location: blog_list.php');
	die();
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	</head>

			<form action="" method="post">
			<p>
				<label for="user">Name</label>
				<input type="text" name="user" id="user" />
			</p>
			<p>
				<label for="title">Title</label>
				<input type="text" name="title" id="title" />
			</p>
			<p>
				<textarea name="body" rows="20" cols="60"></textarea>
			</p>
			<p>
				<input type="submit" value="Add Post!" />
			</p>
		</form>
			<br class="clearfix" />
		</div>
		<div id="sidebar">
			<?php include 'includes/sidebar.php' ?>
		</div>
		<br class="clearfix" />
	</div>
	<?php include 'includes/bottom_content.php' ?>
</div>
<?php include 'includes/footer.php' ?>
</body>
</html>
blog_read.php
<?php

include('core/init.inc.php');

if (isset($_GET['pid'], $_POST['user'], $_POST['body'])) {
	if (add_comment($_GET['pid'], $_POST['user'], $_POST['body'])){
		header("Location: blog_read.php?pid={$_GET['pid']}");
	}else{
		header('Location: blog_list.php');
	}
	
	die();
}

?>
<!DOCTYPE html PUBLIC "-//WC3//DTD XHTML 1.0 Strict//EN" "http://www.w3/org/TR/xhtml1/DTD/xhtml-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>Blog</title>
	</head>
	<body>
		<div>
			<?php
			
			if (isset($_GET['pid']) === false || valid_pid($_GET['pid']) === false) {
				echo 'Invalid post ID.';
			}else{
				$post = get_post($_GET['pid']);
				
				?>
				<h2><?php echo $post['title']; ?></h2>
				<h4>By <?php echo $post['user']; ?> on <?php echo $post['date']; ?> (<?php echo count($post['comments']); ?> comments)</h4>
				
				<hr />
				
				<p><?php echo $post['body']; ?></p>
				
				<hr />
				<?php
				
				foreach ($post['comments'] as $comment){
					?>
					<p><?php echo $comment['body']; ?></p>
					<h4>By <?php echo $comment['user']; ?> on <?php echo $comment['date']; ?></h4>
					<hr />
					<?php
				}
				
				?>
				<form action="" method="post">
					<p>
						<label for="user">Name</label>
						<input type="text" name="user" id="user" />
					</p>
					<p>
						<textarea name="body" rows="20" col="60"></textarea>
					</p>
					<p>
						<input type="submit" value="Add Comment!" />
					</p>
				</form>
				<?php
			}
			
			?>
				</div>
	</body>
</html>
init.inc.php
<?php

mysql_connect('127.0.0.1', 'root', '');
mysql_select_db('blog');

include('inc/posts.inc.php');
include('inc/comments.inc.php');

?>
posts.inc.php
<?php

//checks if the given post id is in the table
function valid_pid($pid) {
	$pid = (int)$pid;
	
	$total = mysql_query("SELECT COUNT(`post_id`) FROM `posts` WHERE `post_id` = {$pid}");
	$total = mysql_result($total, 0);
	
	if ($total != 1) {
		return false;
	}else{
		return true;
	}
}

//gets a summary of all blog posts
function get_posts() {
	$sql = "SELECT
				`posts`.`post_id` AS `id`,
				`posts`.`post_title` AS `title`,
				LEFT(`posts`.`post_body`, 512) AS `preview`,
				`posts`.`post_user` AS `user`,
				DATE_FORMAT(`posts`.`post_date`, '%a., %b %D, %Y %l: %i %p') AS `date`,
				`comments`.`total_comments`,
				DATE_FORMAT(`comments`.`last_comment`, '%a., %b %D, %Y %l: %i %p') AS `last_comment`
			FROM `posts`
			LEFT JOIN(
				SELECT
					`post_id`,
					COUNT(`comment_id`) AS `total_comments`,
					MAX(`comment_date`) AS `last_comment`
				FROM `comments`
				GROUP BY `post_id`
			) AS `comments`
			ON `posts`.`post_id` = `comments`.`post_id`
			ORDER BY `posts`.`post_date` DESC";
	
	$posts = mysql_query($sql);
	
 $rows = array();
        while (($row = mysql_fetch_assoc($posts)) !== false) {
                $rows[] = array(
                        'id'                       => $row['id'],
                        'title'                   => $row['title'],
                        'preview'             => $row['preview'],
                        'user'                   => $row['user'],
                        'date'                   => $row['date'],
                        'total_comments' => ($row['total_comments'] === null) ? 0 : $row['total_comments'],
                        'last_comment'     => ($row['last_comment'] === null) ? 'none' : $row['last_comment']
                );
	}
	
	return $rows;
}

//gets a single post from the table
function get_post($pid) {
	$pid = (int)$pid;
	
	$sql = "SELECT
				`post_title` AS `title`,
				`post_body` AS `body`,
				`post_user` AS `user`,
				`post_date` AS `date`
			FROM `posts`
			WHERE `post_id` = {$pid}";
	
	$post = mysql_query($sql);
	$post = mysql_fetch_assoc($post);
	
	$post['comments'] = get_comments($pid);
	
	return $post;
}

//adds a new blog entry
function add_post($name, $title, $body) {
	$name = mysql_real_escape_string(htmlentities($name));
	$title = mysql_real_escape_string(htmlentities($title));
	$body = mysql_real_escape_string(nl2br(htmlentities($body)));
	
	mysql_query("INSERT INTO `posts` (`post_user`, `post_title`, `post_body`, `post_date`) VALUES ('{$name}', '{$title}', '{$body}', NOW())");
}

?>
comments.inc.php
<?php

//gets all of the comments for a given blog post
function get_comments($pid){
	$pid = (int)$pid;
	
	$sql = "SELECT
				`comment_body` AS `body`,
				`comment_user` AS `user`,
				DATE_FORMAT(`comment_date`, '%a., %b %D, %Y %l: %i %p') AS `date`
			FROM `comments`
			WHERE `post_id` = {$pid}";
			
	$comments = mysql_query($sql);
	
	$return = array();
	while(($row = mysql_fetch_assoc($comments)) !== false) {
		$return[] = $row;
	}
	return $return;
}

//adds a comment
function add_comment($pid, $user, $body) {
	if (valid_pid($pid) === false) {
		return false;
	}
	
	$pid 	= (int)$pid;
	$user 	= mysql_real_escape_string(htmlentities($user));
	$body 	= mysql_real_escape_string(nl2br(htmlentities($body)));
	
	mysql_query("INSERT INTO `comments` (`post_id`, `comment_user`, `comment_body`, `comment_date`) VALUES ({$pid}, '{$user}', '{$body}', NOW())");
	
	return true;
}

?>
Again, Thanks for any help!

Re: Date formatting issue

Posted: Sun Apr 28, 2013 10:38 pm
by Temor
Could you be a bit more descriptive as to what the problem is? Does it not show at all, or does it show the wrong date or format?
Is anything else acting strange or not working?

Re: Date formatting issue

Posted: Sun Apr 28, 2013 11:59 pm
by geneh23
Sorry, I meant to say that in the post. It posts this format on the blog_list.php page "Thu., Apr 25th, 2013 4: 28 PM" but on the blog_read.php page that looks at one blog post at a time, it shows this format "2013-04-25 16:28:04" and I want it to read the first format.

In the posts.inc.php as well as the comments.inc.php files, I've got this sql format that should output this format: "Thu., Apr 25th, 2013 4: 28 PM" which is this in sql "%a., %b %D, %Y %l: %i %p" and it does output that format on the blog_list.php page but it shows the original "2013-04-25 16:28:04" which I think is %d,%m, %Y %H:%i:%s on the blog_read.php and I can't seem to figure out why it doesn't output the "%a., %b %D, %Y %l: %i %p" format that shows correctly on the blog_list.php.

Re: Date formatting issue

Posted: Mon Apr 29, 2013 12:27 am
by geneh23
and it shows the right date but in the wrong format

Re: Date formatting issue

Posted: Mon Apr 29, 2013 9:38 pm
by Temor
I can't spot what would be causing it, but there is a solution.
Remove the formatting from the SQL statement and fetch just the unformatted timestamp, and use the date() function to format it.
http://php.net/manual/en/function.date.php

This
echo date("D, M jS, Y g: i A",$timestamp); 
will output in this format:
Thu, Apr 18th, 2013 10: 36 PM

Re: Date formatting issue

Posted: Mon Apr 29, 2013 11:31 pm
by geneh23
Sorry for sounding dumb but can you explain what you're trying to say?

Re: Date formatting issue

Posted: Tue Apr 30, 2013 7:04 am
by Temor
Do this in comments.inc.php

Change the SQL statement in this
function get_comments($pid){
        $pid = (int)$pid;
       
        $sql = "SELECT
                                `comment_body` AS `body`,
                                `comment_user` AS `user`,
                                DATE_FORMAT(`comment_date`, '%a., %b %D, %Y %l: %i %p') AS `date`
                        FROM `comments`
                        WHERE `post_id` = {$pid}";
                       
        $comments = mysql_query($sql);
       
        $return = array();
        while(($row = mysql_fetch_assoc($comments)) !== false) {
                $return[] = $row;
        }
        return $return;
}
to this:
function get_comments($pid){
        $pid = (int)$pid;
       
        $sql = "SELECT
                                `comment_body` AS `body`,
                                `comment_user` AS `user`,
                              `comment_date` AS `date`
                        FROM `comments`
                        WHERE `post_id` = {$pid}";
                       
        $comments = mysql_query($sql);
       
        $return = array();
        while(($row = mysql_fetch_assoc($comments)) !== false) {
                $return[] = $row;
        }
        return $return;
}
And then take this from blog.read.php
  foreach ($post['comments'] as $comment){
                                        ?>
                                        <p><?php echo $comment['body']; ?></p>
                                        <h4>By <?php echo $comment['user']; ?> on <?php echo $comment['date']; ?></h4>
                                        <hr />
                                        <?php
                                }
and change into the following:
  foreach ($post['comments'] as $comment){
                                        ?>
                                        <p><?php echo $comment['body']; ?></p>
                                        <h4>By <?php echo $comment['user']; ?> on <?php echo date("D, M jS, Y g: i A",$comment['date']); ?></h4>
                                        <hr />
                                        <?php
                                }
This should work.

Re: Date formatting issue

Posted: Tue Apr 30, 2013 8:24 pm
by geneh23
Do I do the same thing for the posts.inc.php and then do the same thing for the post section in the blog_read.php as you did for the comments?

Re: Date formatting issue

Posted: Wed May 01, 2013 4:29 pm
by Temor
If you want to.
You don't have to if they are working as they should.

If you do it, it's mostly for consistency ( which is good, but not absolutely necessary ).

Re: Date formatting issue

Posted: Wed May 01, 2013 9:36 pm
by geneh23
it doesn't do the right format. It shows "Thu, Jan 1st, 1970 1: 33 AM"

Re: Date formatting issue

Posted: Wed May 01, 2013 9:43 pm
by geneh23
and the commenting section works fine, it's the post date that wont change but it needs to change with the correct date that It was submitted to the database. So it needs to pull that data and format it correctly.

Re: Date formatting issue

Posted: Thu May 02, 2013 12:28 am
by geneh23
Nevermind! I solved it! I just added the Date_Format() and added the format that I wanted in the "get_post" function. Now it makes sense..the get_post's' function had the right format as well as the comments function..it only makes sense that the "get_post" function have the same..fail on my part lol sorry for wasting time for you guys..