Page 1 of 1

PHP Tutorial: Blog (Including Commenting) [part 04]

Posted: Mon Oct 15, 2012 6:03 am
by momoweeb
Hi there, I am half way thro the blog video tutorials (part 04) and I get an error when I run the blog_list.php page.

Here is the Error message I get on the blog_list.php page:
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in /home/weebcoma/public_html/blog/func/inc/posts.inc.php on line 45

I also already tried the echo mysql_error() function. Appreciate your help :)
//Check 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; 
	   }
	
}

// fetches a summary of all the 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', '%d/%m/%Y %H:%i:%s') AS 'date',
					'comments', 'total_comments',
					'DATE_FORMAT' ('comments', 'last_comment' '%d/%m/%Y %H:%i:%s') 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); 
	echo mysql_error();
	$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)? 'Be the first one to comment on this post' : $row['last_comment']
		); 
	}
	
	return $rows;
}

//fetches 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())");  
	
	
}
// fetches 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', '%d/%m/%y %h:%i:%s') 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;
}
mysql_connect('localhost', '   ', '  '   );
mysql_select_db('blog');

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

Re: PHP Tutorial: Blog (Including Commenting) [part 04]

Posted: Mon Oct 15, 2012 6:09 am
by EcazS
It's your query.

You wrote like this,
'posts', 'post_id' AS 'id',
'posts', 'post_title' AS 'title',
It should be like this,
`posts`.`post_id` AS `id`,
`posts`.`post_title` AS `title`,
So you will have to go around changing the comments to periods instead (and no spaces) and use backticks instead of single-quotes.

Re: PHP Tutorial: Blog (Including Commenting) [part 04]

Posted: Mon Oct 15, 2012 6:53 am
by momoweeb
Thanks mate but still get the same error. Do I need to change all use the backticks to the single-quotes?

//Check 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; 
	   }
	
}

// fetches a summary of all the blog posts

function get_posts() {
	
	$sql = "SELECT `posts`.`post_id` AS `id`, 
	                `posts`.`post_title` AS `title`,
					LEFT (`posts`.`post_body`,200) AS `preview`,
					`posts`.`post_user` AS `user`,
					DATE_FORMAT (`posts`.`post_date`,'%d/%m/%Y %H:%i:%s') AS `date`,
					`comments`.`total_comments`,
					DATE_FORMAT (`comments`.`last_comment`, '%d/%m/%Y %H:%i:%s') 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); 
	echo mysql_error();
	$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)? 'Be the first one to comment on this post' : $row['last_comment']
		); 
	}
	
	return $rows;
}

//fetches 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())");  
	
	
}
// fetches 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`, '%d/%m/%y %h:%i:%s') 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;
}

Re: PHP Tutorial: Blog (Including Commenting) [part 04]

Posted: Mon Oct 15, 2012 12:27 pm
by EcazS
Backticks are recommended for field names.

Try doing this (instead of echo mysql_error())
$posts = mysql_query($sql) or die(mysql_error());

Re: PHP Tutorial: Blog (Including Commenting) [part 04]

Posted: Mon Oct 15, 2012 4:00 pm
by momoweeb
I get a blank page when I run the blog_list.php now. Should I be moving forward and write the rest of the codes? I reckon the syntax error still exists but I just beat the hell out of it with the die function :) right?

Re: PHP Tutorial: Blog (Including Commenting) [part 04]

Posted: Thu Oct 18, 2012 5:45 pm
by jacek
momoweeb wrote:I get a blank page when I run the blog_list.php now. Should I be moving forward and write the rest of the codes? I reckon the syntax error still exists but I just beat the hell out of it with the die function :) right?
Blank page does mean syntax error so carrying on will probably get you nowhere. The best thing to do would be to enable error_reporting so that PHP tells you what the problem is rather than silently failing.

Re: PHP Tutorial: Blog (Including Commenting) [part 04]

Posted: Sat Oct 20, 2012 11:32 am
by momoweeb
jacek wrote:
momoweeb wrote:I get a blank page when I run the blog_list.php now. Should I be moving forward and write the rest of the codes? I reckon the syntax error still exists but I just beat the hell out of it with the die function :) right?
Blank page does mean syntax error so carrying on will probably get you nowhere. The best thing to do would be to enable error_reporting so that PHP tells you what the problem is rather than silently failing.
Thanks mate. I solved the problem. Now I get a different sort of error. I put up the error detail in here: http://betterphp.co.uk/board/viewtopic.php?f=7&t=1988

Please take a look and lemme know if you can help.
Cheers