PDA

View Full Version : Display ussergroup name instead of usergroup id


Mythotical
12-18-2009, 04:07 AM
I have this in my admincp:

<td class="alt1">' . $usergroupid . '</td>

I want to have it display usergroup name instead of the usergroup id. Basically I just need the loop to use when I call the id's to match with the usergroup names then display the proper names or ALL if all usergroups have access.

This is the entire page code for just that one page:
if ($_REQUEST['do'] == 'modfiles') {

if ($sendtoapp){
$fcount = $db->query_first("SELECT COUNT(file_id) as fcount FROM " . TABLE_PREFIX . "download WHERE moderated = '1'");

if ($fcount['fcount'] == '0'){
print_stop_message(bfc_download_nomod_files);
} else {
print_table_start();
print_table_header("BFC-Download :: Moderated File Listing", 8);

$filesql = $db->query_read("SELECT * FROM `" . TABLE_PREFIX . "download` WHERE moderated = '1'");

while ($filerow = $db->fetch_array($filesql))
{
$file_id = $filerow['file_id'];
$version = $filerow['version'];
$name = $filerow['name'];
$title = $filerow['title'];
$description = $filerow['description'];
$usergroupid = $filerow['usergroupid'];
$type = $filerow['type'];
$size = $filerow['size'];
$username = $filerow['username'];
$userid = $filerow['userid'];
$catid = $filerow['catid'];
$bytes = vbmksize($size);

echo '<tr><td class="alt2" align="center"><a href="user.php?do=edit&u=' . $userid . '">' . $username . '</a></td><td class="alt1">' . $title . '<br /><a href="download.php?id=' . $file_id . '">' . $name . '</a></td><td class="alt2">' . $description . '</td><td class="alt1">' . $usergroupid . '</td><td class="alt2">' . $type . '</td><td class="alt1">' . $bytes . '</td><td class="alt2">' . $catid . '</td><td class="alt1"><a href="download.php?do=okfile&amp;fid='.$file_id.'">Approve ' . $username . '\'s File</a></td></tr>';
}
}
} else {
print_stop_message(bfc_download_noapproval);
}

print_table_footer(8, '', '', 0);

}


Thanks
Steve

Mythotical
12-19-2009, 04:42 AM
Any got an idea on this?

Lynne
12-19-2009, 03:54 PM
You need to JOIN with the usergroup table (on the usergroupid, I'd guess) and get the usergroup.title

Mythotical
12-19-2009, 04:34 PM
Nevermind, remembered back to another mod I did at one point, thanks Lynne, I'll do a JOIN on it.

Mythotical
12-22-2009, 04:11 AM
Ok I did the JOIN, now I need to means to display it so it shows:

Super Moderators, Administrators

Instead of:
5,6

Right now it shows the first result instead of giving both names as there are 2 usergroupid's.

--------------- Added 1261465186 at 1261465186 ---------------

EDIT: I have tried this so far:

$unames = $filerow['usergroupid'];
$unames = explode(',', $unames);

foreach ($unames AS $utitle)
{
$u = $utitle;
}

Keep in mind this is pulling info from a SELECT with a LEFT JOIN. Here is the entire thing:

$filesql = $db->query_read("SELECT dls.*, ugroups.usergroupid AS uid, ugroups.title AS uname FROM `" . TABLE_PREFIX . "download` AS dls
LEFT JOIN `" . TABLE_PREFIX . "usergroup` AS ugroups ON (dls.usergroupid = ugroups.usergroupid)
WHERE moderated = '1'");


while ($filerow = $db->fetch_array($filesql))
{
$file_id = $filerow['file_id'];
$version = $filerow['version'];
$name = $filerow['name'];
$title = $filerow['title'];
$description = $filerow['description'];
$usergroupid = $filerow['usergroupid'];
$type = $filerow['type'];
$size = $filerow['size'];
$username = $filerow['username'];
$userid = $filerow['userid'];
$catid = $filerow['catid'];
$bytes = vbmksize($size);
$unames = $filerow['usergroupid'];
$unames = explode(',', $unames);

foreach ($unames AS $utitle)
{
$u = $utitle;
}

echo '<tr><td class="alt2" align="center"><a href="user.php?do=edit&u=' . $userid . '">' . $username . '</a></td><td class="alt1">' . $title . '<br /><a href="download.php?id=' . $file_id . '">' . $name . '</a></td><td class="alt2">' . $description . '</td><td class="alt1">' . $u . '</td><td class="alt2">' . $type . '</td><td class="alt1">' . $bytes . '</td><td class="alt2">' . $catid . '</td><td class="alt1"><a href="download.php?do=okfile&amp;fid='.$file_id.'">Approve ' . $username . '\'s File</a></td></tr>';
}

Lynne
12-22-2009, 03:16 PM
So, you are saying it should show two usergroups at times and currently it is not? I think you need to change this line:
$u .= $utitle;
That will make it so you aren't overwriting it when you go through the loop. You should set $u to nothing ($u = ''; ) before entering the loop. Also, I think you want this to get the titles, not the id:
$unames = $filerow['uname'];

Mythotical
12-22-2009, 05:44 PM
Bah, its doing the opposite of what I want. I did the LEFT JOIN so now it displays 56 for one entry and 566 for another entry with no comma's and its not even giving the usergroup name.

Screenshot provided.

Mythotical
12-24-2009, 05:19 PM
Still need help with this.

Lynne
12-24-2009, 05:33 PM
Exactly what code are you using now?

Mythotical
12-26-2009, 05:10 PM
The same code above. I even added your change and it still isn't working right.

Lynne
12-26-2009, 05:20 PM
Well, you aren't using the same code if you have added changes, which is why I asked for it again.

What have you done debug-wise. Have you tried printing out $unames before you've done anything to it? What do you get?

Mythotical
12-26-2009, 09:06 PM
I have tried to print it out and all I get is one name only. Which is from the last entry in the database.

Lynne
12-26-2009, 09:30 PM
If you are printing out what is coming out of the database and only getting one item, then that means your query must be wrong if you think it is supposed to be getting several items.

But wait.... you are in a while loop - it only goes through one row per loop. Sounds to me like you need to group things by userid and then for each userid print out stuff.

Mythotical
12-26-2009, 09:47 PM
Lynne, as much as I enjoy talking about a solution, let me provide you with the code and maybe you can suggest changes to it. This is the entire php line for the page I am wanting to the display of usergroups on.

if ($_REQUEST['do'] == 'modfiles') {

if ($sendtoapp){
$fcount = $db->query_first("SELECT COUNT(file_id) as fcount FROM " . TABLE_PREFIX . "download WHERE moderated = '1'");

if ($fcount['fcount'] == '0'){
print_stop_message(bfc_download_nomod_files);
} else {
print_table_start();
print_table_header("BFC-Download :: Moderated File Listing", 8);

$filesql = $db->query_read("SELECT dls.*, ugroups.usergroupid AS uid, ugroups.title AS uname FROM `" . TABLE_PREFIX . "download` AS dls
LEFT JOIN `" . TABLE_PREFIX . "usergroup` AS ugroups ON (dls.usergroupid = ugroups.usergroupid)
WHERE moderated = '1'");

$u = '';
while ($filerow = $db->fetch_array($filesql))
{
$file_id = $filerow['file_id'];
$version = $filerow['version'];
$name = $filerow['name'];
$title = $filerow['title'];
$description = $filerow['description'];
$usergroupid = $filerow['usergroupid'];
$type = $filerow['type'];
$size = $filerow['size'];
$username = $filerow['username'];
$userid = $filerow['userid'];
$catid = $filerow['catid'];
$bytes = vbmksize($size);
$unames = $filerow['usergroupid'];
$unames = explode(',', $unames);

foreach ($unames AS $utitle)
{
$u .= $utitle;
}

echo '<tr><td class="alt2" align="center"><a href="user.php?do=edit&u=' . $userid . '">' . $username . '</a></td><td class="alt1">' . $title . '<br /><a href="download.php?id=' . $file_id . '">' . $name . '</a></td><td class="alt2">' . $description . '</td><td class="alt1">' . $u . '</td><td class="alt2">' . $type . '</td><td class="alt1">' . $bytes . '</td><td class="alt2">' . $catid . '</td><td class="alt1"><a href="download.php?do=okfile&amp;fid='.$file_id.'">Approve ' . $username . '\'s File</a></td></tr>';
}
}
} else {
print_stop_message(bfc_download_noapproval);
}

print_table_footer(8, '', '', 0);

}

Lynne
12-26-2009, 10:00 PM
Well, it depends on how open you are to what this list looks like. I'd group the query results by userid (look up Group for Mysql queries). Then, when going into my while loop, I'd see if the userid is the same as the previous userid (save the userid in the loop). If it isn't the same, I'd print out the name, title, whatever and then the first usergroup name. Then when you do the loop again, if the userid is the same as the previous one, just print out the new usergroup name. Once the userid is not the same as the previous one, it does a line break and prints the new name, title, whatever.

Mythotical
12-26-2009, 11:22 PM
The list is of files that have been added and are in queue to be approved. It will display the name of the submitter, the file name, the file type, the usergroups that have permission to view the file, etc. So its not based on a userid its a matter of matching up usergroupid's from the file listing table with that of the usergroup table then displaying the appropriate name for each usergroupid no matter how many usergroupid's exist for that one file.

Lynne
12-27-2009, 02:11 AM
Well, you know your database and this issue better than I, but you should be able to 'group' these in some way and then do it the way I said (group by file id?).

Mythotical
12-27-2009, 06:28 AM
EDIT: I'm a jack ass, I can only say that I learn by coding examples better than question and answer.