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

Post here is you are having problems with any of the tutorials.
Post Reply
momoweeb
Posts: 8
Joined: Mon Oct 15, 2012 5:02 am

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

Post 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 :)

[syntax=php]//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())");


}
[/syntax]

[syntax=php]// 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;
}
[/syntax]

[syntax=php]mysql_connect('localhost', ' ', ' ' );
mysql_select_db('blog');

include 'inc/posts.inc.php';
include 'inc/comments.inc.php';[/syntax]
User avatar
EcazS
Posts: 789
Joined: Fri May 06, 2011 5:29 pm

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

Post by EcazS »

It's your query.

You wrote like this,
[syntax=sql]
'posts', 'post_id' AS 'id',
'posts', 'post_title' AS 'title',[/syntax]
It should be like this,
[syntax=sql]
`posts`.`post_id` AS `id`,
`posts`.`post_title` AS `title`,[/syntax]
So you will have to go around changing the comments to periods instead (and no spaces) and use backticks instead of single-quotes.
momoweeb
Posts: 8
Joined: Mon Oct 15, 2012 5:02 am

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

Post by momoweeb »

Thanks mate but still get the same error. Do I need to change all use the backticks to the single-quotes?


[syntax=php]//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())");


}[/syntax]

[syntax=php]
// 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;
}
[/syntax]
User avatar
EcazS
Posts: 789
Joined: Fri May 06, 2011 5:29 pm

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

Post by EcazS »

Backticks are recommended for field names.

Try doing this (instead of echo mysql_error())
[syntax=php]
$posts = mysql_query($sql) or die(mysql_error());
[/syntax]
momoweeb
Posts: 8
Joined: Mon Oct 15, 2012 5:02 am

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

Post 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?
User avatar
jacek
Site Admin
Posts: 3262
Joined: Thu May 05, 2011 1:45 pm
Location: UK
Contact:

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

Post 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.
Image
momoweeb
Posts: 8
Joined: Mon Oct 15, 2012 5:02 am

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

Post 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
Last edited by Helx on Sat Oct 20, 2012 12:44 pm, edited 2 times in total.
Reason: Unneeded quote.
Post Reply