PDA

View Full Version : Pulling a GPC variable


Dr.CustUmz
10-28-2020, 01:24 PM
I am working on a product, building from previously existing products, this is a page within the admincp.
I am wondering why sometimes I am able to pull a GPC variable and other times I am not, I am having this issue in multiple spots but this is just the smallest one to give the example.

I am able to pull the productid with:
$vbulletin->GPC['productid']

But I cant get the catid to pull:
$vbulletin->GPC['catid']

This is the complete page in question, Just a simple confirmation page.
$vbulletin->input->clean_array_gpc('r', array(
'productid' => TYPE_UINT,
'catid' => TYPE_UINT
));

print_form_header('digigacp', 'dodeleteproduct');

construct_hidden_code('s', $vbulletin->session->vars['sessionhash']);
construct_hidden_code('adminhash', ADMINHASH);
construct_hidden_code('productid', $vbulletin->GPC['productid']);
construct_hidden_code('catid', $vbulletin->GPC['catid']);

print_table_header($vbphrase['confirm']);
print_description_row($vbphrase['are_you_sure']);
print_description_row('Product ID: ' . intval($vbulletin->GPC['productid']));
print_description_row('Category: ' . intval($vbulletin->GPC['catid']));
print_submit_row($vbphrase['yes'], '', 2, $vbphrase['no']);

A way I get around this is to use a query, but since I can pull the productid, I just dont understand why I cant pull the catid, when they were both submitted through the same form.

This is how I currently solve this problem:
$vbulletin->input->clean_array_gpc('r', array(
'productid' => TYPE_UINT,
'catid' => TYPE_UINT
));

$info = $db->query_first("SELECT catid
FROM " . TABLE_PREFIX . "products
WHERE productid = " . intval($vbulletin->GPC['productid']) . "
");

print_form_header('digigacp', 'dodeleteproduct');
construct_hidden_code('s', $vbulletin->session->vars['sessionhash']);
construct_hidden_code('adminhash', ADMINHASH);

construct_hidden_code('productid', $vbulletin->GPC['productid']);
construct_hidden_code('catid', $vbulletin->GPC['catid']);
print_table_header($vbphrase['confirm']);
print_description_row($vbphrase['are_you_sure']);
print_description_row('Product ID: ' . intval($vbulletin->GPC['productid']));
print_description_row('Category: ' . $info['catid']);
print_submit_row($vbphrase['yes'], '', 2, $vbphrase['no']);

x iJailBreak x
10-29-2020, 07:49 PM
I am working on a product, building from previously existing products, this is a page within the admincp.
I am wondering why sometimes I am able to pull a GPC variable and other times I am not, I am having this issue in multiple spots but this is just the smallest one to give the example.

I am able to pull the productid with:
$vbulletin->GPC['productid']

But I cant get the catid to pull:
$vbulletin->GPC['catid']

This is the complete page in question, Just a simple confirmation page.
$vbulletin->input->clean_array_gpc('r', array(
'productid' => TYPE_UINT,
'catid' => TYPE_UINT
));

print_form_header('digigacp', 'dodeleteproduct');

construct_hidden_code('s', $vbulletin->session->vars['sessionhash']);
construct_hidden_code('adminhash', ADMINHASH);
construct_hidden_code('productid', $vbulletin->GPC['productid']);
construct_hidden_code('catid', $vbulletin->GPC['catid']);

print_table_header($vbphrase['confirm']);
print_description_row($vbphrase['are_you_sure']);
print_description_row('Product ID: ' . intval($vbulletin->GPC['productid']));
print_description_row('Category: ' . intval($vbulletin->GPC['catid']));
print_submit_row($vbphrase['yes'], '', 2, $vbphrase['no']);

A way I get around this is to use a query, but since I can pull the productid, I just dont understand why I cant pull the catid, when they were both submitted through the same form.

This is how I currently solve this problem:
$vbulletin->input->clean_array_gpc('r', array(
'productid' => TYPE_UINT,
'catid' => TYPE_UINT
));

$info = $db->query_first("SELECT catid
FROM " . TABLE_PREFIX . "products
WHERE productid = " . intval($vbulletin->GPC['productid']) . "
");

print_form_header('digigacp', 'dodeleteproduct');
construct_hidden_code('s', $vbulletin->session->vars['sessionhash']);
construct_hidden_code('adminhash', ADMINHASH);

construct_hidden_code('productid', $vbulletin->GPC['productid']);
construct_hidden_code('catid', $vbulletin->GPC['catid']);
print_table_header($vbphrase['confirm']);
print_description_row($vbphrase['are_you_sure']);
print_description_row('Product ID: ' . intval($vbulletin->GPC['productid']));
print_description_row('Category: ' . $info['catid']);
print_submit_row($vbphrase['yes'], '', 2, $vbphrase['no']);

Out of curiosity, if you var_dump($vbulletin->GPC); what does it return? And is it definitely present on var_dump($_REQUEST);?

Dr.CustUmz
10-29-2020, 08:49 PM
var_dump($_REQUEST);
C:\wamp\www\admincp\digigacpacp.php:445:
array (size=6)
'do' => string 'editproduct' (length=11)
'productid' => int 1
'explain' => int 0
's' => string '' (length=0)
'styleid' => int 0
'langid' => int 0

var_dump($vbulletin->GPC);
C:\wamp\www\admincp\digigacpacp.php:444:
array (size=17)
'explain' => int 0
'vbulletin_collapse' => string 'thanks_postbit_64993
cybchatbox
drc_registration_booster
file_templates
shat_zodiac
g_answer_forums
ajax_live_box
ckeditor_edit
forumtitle
extra_threadfields
c_news_letter
g_forumhome_tabs
toplist
invitation
ico_content
livetopic
smnlikquick
gntb
thread_listing_bgcolors
vbclassified
data_interactivehome
throttle_posts
sqrtboyvbttv30
auto_close_threads
blackcat_download_images
latest_posts_blackthorn
chgtpowner38
threadprefix_changeinline
vox_close_threads
rellect_closed_prefix
hideimg_guests
lastest_thread_'... (length=1091)
'devreferrerid' => int 0
'devuserid' => int 1
'devpassword' => string 'd13a309e18a79b8af634fb0477fbc687' (length=32)
'devlastvisit' => int 1603165768
'devlastactivity' => int 0
'devthreadedmode' => string '' (length=0)
'devsessionhash' => string '6106f9e943c802d63d795c67ff4d9649' (length=32)
'devstyleid' => int 2
'devlanguageid' => int 0
's' => string '' (length=0)
'styleid' => int 0
'langid' => int 0
'adminhash' => string '' (length=0)
'devcpsession' => string '16618cfe2c0626479f03c1f80d7abab7' (length=32)
'productid' => int 1

I am a bit baffled why there are references to products I have not installed on this fresh install, The only product I have installed is the product I am working on.

This is the portion in my page where the productid and catid are added, I have stripped a majority of this page but kept what should be relevant.

if ($_REQUEST['do'] == 'doaddproduct')
{
$vbulletin->input->clean_array_gpc('r', array(
'catid' => TYPE_UINT,
'productid' => TYPE_UINT
));

$db->query_write("INSERT INTO " . TABLE_PREFIX . "products
(catid)
VALUES
(
" . intval($vbulletin->GPC['catid']) . "
)
");

$db->query_write("UPDATE " . TABLE_PREFIX . "categories
SET products = products + 1
WHERE catid = " . intval($vbulletin->GPC['catid']) . "
");

print_table_start();
print_table_header($vbphrase['digigacpacp']);
print_description_row('<strong>' . $vbphrase['done'] . '</strong>');
print_table_footer();

print_cp_redirect("digigacpacp.php?" . $vbulletin->session->vars['sessionurl'] . "do=viewproducts&amp;catid=" . $vbulletin->GPC['catid'], 2);
}

I guess I should be asking is, how is a GPC variable even created? Because I know I can use productid on numerous pages, although I am unable to use catid on these pages.

x iJailBreak x
10-30-2020, 12:28 PM
var_dump($_REQUEST);
C:\wamp\www\admincp\digigacpacp.php:445:
array (size=6)
'do' => string 'editproduct' (length=11)
'productid' => int 1
'explain' => int 0
's' => string '' (length=0)
'styleid' => int 0
'langid' => int 0

var_dump($vbulletin->GPC);
C:\wamp\www\admincp\digigacpacp.php:444:
array (size=17)
'explain' => int 0
'vbulletin_collapse' => string 'thanks_postbit_64993
cybchatbox
drc_registration_booster
file_templates
shat_zodiac
g_answer_forums
ajax_live_box
ckeditor_edit
forumtitle
extra_threadfields
c_news_letter
g_forumhome_tabs
toplist
invitation
ico_content
livetopic
smnlikquick
gntb
thread_listing_bgcolors
vbclassified
data_interactivehome
throttle_posts
sqrtboyvbttv30
auto_close_threads
blackcat_download_images
latest_posts_blackthorn
chgtpowner38
threadprefix_changeinline
vox_close_threads
rellect_closed_prefix
hideimg_guests
lastest_thread_'... (length=1091)
'devreferrerid' => int 0
'devuserid' => int 1
'devpassword' => string 'd13a309e18a79b8af634fb0477fbc687' (length=32)
'devlastvisit' => int 1603165768
'devlastactivity' => int 0
'devthreadedmode' => string '' (length=0)
'devsessionhash' => string '6106f9e943c802d63d795c67ff4d9649' (length=32)
'devstyleid' => int 2
'devlanguageid' => int 0
's' => string '' (length=0)
'styleid' => int 0
'langid' => int 0
'adminhash' => string '' (length=0)
'devcpsession' => string '16618cfe2c0626479f03c1f80d7abab7' (length=32)
'productid' => int 1

I am a bit baffled why there are references to products I have not installed on this fresh install, The only product I have installed is the product I am working on.

This is the portion in my page where the productid and catid are added, I have stripped a majority of this page but kept what should be relevant.

if ($_REQUEST['do'] == 'doaddproduct')
{
$vbulletin->input->clean_array_gpc('r', array(
'catid' => TYPE_UINT,
'productid' => TYPE_UINT
));

$db->query_write("INSERT INTO " . TABLE_PREFIX . "products
(catid)
VALUES
(
" . intval($vbulletin->GPC['catid']) . "
)
");

$db->query_write("UPDATE " . TABLE_PREFIX . "categories
SET products = products + 1
WHERE catid = " . intval($vbulletin->GPC['catid']) . "
");

print_table_start();
print_table_header($vbphrase['digigacpacp']);
print_description_row('<strong>' . $vbphrase['done'] . '</strong>');
print_table_footer();

print_cp_redirect("digigacpacp.php?" . $vbulletin->session->vars['sessionurl'] . "do=viewproducts&amp;catid=" . $vbulletin->GPC['catid'], 2);
}

I guess I should be asking is, how is a GPC variable even created? Because I know I can use productid on numerous pages, although I am unable to use catid on these pages.

Interesting to note catid does not get passed even in $_REQUEST.. it definitely has a named field?

It'll only get registered in $vbulletin->GPC if it's first registered in $_REQUEST before your call to $vbulletin->input->clean_array_gpc();

In regards to it referencing plugins you don't have activated, I assume they are being passed in via $_COOKIE (which clean_gpc/clean_array_gpc will also run on).