PDA

View Full Version : PHP - vBulletin Related


Pauly
November 15th, 2004, 02:19
Well I had a search around, and the guys over at vB.org couldn't help, or didn't want / have time too. So here we go;

I use the following code on my site;

[syntax:41b54171f5="php"]<?php

#########################
// REMOVED COPYRIGHT NO FREE LINK HERE
#########################

/* This script shows the last X numbers of posts (titles) posted last on a non-VB page.
You may customize it in any way you wish. If you have any problems with it, you can
post them at vB.org or send me an email to tre@phase1media.com.

Enjoy!
*/

## CUSTOMIZE SETTINGS FOR YOUR SITE ##
$db_host = "localhost"; // Change this if your MySQL database host is different.
$db_name = "notreal_fake"; // Change this to the name of your database.
$db_user = "notreal_fake"; // Change this to your database username.
$db_pw = "notreal_fake"; // Change this to your database password.

$forum_url = "youcantwaitforthis.com"; // Change this to reflect to your forum's URL.
$forum_id = "2"; // If you wish to display the posts from a specific forum, enter the forum id here. Otherwise, leave it blank.
$limit = "5"; // Number of posts displayed.
//$titlecolor = "#0000FF"; // This is the color of the title.
//$postedcolor = "#404040"; // This is the color of the bottom text.
$txtlimit = "100"; // This is the character limit.
#######################################

// Connecting to your database
mysql_connect($db_host, $db_user, $db_pw)
OR die ("Cannot connect to your database");
mysql_select_db($db_name) OR die("Cannot connect to your database");

// Below is the beginning of a table. If you feel you don't need it, you may remove it.
echo "<h3>Latest Board Posts</h3>";

if ($forum_id) {
$forumid = "AND forumid=$forum_id";
}

if ($limit) {
$limited = "LIMIT $limit";
}
$thread_sql = mysql_query("SELECT threadid,title,lastpost,lastposter FROM thread WHERE visible=1 AND open=1 $forumid ORDER BY lastpost DESC $limited");

while($thread_get=mysql_fetch_array($thread_sql))
{
$lastpost = $thread_get['lastpost'];
$poster = $thread_get['lastposter'];
$tid = $thread_get['threadid'];
$psql = mysql_query("SELECT postid FROM post WHERE threadid=$tid ORDER BY postid DESC");
$getp=mysql_fetch_array($psql);
$pid = $getp['postid'];
$date2 = date ("m/d/y h:i A" ,$lastpost);
$title = $thread_get['title'];
$title = substr($title,0,$txtlimit);
echo "<a href=\"$forum_url/showthread.php?p=$pid#post$pid\">$title</a><div>Posted by $poster on <i>$date2</i></div>";
}

?>[/syntax:41b54171f5]

Ok, now you see the line;

[syntax:41b54171f5="php"]$forum_id = "2"; // If you wish to display the posts from a specific forum, enter the forum id here. Otherwise, leave it blank.[/syntax:41b54171f5]

Well, I want to be able to seperate that with , 's to specify different forum ID's, ultimately eliminating one or more (Being Private Forums).

OR

I want to be able to specify forum ID's to exclude, again with the ability to be seperated with commas.

This is a long shot, but worth a try because the others I thought would know, didn't / didn't help :(

sonicgroup
November 15th, 2004, 03:29
This is not guaranteed to work, but it should. ;)

Basically, you need to modify the "if ($forum_id)" portion.

[syntax:09833d4794="php"]
//Your $forum_id would become this:
$forum_id = '2,4,6,8,9';

//And the if ($forum_id) becomes this:
if ($forum_id) {
$forum_ids = explode(',', $forum_id);
for ($i=0; $i<count($forum_ids); $i++) {
$forumid = 'AND forumid='.$forum_ids[$i].' ';
}
}
[/syntax:09833d4794]

Like I said, this may not work, and if it doesn't, I have a good idea what might need to be changed.

Pauly
November 15th, 2004, 03:56
Sort of, it leaves a blank space after

<h3>Latest Board Posts</h3>

ethicaldesign
November 15th, 2004, 12:34
$forumid = "AND forumid=$forum_id";

change to:

$forumid = "AND forumid IN($forum_id)";

I think that should work off the top of my head. Better than using lots of AND clauses and should work a bit faster as the query is simpler and using one of MySQLs inbuilt functions for list searching within MySQL itself. Also no need for loops that will slow things down at the php interpreter side.

Then just put your forum ids in the comma separated list as you would normally.

This is assuming that those forum IDs are numeric values in the database (which I think they will be). Whoever has done that original script seems to have defined it as a string though. If it doesn't work you could try defining forum_id as:

$forum_id="'1','2','3','4'";

which should do the search based upon text values. My guess is that this won't be necessary though and you'll just need to define it as:

$forum_id='1,2,3,4';

(notice that I've used single quotes there in that second example rather than double quotes - these work faster than double quotes because no string evaluation is required for that example - not sure why the original Vb developers have used double quotes for what appears to be a number in the first place - that's pretty sloppy unless I'm missing something - All of the variables in the ## CUSTOMIZE SETTINGS FOR YOUR SITE ## section could be done with single quotes and would probably execute very slightly faster).

ethicaldesign
November 15th, 2004, 12:39
P.S.

Just glanced over that again and $limit, $txtlimit needn't be quoted at all. My guess is that they're just numeric values so no need to be defined as strings like that. Neither does $forum_id in their example, but it will need to be defined as a string when you add your comma separated list though as per the examples above.

ethicaldesign
November 15th, 2004, 12:42
P.P.S : Must have missed your point about excluding. If you want to do it that way I think you should just be able to add a NOT before the IN clause:

$forumid = "AND forumid NOT IN($forum_id)";

ethicaldesign
November 15th, 2004, 12:53
Here's a brief explanation of the single/double quote issue. I noticed theres a lot of places in the script above where double quotes aren't actually needed with what the strings currently contain:

http://www.webclass.ru/eng/Tutorials/PHP/Single_and_double.html

More in depth info in the php manual:

http://uk2.php.net/manual/en/language.types.string.php

sonicgroup
November 15th, 2004, 15:32
I used to use double quotes for everything, but after reading some info on the PHP site, I changed to using single quotes and concatenation for everything. Everything executes faster as a result.

The only time I ever use double quotes anymore is when I output text/HTML that I want to look nice and I use the escape characters (\n and \t), which have to be contained in double quotes to be evaluated correctly.

ethicaldesign
November 15th, 2004, 15:45
I used to use double quotes for everything, but after reading some info on the PHP site, I changed to using single quotes and concatenation for everything. Everything executes faster as a result.

The only time I ever use double quotes anymore is when I output text/HTML that I want to look nice and I use the escape characters (\n and \t), which have to be contained in double quotes to be evaluated correctly.

Yes, that's the best approach. I wasn't referring to your code though (I can see you've used the quotes correctly) but the VB code posted above. Sorry if I gave that impression in my last post :)

Pauly
November 15th, 2004, 16:56
I wasn't referring to your code though (I can see you've used the quotes correctly) but the VB code posted above

Yea but you can't expect to pick up a perfect script for free, unless you know someone *cough*IWDN*cough* ;)

ethicaldesign
November 15th, 2004, 17:12
The only time I ever use double quotes anymore is when I output text/HTML that I want to look nice and I use the escape characters (\n and \t), which have to be contained in double quotes to be evaluated correctly.

You can use chr(asciicode) in concatenated strings that does the same thing. Not sure if they'd parse faster than evaluating the string though (I guess it might depend how many times they're used).

Pauly
November 15th, 2004, 17:13
By the way, ethical that little piece of code did the trick ;)

Much appreciated!

ethicaldesign
November 15th, 2004, 17:14
Cool (just posted to ask to keep us updated but you beat me to it so I've edited it out).

:-)

BTW.. Thanks to whoever put the code tags around my post above. Forgot to do that.

Pauly
November 15th, 2004, 18:21
BTW.. Thanks to whoever put the code tags around my post above. Forgot to do that.

I did to make it easier to distinguish ;)

sonicgroup
November 16th, 2004, 01:21
Yes, that's the best approach. I wasn't referring to your code though (I can see you've used the quotes correctly) but the VB code posted above. Sorry if I gave that impression in my last post :)

I wasn't taking it that way - I was merely pointing out that I had "seen the light" and was adding my thumbs up for proper use of quotes.

ethicaldesign
November 16th, 2004, 01:24
I wasn't taking it that way - I was merely pointing out that I had "seen the light" and was adding my thumbs up for proper use of quotes.

Ahh..Sorry about that. I thought I might have given that impression with my last post that I was referring to your code (which used the quotes perfectly) :)