Velocd
05-12-2003, 02:10 AM
This is sparked off from the thread by MadMax titled "How to check version," from the post where filburt said never to include queries inside a while loop.
This is obvious because most of the time there are easy ways to get around not having to include a query within a while loop.
But-- there is a defined recursive function in adminfunctions.php, called get makeforumchooser(), that does query in a while loop, and for good reason-- as I've tried to figure out a more efficient way of doing it (for another script of mine), but can't seem to.
function makeforumchooser($name="forumid",$selectedid=-1,$forumid=-1,$depth="",$topname="No one",$title="Forum Parent",$displaytop=1,$displayid=0) {
// $selectedid: selected forum id; $forumid: forumid to begin with;
// $depth: character to prepend deep forums; $topname: name of top level forum (ie, "My BB", "Top Level", "No one");
// $title: label for the drop down (listed to the left of it); $displaytop: display top level forum (0=no; 1=yes)
global $DB_site;
if ($forumid==-1) {
echo "<tr class='".getrowbg()."' valign='top'>\n<td><p>$title</p></td>\n<td><p><select name=\"$name\" size=\"1\">\n";
if ($displaytop==1) {
echo "<option value=\"-1\" ".iif($selectedid==$forumid,"SELECTED","").">$depth$topname</option>\n";
}
} else {
$foruminfo=$DB_site->query_first("SELECT forumid,title,allowposting
FROM forum
WHERE forumid=$forumid");
echo "<option value=\"$foruminfo[forumid]\" " . iif($selectedid==$forumid,"SELECTED","") . ">
$depth$foruminfo[title]" . iif($foruminfo['allowposting'],""," (no posting)").iif($displayid," $foruminfo[forumid]","--")."</option>\n";
}
$depth.="--";
$forums=$DB_site->query("SELECT forumid FROM forum WHERE parentid=$forumid ORDER BY displayorder");
while ($forum=$DB_site->fetch_array($forums)) {
makeforumchooser("forumid",$selectedid,$forum[forumid],$depth,"","",1,$displayid);
}
if ($forumid==-1) {
echo "</select>\n</p></td>\n</tr>\n";
}
}
The basic apparent problem with querying in a while-loop in this situation is that for every forum added, a query is added.
This is obvious because most of the time there are easy ways to get around not having to include a query within a while loop.
But-- there is a defined recursive function in adminfunctions.php, called get makeforumchooser(), that does query in a while loop, and for good reason-- as I've tried to figure out a more efficient way of doing it (for another script of mine), but can't seem to.
function makeforumchooser($name="forumid",$selectedid=-1,$forumid=-1,$depth="",$topname="No one",$title="Forum Parent",$displaytop=1,$displayid=0) {
// $selectedid: selected forum id; $forumid: forumid to begin with;
// $depth: character to prepend deep forums; $topname: name of top level forum (ie, "My BB", "Top Level", "No one");
// $title: label for the drop down (listed to the left of it); $displaytop: display top level forum (0=no; 1=yes)
global $DB_site;
if ($forumid==-1) {
echo "<tr class='".getrowbg()."' valign='top'>\n<td><p>$title</p></td>\n<td><p><select name=\"$name\" size=\"1\">\n";
if ($displaytop==1) {
echo "<option value=\"-1\" ".iif($selectedid==$forumid,"SELECTED","").">$depth$topname</option>\n";
}
} else {
$foruminfo=$DB_site->query_first("SELECT forumid,title,allowposting
FROM forum
WHERE forumid=$forumid");
echo "<option value=\"$foruminfo[forumid]\" " . iif($selectedid==$forumid,"SELECTED","") . ">
$depth$foruminfo[title]" . iif($foruminfo['allowposting'],""," (no posting)").iif($displayid," $foruminfo[forumid]","--")."</option>\n";
}
$depth.="--";
$forums=$DB_site->query("SELECT forumid FROM forum WHERE parentid=$forumid ORDER BY displayorder");
while ($forum=$DB_site->fetch_array($forums)) {
makeforumchooser("forumid",$selectedid,$forum[forumid],$depth,"","",1,$displayid);
}
if ($forumid==-1) {
echo "</select>\n</p></td>\n</tr>\n";
}
}
The basic apparent problem with querying in a while-loop in this situation is that for every forum added, a query is added.