Page 2 of 2

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

Posted: Tue Apr 10, 2012 7:39 pm
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

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

Posted: Tue Apr 10, 2012 8:33 pm
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())");

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

Posted: Tue Apr 10, 2012 9:35 pm
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!

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

Posted: Tue Apr 10, 2012 9:44 pm
by Temor
post all your code here using the php syntax tags.

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

Posted: Tue Apr 10, 2012 9:47 pm
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>

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

Posted: Tue Apr 10, 2012 10:09 pm
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.

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

Posted: Tue Apr 10, 2012 10:31 pm
by RowruffDesign
I Found the error also really strange!

Tomorrow is a better day :D

Thank you for helping anyway :D

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

Posted: Tue Apr 10, 2012 10:45 pm
by Temor
RowruffDesign wrote:Tomorrow is a better day :D
Hopefully, yes :)
RowruffDesign wrote:Thank you for helping anyway :D
No problems :)

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

Posted: Wed Apr 11, 2012 7:13 am
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!

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

Posted: Wed Apr 11, 2012 10:38 am
by Temor
I'm glad you solved it :)

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

Posted: Wed Apr 11, 2012 5:44 pm
by RowruffDesign
Well you did the most part of it :P