PDA

View Full Version : Widget Issue (DB Query)


kerrghann
03-03-2016, 04:52 PM
So I'm attempting to make a widget that greets my new members and encourages my veteran members to greet my new members. For some reason I get an error with my DB query, I'm sure it's a pretty simple fix and it's just error on my part but I can't seem to figure it out.

Here is my code:


$postcnt = vB::$vbulletin->userinfo['posts'];
$usrgrp = vB::$vbulletin->userinfo['usergroupid'];
$name = vB::$vbulletin->userinfo['username'];
$newmem = $vbulletin->db->query_first("SELECT username FROM " . TABLE_PREFIX . "user WHERE userid = $members[maxid] AND usergroupid NOT IN (3,4,8,17)");
$usid = $vbulletin->db->query_first("SELECT userid FROM " . TABLE_PREFIX . "user WHERE userid = $members[maxid] AND usergroupid NOT IN (3,4,8,17)");

if ($postcnt < 1 && $usrgrp == 2) {
$output = "<center>Welcome " . $name . ", you should introduce yourself -> <a href='http://rpgchat.com/forumdisplay.php/227-Welcome-Center'><font color='red'><u><b>Welcome Center</font></u></b></a></center>";
} else {
$output = "<center>Welcome Back " . $name . ", our newest member is " . $newmem . ", why not <a href='rpgchat.com/private.php?do=newpm&u='" . $usid . "'><u><b><font color='red'>Greet Them?</font></b></u></center></a>";
}



It pulls this lovely Error as well:

Fatal error: Call to a member function query_first() on a non-object in /*****/*****/public_html/packages/vbcms/widget/execphp.php(191) : eval()'d code on line 4


I've look around, in fact I used this page (http://www.vbulletin.com/forum/forum/vbulletin-4/vbulletin-4-questions-problems-and-troubleshooting/404118-welcome-to-our-newest-member-info-line) to assist me in doing the query.

Any help would be immensely appreciated.

Thank you.

Dave
03-03-2016, 04:57 PM
I would escape the variables in the SQL query and use vB:: for the database calls as well. You can try the following:
$postcnt = vB::$vbulletin->userinfo['posts'];
$usrgrp = vB::$vbulletin->userinfo['usergroupid'];
$name = vB::$vbulletin->userinfo['username'];
$newmem = vB::$vbulletin->db->query_first("SELECT username FROM " . TABLE_PREFIX . "user WHERE userid = " . $members['maxid'] . " AND usergroupid NOT IN (3,4,8,17)");
$usid = vB::$vbulletin->db->query_first("SELECT userid FROM " . TABLE_PREFIX . "user WHERE userid = " . $members['maxid'] . " AND usergroupid NOT IN (3,4,8,17)");

if ($postcnt < 1 && $usrgrp == 2) {
$output = "<center>Welcome " . $name . ", you should introduce yourself -> <a href='http://rpgchat.com/forumdisplay.php/227-Welcome-Center'><font color='red'><u><b>Welcome Center</font></u></b></a></center>";
} else {
$output = "<center>Welcome Back " . $name . ", our newest member is " . $newmem . ", why not <a href='rpgchat.com/private.php?do=newpm&u='" . $usid . "'><u><b><font color='red'>Greet Them?</font></b></u></center></a>";
}

kerrghann
03-03-2016, 05:34 PM
Hmm...got this odd error now.


PHP Warning: mysqli_query(): (42000/1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND usergroupid NOT IN (3,4,8,17)' at line 1 in ..../includes/class_core.php on line 1433

Fatal error: Class 'SQLiteDatabase' not found in /*****/*****/public_html/includes/class_core.php on line 1182

Dave
03-03-2016, 05:53 PM
First error probably happens because $members['maxid'] is empty/doesn't contain anything in your code snippet.
Second error is rather weird, vBulletin doesn't make use of SQLite at all. What database type did you configure in your includes/config.php file?

kerrghann
03-04-2016, 03:16 AM
Hmm...seems like $members['maxid'] isn't a valid variable for some reason. Any ideas on how I would get the desired effect of getting the username and userid of the newest registered member?

MarkFL
03-04-2016, 03:27 AM
Try running the following query:

$newusers = $vbulletin->db->query_read_slave("
SELECT user.*
FROM " . TABLE_PREFIX . "user AS user
ORDER BY joindate DESC
LIMIT 1
");

$newuser = $db->fetch_array($newusers);


And then you should have the newest user's username in "$newuser['username']" and their userid in "$newuser['userid']". :)

kerrghann
03-05-2016, 06:33 PM
Attempted it, got a new error:



Fatal error: Call to a member function query_read_slave() on a non-object in /*****/******/public_html/packages/vbcms/widget/execphp.php(191) : eval()'d code on line 4

MarkFL
03-05-2016, 07:09 PM
Attempted it, got a new error:



Fatal error: Call to a member function query_read_slave() on a non-object in /*****/******/public_html/packages/vbcms/widget/execphp.php(191) : eval()'d code on line 4



At the top of your plugin, add the line:

global $db, $vbulletin;

I assumed you already had something like that since you are running other queries.:confused: