Laatste bericht bovenaan

Status
Niet open voor verdere reacties.

Mark07

Gebruiker
Lid geworden
6 jan 2007
Berichten
83
Hallo,
Ik heb even een vraagje!
Ik heb een reactie systeem een beetje omgebouwd naar een gastenboek, het probleem is dat hierbij het nieuwste bericht onderaan komt te staan, terwijl ik het nieuwste bericht bovenaan wil hebben.
Hier een stukje script waar ik denk dat dat aangepast moet worden:
PHP:
if(!isset($_GET['id']) OR !is_numeric($_GET['id']) OR !isset($_GET['sid']) OR !is_numeric($_GET['sid'])) {
	header("Location: ".WB_URL.PAGES_DIRECTORY."");
	exit(0);
}
$post_id = $_GET['id'];
$section_id = $_GET['sid'];

// Query post for page id
$query_post = $database->query("SELECT post_id,title,section_id,page_id FROM ".TABLE_PREFIX."mod_news_posts WHERE post_id = '$post_id'");
if($query_post->numRows() == 0) {
	header("Location: ".WB_URL.PAGES_DIRECTORY."");
	exit(0);
} else {
	$fetch_post = $query_post->fetchRow();
	$page_id = $fetch_post['page_id'];
	$section_id = $fetch_post['section_id'];
	$post_id = $fetch_post['post_id'];
	$post_title = $fetch_post['title'];
	define('SECTION_ID', $section_id);
	define('POST_ID', $post_id);
	define('POST_TITLE', $post_title);
	
	// don't allow commenting if its disabled, or if post or group is inactive
	$t = time();
	$table_posts = TABLE_PREFIX."mod_news_posts";
	$table_groups = TABLE_PREFIX."mod_news_groups";
	$query = $database->query("
		SELECT p.post_id
		FROM $table_posts AS p LEFT OUTER JOIN $table_groups AS g ON p.group_id = g.group_id
		WHERE p.post_id='$post_id' AND p.commenting != 'none' AND p.active = '1' AND ( g.active IS NULL OR g.active = '1' )
		AND (p.published_when = '0' OR p.published_when <= $t) AND (p.published_until = 0 OR p.published_until >= $t)
	");
	if($query->numRows() == 0) {
		header("Location: ".WB_URL.PAGES_DIRECTORY."");
		exit(0);
	}
Wie kan mij a.u.b helpen,
Alvast bedankt!!!
 
Laatst bewerkt:
Maak van:

PHP:
$query = $database->query("
        SELECT p.post_id
        FROM $table_posts AS p LEFT OUTER JOIN $table_groups AS g ON p.group_id = g.group_id
        WHERE p.post_id='$post_id' AND p.commenting != 'none' AND p.active = '1' AND ( g.active IS NULL OR g.active = '1' )
        AND (p.published_when = '0' OR p.published_when <= $t) AND (p.published_until = 0 OR p.published_until >= $t)
    ");

eens:

PHP:
$query = $database->query("
        SELECT p.post_id
        FROM $table_posts AS p LEFT OUTER JOIN $table_groups AS g ON p.group_id = g.group_id
        WHERE p.post_id='$post_id' AND p.commenting != 'none' AND p.active = '1' AND ( g.active IS NULL OR g.active = '1' )
        AND (p.published_when = '0' OR p.published_when <= $t) AND (p.published_until = 0 OR p.published_until >= $t) ORDER BY p.published_when
    ");

Ik heb hierbij de ORDER BY p.published_when toegevoegd. Ik weet niet zeker of p.published_when het moment van posten bevat, maar anders kun je dat zelf wel vervangen door het juiste veld.
 
Heb het geprobeerd te vervangen
Echter zonder resultaat!
Wat nu?
 
Hmm, ik nam aan dat die onderste query de verichten ophaalde, maar dat is dan blijkbaar niet zo. Als je het bij de bovenste query toevoegd?
 
Hmm, ik nam aan dat die onderste query de verichten ophaalde, maar dat is dan blijkbaar niet zo. Als je het bij de bovenste query toevoegd?

Excuseer me, ik snap niet wat je bedoeld!
Ben namelijk geen echte php-kenner!
 
Wacht, de code die ik gaf is niet volledig. Als je er nou eens van maakt:

PHP:
$query = $database->query("
        SELECT p.post_id
        FROM $table_posts AS p LEFT OUTER JOIN $table_groups AS g ON p.group_id = g.group_id
        WHERE p.post_id='$post_id' AND p.commenting != 'none' AND p.active = '1' AND ( g.active IS NULL OR g.active = '1' )
        AND (p.published_when = '0' OR p.published_when <= $t) AND (p.published_until = 0 OR p.published_until >= $t) ORDER BY p.published_when DESC
    ");

ik was DESC vergeten, en dat was nou juist het punt waar het om draait. Dat vertelt MySQL dat je aflopend wilt sorteren.
 
Wacht, de code die ik gaf is niet volledig. Als je er nou eens van maakt:

PHP:
$query = $database->query("
        SELECT p.post_id
        FROM $table_posts AS p LEFT OUTER JOIN $table_groups AS g ON p.group_id = g.group_id
        WHERE p.post_id='$post_id' AND p.commenting != 'none' AND p.active = '1' AND ( g.active IS NULL OR g.active = '1' )
        AND (p.published_when = '0' OR p.published_when <= $t) AND (p.published_until = 0 OR p.published_until >= $t) ORDER BY p.published_when DESC
    ");

ik was DESC vergeten, en dat was nou juist het punt waar het om draait. Dat vertelt MySQL dat je aflopend wilt sorteren.

Helaas geen resultaat :( en nu?
 
Tsja, dan weet ik het ook niet. Het leek mij voor de hand liggend. Misschien dat een andere forummer hier nog even een blik op kan werpen.
 
Ik zie view.php staan, daaruit heb ik het stukje gekopieerd waar ik denk dat iets veranderd moet worden!
Hieronder staat 'ie:

PHP:
// Show comments section if we have to
	if(($post['commenting'] == 'private' AND isset($wb) AND $wb->is_authenticated() == true) OR $post['commenting'] == 'public') {
		
		// Print comments header
		echo str_replace('[ADD_COMMENT_URL]', WB_URL.'/modules/news/comment.php?id='.POST_ID.'&sid='.$section_id, $setting_comments_header);
		
		// Query for comments
		$query_comments = $database->query("SELECT title,comment,commented_when,commented_by FROM ".TABLE_PREFIX."mod_news_comments WHERE post_id = '".POST_ID."' ORDER BY commented_when ASC");
		if($query_comments->numRows() > 0) {
			while($comment = $query_comments->fetchRow()) {
				// Display Comments without slashes, but with new-line characters
				$comment['comment'] = nl2br(($comment['comment']));
				$comment['title'] = ($comment['title']);
				// Print comments loop
				$commented_date = gmdate(DATE_FORMAT, $comment['commented_when']+TIMEZONE);
				$commented_time = gmdate(TIME_FORMAT, $comment['commented_when']+TIMEZONE);
				$uid = $comment['commented_by'];
				$vars = array('[TITLE]','[COMMENT]','[DATE]','[TIME]','[USER_ID]','[USERNAME]','[DISPLAY_NAME]', '[EMAIL]');
				if(isset($users[$uid]['username']) AND $users[$uid]['username'] != '') {
					$values = array(($comment['title']), ($comment['comment']), $commented_date, $commented_time, $uid, ($users[$uid]['username']), ($users[$uid]['display_name']), ($users[$uid]['email']));
				} else {
					$values = array(($comment['title']), ($comment['comment']), $commented_date, $commented_time, '0', strtolower($TEXT['UNKNOWN']), $TEXT['UNKNOWN'], '');
				}
				echo str_replace($vars, $values, $setting_comments_loop);
			}
		} else {
			// Say no comments found
			if(isset($TEXT['NONE_FOUND'])) {
				echo $TEXT['NONE_FOUND'].'<br />';
			} else {
				echo 'None Found<br />';
			}
		}
		
		// Print comments footer
		echo str_replace('[ADD_COMMENT_URL]', WB_URL.'/modules/news/comment.php?id='.POST_ID.'&sid='.$section_id, $setting_comments_footer);
	}
	if(ENABLED_ASP) {
		$_SESSION['comes_from_view'] = POST_ID;
		$_SESSION['comes_from_view_time'] = time();
	}
}

Hieronder wat andere codes van andere bestanden waar ik het stukje van de 'reacties' heb gevonden!:

PHP:
$query_settings = $database->query("SELECT comments_page,use_captcha,commenting FROM ".TABLE_PREFIX."mod_news_settings WHERE section_id = '".SECTION_ID."'");
if($query_settings->numRows() == 0) {
	header("Location: ".WB_URL.PAGES_DIRECTORY."");
	exit(0);
} else {
	$settings = $query_settings->fetchRow();

	// Print comments page
	echo str_replace('[POST_TITLE]', POST_TITLE, ($settings['comments_page']));
	?>
	<form name="comment" action="<?php echo WB_URL.'/modules/news/submit_comment.php?page_id='.PAGE_ID.'&section_id='.SECTION_ID.'&post_id='.POST_ID; ?>" method="post">
	<?php if(ENABLED_ASP) { // add some honeypot-fields
	?>
	<input type="hidden" name="submitted_when" value="<?php $t=time(); echo $t; $_SESSION['submitted_when']=$t; ?>" />
	<p class="nixhier">
	email address:
	<label for="email">Leave this field email blank:</label>
	<input id="email" name="email" size="60" value="" /><br />
	Homepage:
	<label for="homepage">Leave this field homepage blank:</label>
	<input id="homepage" name="homepage" size="60" value="" /><br />
	URL:
	<label for="url">Leave this field url blank:</label>
	<input id="url" name="url" size="60" value="" /><br />
	Comment:
	<label for="comment">Leave this field comment blank:</label>
	<input id="comment" name="comment" size="60" value="" /><br />
	</p>
	<?php }
	?>
	<?php echo $TEXT['TITLE']; ?>:
	<br />
	<input type="text" name="title" maxlength="255" style="width: 90%;"<?php if(isset($_SESSION['comment_title'])) { echo ' value="'.$_SESSION['comment_title'].'"'; unset($_SESSION['comment_title']); } ?> />
	<br /><br />
	<?php echo $TEXT['COMMENT']; 
	?>:
	<br />
	<?php if(ENABLED_ASP) { ?>
		<textarea name="c0mment_<?php echo date('W'); ?>" style="width: 90%; height: 150px;"><?php if(isset($_SESSION['comment_body'])) { echo $_SESSION['comment_body']; unset($_SESSION['comment_body']); } ?></textarea>
	<?php } else { ?>
		<textarea name="comment" style="width: 90%; height: 150px;"><?php if(isset($_SESSION['comment_body'])) { echo $_SESSION['comment_body']; unset($_SESSION['comment_body']); } ?></textarea>
	<?php } ?>
	<br /><br />
	<?php
	if(isset($_SESSION['captcha_error'])) {
		echo '<font color="#FF0000">'.$_SESSION['captcha_error'].'</font><br />';
		$_SESSION['captcha_retry_news'] = true;
	}
	// Captcha
	if($settings['use_captcha']) {
	?>
	<table cellpadding="2" cellspacing="0" border="0">
	<tr>
		<td><?php echo $TEXT['VERIFICATION']; ?>:</td>
		<td><?php call_captcha(); ?></td>
	</tr></table>
	<br />
	<?php
	if(isset($_SESSION['captcha_error'])) {
		unset($_SESSION['captcha_error']);
		?><script>document.comment.captcha.focus();</script><?php
	}?>
	<?php
	}
	?>
	<input type="submit" name="submit" value="<?php echo $TEXT['ADD']; ?> <?php echo $TEXT['COMMENT']; ?>" />
	</form>	
	<?php

Of hier dus:

PHP:
if(!isset($_GET['id']) OR !is_numeric($_GET['id']) OR !isset($_GET['sid']) OR !is_numeric($_GET['sid'])) {
	header("Location: ".WB_URL.PAGES_DIRECTORY."");
	exit(0);
}
$post_id = $_GET['id'];
$section_id = $_GET['sid'];

// Query post for page id
$query_post = $database->query("SELECT post_id,title,section_id,page_id FROM ".TABLE_PREFIX."mod_news_posts WHERE post_id = '$post_id'");
if($query_post->numRows() == 0) {
	header("Location: ".WB_URL.PAGES_DIRECTORY."");
	exit(0);
} else {
	$fetch_post = $query_post->fetchRow();
	$page_id = $fetch_post['page_id'];
	$section_id = $fetch_post['section_id'];
	$post_id = $fetch_post['post_id'];
	$post_title = $fetch_post['title'];
	define('SECTION_ID', $section_id);
	define('POST_ID', $post_id);
	define('POST_TITLE', $post_title);
	
	// don't allow commenting if its disabled, or if post or group is inactive
	$t = time();
	$table_posts = TABLE_PREFIX."mod_news_posts";
	$table_groups = TABLE_PREFIX."mod_news_groups";
 	
$query = $database->query("
        SELECT p.post_id
        FROM $table_posts AS p LEFT OUTER JOIN $table_groups AS g ON p.group_id = g.group_id
        WHERE p.post_id='$post_id' AND p.commenting != 'none' AND p.active = '1' AND ( g.active IS NULL OR g.active = '1' )
        AND (p.published_when = '0' OR p.published_when <= $t) AND (p.published_until = 0 OR p.published_until >= $t) ORDER BY p.published_when DESC
    ");

	if($query->numRows() == 0) {
		header("Location: ".WB_URL.PAGES_DIRECTORY."");
		exit(0);
	}

	// don't allow commenting if ASP enabled and user doesn't comes from the right view.php
	if(ENABLED_ASP && (!isset($_SESSION['comes_from_view']) OR $_SESSION['comes_from_view']!=POST_ID)) {
		header("Location: ".WB_URL.PAGES_DIRECTORY."");
		exit(0);
	}

	// Get page details
	$query_page = $database->query("SELECT parent,page_title,menu_title,keywords,description,visibility FROM ".TABLE_PREFIX."pages WHERE page_id = '$page_id'");
	if($query_page->numRows() == 0) {
		header("Location: ".WB_URL.PAGES_DIRECTORY."");
		exit(0);
	} else {
		$page = $query_page->fetchRow();
		// Required page details
		define('PAGE_CONTENT', WB_PATH.'/modules/news/comment_page.php');
		// Include index (wrapper) file
		require(WB_PATH.'/index.php');
	}
}

?>

ALVAST BEDANKT!!
 
Mogelijke oplossing (laatste bericht bovenaan)

Wellicht dien je in je database een veld toe te voegen van het type timestamp. Telkens als een nieuw record wordt weggeschreven, wordt de CURRENT_TIMESTAMP automatisch toegevoegd. Deze bestaat normaliter uit datum+tijd. Dan kan je hierop sorteren door ORDER BY veldnaam DESC. Of indien de ID's opvolgend genummerd en uniek zijn sorteer hier dan op ook descending!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan