Page 1 of 1

Blog Tutorial - Invalid Post ID - blog-read.php

Posted: Thu Mar 01, 2012 9:54 pm
by dmanzer2
After making a new blog post or comment the page goes blank after clicking button (blog_post.php & blog_read.php). The posts are posting when I view blog_list.php and the comments are posting when I view blog_read.php. If I just preview the blog_read.php file I get a Invalid post ID message.

Can anyone help? Please

Thank you,
David

Re: Blog Tutorial - Invalid Post ID - blog-read.php

Posted: Thu Mar 01, 2012 11:25 pm
by Temor
Post your code using the proper syntax tags and I'll take a look at it.

Re: Blog Tutorial - Invalid Post ID - blog-read.php

Posted: Thu Mar 01, 2012 11:54 pm
by dmanzer2
Thank you!

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 lang="en" class="no-js">
	<head>
		<meta charset="UTF-8">
		<!-- www.phpied.com/conditional-comments-block-downloads/ -->
		<!--[if IE]><![endif]-->
		
		<script> document.documentElement.className = 'js'; </script>
		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
		
		<link rel="shortcut icon" href="/favicon.ico">
		<link rel="apple-touch-icon" href="/apple-touch-icon.png">
		
		<link rel="stylesheet" href="css/reset.css" />
		<link rel="stylesheet" href="css/960_24_col.css"/>
		<link rel="stylesheet" href="css/text.css" />
		<link rel="stylesheet" href="css/style.css" />
		
		<!-- For the less-enabled mobile browsers like Opera Mini -->
		<link rel="stylesheet" media="handheld" href="css/handheld.css?v=1">
		
		<!--[if lt IE 9]>
		<script src="http://html5shiv.googlecode.com/svn/tru ... "></script>
		<script src="js/selectivizr.js"></script>
		<![endif]-->
		
		<script src="http://ajax.googleapis.com/ajax/libs/jq ... "></script>
		
		<title>SITENAME</title>
	
	</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 />
                <?php
				
				foreach ($post['comments'] as $comment){
					?>
                    <h4>By <?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>
    </body>
</html>
posts.inc.php
<?php

// checks 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 summery 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);
	
	$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_comments'		=> ($row['last_comment'] === null) ? 'never' : $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())");
}
	
?>
comments.inc.php
<?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;
}

?>
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 lang="en" class="no-js">
	<head>
		<meta charset="UTF-8">
		<!-- www.phpied.com/conditional-comments-block-downloads/ -->
		<!--[if IE]><![endif]-->
		
		<script> document.documentElement.className = 'js'; </script>
		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
		
		<link rel="shortcut icon" href="/favicon.ico">
		<link rel="apple-touch-icon" href="/apple-touch-icon.png">
		
		<link rel="stylesheet" href="css/reset.css" />
		<link rel="stylesheet" href="css/960_24_col.css"/>
		<link rel="stylesheet" href="css/text.css" />
		<link rel="stylesheet" href="css/style.css" />
		
		<!-- For the less-enabled mobile browsers like Opera Mini -->
		<link rel="stylesheet" media="handheld" href="css/handheld.css?v=1">
		
		<!--[if lt IE 9]>
		<script src="http://html5shiv.googlecode.com/svn/tru ... "></script>
		<script src="js/selectivizr.js"></script>
		<![endif]-->
		
		<script src="http://ajax.googleapis.com/ajax/libs/jq ... "></script>
		
		<title>SITENAME</title>
	
	</head>
    <body> 
        <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>
    </body>
</html>
blog_list.php
<?php

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

?>
<!DOCTYPE HTML>

<html lang="en" class="no-js">
	<head>
		<meta charset="UTF-8">
		<!-- www.phpied.com/conditional-comments-block-downloads/ -->
		<!--[if IE]><![endif]-->
		
		<script> document.documentElement.className = 'js'; </script>
		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
		
		<link rel="shortcut icon" href="/favicon.ico">
		<link rel="apple-touch-icon" href="/apple-touch-icon.png">
		
		<link rel="stylesheet" href="css/reset.css" />
		<link rel="stylesheet" href="css/960_24_col.css"/>
		<link rel="stylesheet" href="css/text.css" />
		<link rel="stylesheet" href="css/style.css" />
		
		<!-- For the less-enabled mobile browsers like Opera Mini -->
		<link rel="stylesheet" media="handheld" href="css/handheld.css?v=1">
		
		<!--[if lt IE 9]>
		<script src="http://html5shiv.googlecode.com/svn/tru ... "></script>
		<script src="js/selectivizr.js"></script>
		<![endif]-->
		
		<script src="http://ajax.googleapis.com/ajax/libs/jq ... "></script>
		
		<title>SITENAME</title>
	
	</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['body']; ?></p>
                <?php
				
			}
            ?>

        </div>
    </body>
</html>
init.inc.php
<?php

mysql_connect('localhost', 'root', 'root');
mysql_select_db('blog');

include('inc/posts.inc.php');
include('inc/comments.inc.php');

?>

Re: Blog Tutorial - Invalid Post ID - blog-read.php

Posted: Fri Mar 02, 2012 6:18 am
by Temor
try adding
echo mysql_error();
under your queries to see if they are doing what they should.

Re: Blog Tutorial - Invalid Post ID - blog-read.php

Posted: Fri Mar 02, 2012 4:03 pm
by dmanzer2
Hi Temor,

I tried the echo mysql_error(); and nothing changed. The same thing is still happening. Blank pages upon click. This might be a stupid question but I'm new at this. I did notice that When I test the comments.inc.php and post.inc.php directly that I get an internal server error. Could this be the issue? If so how would I resolve it? I just figured that message was happening because these are back end files. Any thoughts?

Thank you so much for all your help.

David

Re: Blog Tutorial - Invalid Post ID - blog-read.php

Posted: Fri Mar 02, 2012 4:51 pm
by Temor
Is this on a local server?
Try putting a hashtag (#) as the action in your forms.
<form action="#" method="post">
also, remove the die(); in your first if statement in both blog_read and blog_post.
if (isset($_POST['user'], $_POST['title'], $_POST['body'])){
        add_post($_POST['user'], $_POST['title'], $_POST['body']);
        header('Location: blog_list.php');
        die(); <-- this one.
}

Re: Blog Tutorial - Invalid Post ID - blog-read.php

Posted: Fri Mar 02, 2012 10:56 pm
by dmanzer2
Hi Temor,

Thank you for your help on this.

Yes, I am testing on a local server. I just added the hashtag (#) in the from action, tested it and nothing changed. Then I removed the die(); in both the blog_read and the blog_post and still nothing happened. :?:

Any other suggestions?

Thank you,
David

Re: Blog Tutorial - Invalid Post ID - blog-read.php

Posted: Sat Mar 03, 2012 1:16 am
by jacek
Adding the # will just break the form, don't do that ;)

The die() needs to be there. It is to prevent the rest of the script running once the browser has been redirected.


If you are getting blank pages it probably means there is a syntax error that is being hidden because of your error_reporting setting. In your php.ini file make sure that display_error is set to On and error_reporting is set to E_ALL, if you edit the file with the server running you will need to restart it for it to take effect. There are plenty of guides online if this made no sense ;)

Re: Blog Tutorial - Invalid Post ID - blog-read.php

Posted: Sat Mar 03, 2012 1:39 am
by Temor
jacek wrote:Adding the # will just break the form, don't do that ;)
I've encountered several cases where the page would redirect to an empty document if the form action was left empty. I never leave it empty now and so far it's working just fine :)

Re: Blog Tutorial - Invalid Post ID - blog-read.php

Posted: Tue Mar 06, 2012 7:13 pm
by dmanzer2
Thanks guys for helping with this. I'm sorry to be such a pain.

Okay, It seems I'm back to square one. I added the die() back and removed the #. As far as the php.ini files goes, where is that on a local server? Do I create it? Do you mean add the error_reporting to the init.inc.php?

Hold on... I think I'm getting close. I added
error_reporting(E_ALL);
ini_set('display_errors', 1);
to the init.inc.php and got this error when I tested the blog_post.php file: Warning: Cannot modify header information - headers already sent by (output started at /Volumes/Project/blog/core/init.inc.php:16) in /Volumes/Project/blog/blog_post.php on line 7

This on the blog_list.php:
Notice: Undefined index: body in /Volumes/Project/blog/blog_list.php on line 52
New
By Dave on 02/03/2012 08:51:55
(0 comments, last comment
Notice: Undefined index: last_comment in /Volumes/Project/blog/blog_list.php on line 48
)


Notice: Undefined index: body in /Volumes/Project/blog/blog_list.php on line 52
By on 02/03/2012 08:51:13
(0 comments, last comment
Notice: Undefined index: last_comment in /Volumes/Project/blog/blog_list.php on line 48
)


Notice: Undefined index: body in /Volumes/Project/blog/blog_list.php on line 52
ads
By vfsdav on 01/03/2012 14:30:16
(1 comments, last comment
Notice: Undefined index: last_comment in /Volumes/Project/blog/blog_list.php on line 48
)

I still don't know the issue. I'm going to try to examine it further. If you have any thoughts on the issue please let me know.

Thank you,
David

Re: Blog Tutorial - Invalid Post ID - blog-read.php

Posted: Thu Mar 08, 2012 1:14 am
by jacek
Hmm, okay
dmanzer2 wrote:to the init.inc.php and got this error when I tested the blog_post.php file: Warning: Cannot modify header information - headers already sent by (output started at /Volumes/Project/blog/core/init.inc.php:16) in /Volumes/Project/blog/blog_post.php on line 7
This is probably the one to fix first. It is happening because you are trying to send a header after there has already been some output form the script (not allowed). It tells you that the output came from line 16 of init.inc.php so you need to either remove that or move it after any headers.

The other ones are just telling you that some variables you have tried to use are not there, this can only happen if they have not been defined. It could be the result of a query failing or maybe just a typo, trace the variable back from the point where the error is and see if you see where it went wrong. I can't see anything right away but I only have a quick look.

Re: Blog Tutorial - Invalid Post ID - blog-read.php

Posted: Fri Mar 09, 2012 8:52 pm
by dmanzer2
Thank you, Jacek and Temor. It works!! :D

Cheers,
David

Re: Blog Tutorial - Invalid Post ID - blog-read.php

Posted: Sun Mar 11, 2012 1:15 am
by jacek
dmanzer2 wrote:Thank you, Jacek and Temor. It works!! :D

Cheers,
David
No problem :D