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

Post here is you are having problems with any of the tutorials.
RowruffDesign
Posts: 19
Joined: Mon Apr 09, 2012 1:14 pm
Contact:

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

Post by RowruffDesign »

Damn, you are amazing! :D

Everything is working fine now, except posting a comment

Warning: Cannot modify header information - headers already sent by (output started at /home/xridomqb/domains/rowrufftest.nl/public_html/core/inc/posts.inc.php:100) in /home/xridomqb/domains/rowrufftest.nl/public_html/blog_read.php on line 7
Image
User avatar
Temor
Posts: 1186
Joined: Thu May 05, 2011 8:04 pm

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

Post by Temor »

in your add_comment you forgot to put dollarsigns ( $ ) in front of the variable names in your query.

this:
mysql_query("INSERT INTO `comments` (`post_id`, `comment_user`, `comment_body`, `comments_date`) VALUES ({$pid}, '{user}', '{body}', NOW())");
needs to look like this:
mysql_query("INSERT INTO `comments` (`post_id`, `comment_user`, `comment_body`, `comments_date`) VALUES ({$pid}, '{$user}', '{$body}', NOW())");
RowruffDesign
Posts: 19
Joined: Mon Apr 09, 2012 1:14 pm
Contact:

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

Post by RowruffDesign »

That was just a stupid mistake!

But that wasn't the problem in the code! Still getting the same message!

Is it an idea to put all the code on a website or something? So you can look at all of them!
Image
User avatar
Temor
Posts: 1186
Joined: Thu May 05, 2011 8:04 pm

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

Post by Temor »

post all your code here using the php syntax tags.
RowruffDesign
Posts: 19
Joined: Mon Apr 09, 2012 1:14 pm
Contact:

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

Post by RowruffDesign »

These are all my codes:

comment.inc.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>
<html>
<head>
	<meta charset="utf-8">
	<title>Blog by Me</title>
</head>

<body>
<div id="wrapper">
<?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) {
?>

<h4><?php echo $comment['user']; ?> on <?php echo $comment['date']; ?></h4>
<p><?php echo $comment['body']; ?></p>
<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" cols="60"></textarea>
    </p>
    <p>
    	<input type="submit" value="Add Comment" />
    </p>
</form>
<?php
}
?>
</div><!-- End #wrapper -->
</body>
</html>
posts.inc.php
<?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);
	$post = mysql_fetch_assoc($post);
	
	$post['comments'] = get_comments($pid);
	
	return $post;
}

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())");
}

?>
blog_list.php
<?php

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

?>
<!DOCTYPE HTML>
<html>
<head>
	<meta charset="utf-8">
	<title>Untitled Document</title>
</head>
<body>
<div id="wrapper">
<?php

$posts = get_posts();

foreach ($posts as $post) { ?>
<article>
	<header>
		<hgroup>
        	<h2><a href="blog_read.php?pid=<?php echo $post['id']; ?>"><?php echo $post['title']; ?></a></h2>
    		<h4><?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>
    	</hgroup>
    </header>
       
    <p><?php echo $post['preview']; ?></p>
</article>
<?php
}
?>
</div><!-- End #wrapper -->
</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>
<html>
<head>
	<meta charset="utf-8">
	<title>Untitled Document</title>
</head>
<body>
<div id="wrapper">
<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>
</div><!-- End #wrapper -->
</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>
<html>
<head>
	<meta charset="utf-8">
	<title>Blog by Me</title>
</head>

<body>
<div id="wrapper">
<?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) {
?>

<h4><?php echo $comment['user']; ?> on <?php echo $comment['date']; ?></h4>
<p><?php echo $comment['body']; ?></p>
<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" cols="60"></textarea>
    </p>
    <p>
    	<input type="submit" value="Add Comment" />
    </p>
</form>
<?php
}
?>
</div><!-- End #wrapper -->
</body>
</html>
Image
User avatar
Temor
Posts: 1186
Joined: Thu May 05, 2011 8:04 pm

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

Post by Temor »

I have to admit defeat on this one. The error is saying that the output started in posts.inc.php on line 100. But there is no line 100.

I'll give it another look tomorrow when I'm hopefully not as tired.
RowruffDesign
Posts: 19
Joined: Mon Apr 09, 2012 1:14 pm
Contact:

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

Post by RowruffDesign »

I Found the error also really strange!

Tomorrow is a better day :D

Thank you for helping anyway :D
Image
User avatar
Temor
Posts: 1186
Joined: Thu May 05, 2011 8:04 pm

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

Post by Temor »

RowruffDesign wrote:Tomorrow is a better day :D
Hopefully, yes :)
RowruffDesign wrote:Thank you for helping anyway :D
No problems :)
RowruffDesign
Posts: 19
Joined: Mon Apr 09, 2012 1:14 pm
Contact:

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

Post by RowruffDesign »

Oke, I think I solved it!

It is a strange solution! I just putted some enters behind the code, that's why the error said there were 100 lines. I just removed the lines till line 86. Now it is working fine!

http://rowrufftest.nl/blog_list.php

Try it out yourself ;)

Now it is time for styling!
Image
User avatar
Temor
Posts: 1186
Joined: Thu May 05, 2011 8:04 pm

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

Post by Temor »

I'm glad you solved it :)
RowruffDesign
Posts: 19
Joined: Mon Apr 09, 2012 1:14 pm
Contact:

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

Post by RowruffDesign »

Well you did the most part of it :P
Image
Post Reply