PHP Tutorial: Blog (Including Commenting)

Post here is you are having problems with any of the tutorials.
Post Reply
Shenkuuz
Posts: 1
Joined: Fri Feb 01, 2013 11:24 pm

PHP Tutorial: Blog (Including Commenting)

Post by Shenkuuz »

Hello I'm new on the php and I was following the tutorial (blog Including commenting)

Everything was going fine until I got to the [part 05] where this error showed up:

mysql_result() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\blog\core\inc\posts.inc.php on line 8
Identificador de post invalido


I have checked the code but since I'm new at this i really cant find the mistake. The next two lines of code are the code I was editing and the posts.inc.php code
The blog_read.php
<?php
include('core/init.inc.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
			<title>BetterPHP: Blog Tutorial</title>
	</head>
	<body>
    	<div>
        	<?php
			if (isset($_GET['pid']) === false||valid_pid($_GET['pid'])=== false) {
				echo 'Identificador de post invalido';
			}else{
				$post = get_post($_GET['pid']);
			?>
            <h2><?php echo $post['title'];?></h2>
            <h4>Por: <?php echo $post['user']; ?> el <?php echo $post['date']; ?>(<?php echo count($post['comments']) ?> comentarios)</h4>
            <hr/>
            <p></p>
            <hr/>
            
            <form action="" method="post">
            	<p>
                	<label for="user">Name</label>
                    <input type="text" name="user" id="user"/>
                </p>
                <p>
                	<textarea name="body" rows="20" cols="60">
                    
                    </textarea>
                </p>
                <p>
                	<input type="submit" value="Comentar"/>
                </p>
            </form>
            <?php
			}
			?>
        </div>
	</body>
</html>
and the posts.php
<?php
	//Checks if the 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;
		}
	}
	//Gives a summary of 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);
		
		$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) ? 'never': $row ['last_comment']
			);
		}	
		return $rows;
	}
	//Gives only one post
	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 post
	function add_post($name,$title,$body){
		$name = mysql_real_escape_string(htmlentites($name));
		$title = mysql_real_escape_string(htmlentites($title));
		$body = mysql_real_escape_string(nl2br(htmlentites($body)));
		
		mysql_query("INSERT INTO `posts`(`post_user`,`post_title`,`post_body`,`post_date`) VALUES ('{$name}','{$title}','{$body}', NOW())");
	}
?>
desperate help!
User avatar
jacek
Site Admin
Posts: 3262
Joined: Thu May 05, 2011 1:45 pm
Location: UK
Contact:

Re: PHP Tutorial: Blog (Including Commenting)

Post by jacek »

In a few of your SQL queries you have ' where there should be `

For example
$total = mysql_query("SELECT COUNT('post_id') FROM 'posts' WHERE 'post_id' = {$pid}");
should be
$total = mysql_query("SELECT COUNT(`post_id`) FROM 'posts' WHERE `post_id` = {$pid}");
If you add
echo mysql_error();
after the line causing the error it will usually tell you a bit more about the problem too.
Image
Post Reply