Page 1 of 1

Blog(including commenting)

Posted: Sun Jan 13, 2013 1:00 pm
by Kevin123
Hi i have problem in Blog(including commenting) in part 05 i think.

Errors:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM `posts` WHERE `post_id` = 1' at line 1


file posts.inc.php
Error: Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\wamp\www\news\core\inc\posts.inc.php on line 70
<?php


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

}


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


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);
	echo mysql_error();
	$post = mysql_fetch_assoc($post);
	$post['comments'] = get_comments($pid);
	
	
	return $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}', '{$name}', '{$body}', NOW())");
}

?>
file comments.inc.php
Error: Notice: Undefined variable: comment in C:\wamp\www\news\core\inc\comments.inc.php on line 17
<?php


function get_comments($pid){
	$pid = (int)$pid;
	
	$sql = "SELECT
						`coment_body` AS `body`,
						`coment_user` AS `user`,
						DATE_FORMAT(`coment_date`, '%d/%m%Y %H:%i%:%s') AS `date`
						FROM `coments`
						WHERE `post_id` = {$pid}";
						
	$comments = mysql_query($pid);
	
	$return = array();
	While (($row = mysql_fetch_assoc($comment)) !== false){
		$return[] = $row;
	}
	
	return $return;
}


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

?>
file blog_read.php
<?php

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

?>

<html>
<head>
</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 />


<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="add coment">
</p>

</form>
<?php
}
?>

</div>

</body>
</html>
file blog_list.php
<?php

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

?>
<html>
<head>
</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>
im search and search and i found it is the problem "
<?php

if (isset($_GET['pid']) === false || valid_pid($_GET['pid']) === false){
	echo 'invalid post id';
}else{
	$post = get_post($_GET['pid']);
}

?>"
really i dont know what to do please help

Re: Blog(including commenting)

Posted: Sun Jan 13, 2013 2:34 pm
by ExtremeGaming
Your sql errors are because you have an extra comma in your get_post() function which makes sql think you want to select another row 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);
	echo mysql_error();
	$post = mysql_fetch_assoc($post);
	$post['comments'] = get_comments($pid);
	
	
	return $post;
}
Remove the comma and that should get rid of all the sql errors you mentioned

Your second undefined variable error is because you have:
$comments = mysql_query($pid);
In your while loop you are using:
While (($row = mysql_fetch_assoc($comment)) !== false){

Re: Blog(including commenting)

Posted: Sun Jan 13, 2013 5:32 pm
by Kevin123
what im a newbie ;d thx man but i cant understand second answer its must look like this ?
		$row = mysql_fetch_assoc($comment);
        

        $return = array();

        While (($comments = mysql_query($pid)) !== false){
				
                $return[] = $row;

        }

Re: Blog(including commenting)

Posted: Sun Jan 13, 2013 8:21 pm
by ExtremeGaming
All I told you to do was add an s on to $comment or it is undefined. All your sql errors will stop once you revert it back to the way you had it and add the s