Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 Programming Discussions
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 09-06-2008, 03:56 PM
Quarterbore Quarterbore is offline
 
Join Date: Mar 2005
Location: Valley Forge PA
Posts: 538
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Getting Default value for Field using PHP?

I am stumped and none of my reference manuals are providing much help. I have a script were the default value is used to define how many of an item a user gets when they register on vBulletin.

Previously, I have set this value to a value of "3" with instructions for people that if they wish to change this they can do so by going into phpmyAdmin and updating the default value.

Well, I need to fix this and I have the php code written to UPDATE the default value BUT I can not figure out how to query the field to get the default value in PHP so that I can show this value to the Site Admin so that they can make an informed decision about making an update.

Specifically, my field is in the vBulletin user table and the field is defined as follows when I add the field:

PHP Code:
$vbulletin->db->query_write("ALTER TABLE " TABLE_PREFIX "user
ADD `vbclassified_credits` int(5) NOT NULL default '3'"
); 
With the new changes, a site admin can change "default" so I need a way to get this value and allow the Site Admin to see what they have it set to.

I also need this to work on MYSQL 4 or newer as I can not predict what version MYSQL my users may have.

Thanks for any help or advise even if it is a reference to a page or book with general advise.

----------------------------------------
Edit - I am pretty confident the solution has to do with the MYSQL DEFAULT() function, but I am still struggling to figure out how to make it work inside of a PHP Script using the unique vBulletin code to access the database.

http://dev.mysql.com/doc/refman/5.0/...nction_default
Reply With Quote
  #2  
Old 09-06-2008, 04:05 PM
Opserty Opserty is offline
 
Join Date: Apr 2007
Posts: 4,103
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Set the column default of something like -1. Then when you fetch the data if the data == -1 then you set the admin default e.g. 3.
Reply With Quote
  #3  
Old 09-06-2008, 04:27 PM
Quarterbore Quarterbore is offline
 
Join Date: Mar 2005
Location: Valley Forge PA
Posts: 538
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Sorry, you lost me

My issue is that I want to create an AdminCP area that shows somethng like this:

Current Default Credits = 3
Update Default Credits to ____ [Submit]

The problem is, I am struggling to get the "3"

I am pretty sure my solution will be on this page:

http://www.php.net/manual/en/functio...etch-field.php

Here is what I am fighting with at this moment:

PHP Code:
$credits_values $vbulletin->db->query("
    SELECT vbclassified_credits
    FROM " 
TABLE_PREFIX "user
    "
);

$meta mysql_fetch_field($credits_values);
$default $meta->def;
echo 
'Default Credits = ' $default;
echo 
'<br />';
print_r($meta);
exit(); 
This shows me the following:

Quote:
Default Credits =
stdClass Object ( [name] => vbclassified_credits [table] => dev_user [def] => [max_length] => 4 [not_null] => 1 [primary_key] => 0 [multiple_key] => 0 [unique_key] => 0 [numeric] => 1 [blob] => 0 [type] => int [unsigned] => 0 [zerofill] => 0 )
The values in this database for this field (from PHPMyAdmin) is this:

Quote:
Field: vbclassified_credits
Type: INT
Length/Values: 5
Collation:
Attributes:
Null: not null
Default: 3
Extra:
Comments:
--------------------------------------------------------------------------------------------------
I changed my code to use the sample from the PHP.net site so it looks like this:

PHP Code:
$credits_values $vbulletin->db->query("
    SELECT vbclassified_credits
    FROM " 
TABLE_PREFIX "user
    "
);

// This checks if field exists!
$meta2 mysql_field_seek($credits_values0);
echo 
'<br />';
echo 
'vBClassified Credits Exists = ' $meta2;
echo 
'<br />';



$i 0;
while (
$i mysql_num_fields($credits_values)) {
    echo 
"Information for column $i:<br />\n";
    
$meta mysql_fetch_field($credits_values$i);
    if (!
$meta) {
        echo 
"No information available<br />\n";
    }
    echo 
"<pre>
blob:         
$meta->blob
max_length:   
$meta->max_length
multiple_key: 
$meta->multiple_key
name:         
$meta->name
not_null:     
$meta->not_null
numeric:      
$meta->numeric
primary_key:  
$meta->primary_key
table:        
$meta->table
type:         
$meta->type
default:      
$meta->def
unique_key:   
$meta->unique_key
unsigned:     
$meta->unsigned
zerofill:     
$meta->zerofill
</pre>"
;
    
$i++;
}

exit(); 
Now my Output looks like this:

Quote:
vBClassified Credits Exists = 1
Information for column 0:

blob: 0
max_length: 4
multiple_key: 0
name: vbclassified_credits
not_null: 1
numeric: 1
primary_key: 0
table: dev_user
type: int
default:
unique_key: 0
unsigned: 0
zerofill: 0
So close but so confused...?

Oh yea, I confirmed I have the correct table and it sees the database and field as I edited the null value and refreshed my test script that the non tull value changed from 0 to 1. I tried changing my default value and it still shows as NULL?

Some notes as I try to figure this out:

$max_length is the length of the longest value for that field in the returned dataset, NOT the maximum length of data that column is designed to hold.
Reply With Quote
  #4  
Old 09-06-2008, 07:55 PM
sockwater's Avatar
sockwater sockwater is offline
 
Join Date: Apr 2008
Posts: 187
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Use "DESCRIBE TABLE " . TABLE_PREFIX . "user" to get information about the table and its columns from that you can see what the default value for your column is.
Reply With Quote
  #5  
Old 09-06-2008, 08:18 PM
Quarterbore Quarterbore is offline
 
Join Date: Mar 2005
Location: Valley Forge PA
Posts: 538
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I am going to share this as it may help someone else. I never did figure out why the default didn't work per the second reference but I went back to the first one and finally worked out the code to do this.

The following code works!

PHP Code:
$user_values $vbulletin->db->query_first("
    SELECT DEFAULT(vbclassified_credits) AS defaultcredits
    FROM " 
TABLE_PREFIX "user
    "
);

echo 
'Credits = ' $user_values[defaultcredits];
exit(); 
I can finally finish my addition

Edit: sockwater - I cross posted with you as I started to post my fix and was testing before I hit reply so I had the fix before you posted. I am not sure if there is an easier way to get this but this certainly works. I do appreciate the advise and help just the same as this had me stumped for quite a few hours today!
Reply With Quote
  #6  
Old 09-06-2008, 09:47 PM
sockwater's Avatar
sockwater sockwater is offline
 
Join Date: Apr 2008
Posts: 187
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Glad you got it working.
Reply With Quote
  #7  
Old 09-07-2008, 08:47 AM
Marco van Herwaarden Marco van Herwaarden is offline
 
Join Date: Jul 2004
Posts: 25,415
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

The default value for a column as set in MySQL will probably not work in many PHP scripts as these tend to provide a value for each column inserted, even if it is just a blank string (ie. ''), so the default is never used as a value was submitted.

But why not just create a vB Setting to let the admin define the default and use this when inserting the rows?
Reply With Quote
  #8  
Old 09-07-2008, 07:50 PM
Quarterbore Quarterbore is offline
 
Join Date: Mar 2005
Location: Valley Forge PA
Posts: 538
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Marco van Herwaarden View Post
The default value for a column as set in MySQL will probably not work in many PHP scripts as these tend to provide a value for each column inserted, even if it is just a blank string (ie. ''), so the default is never used as a value was submitted.

But why not just create a vB Setting to let the admin define the default and use this when inserting the rows?

Well, I don't have a hook off "Add Member" to give credits so the way I have been giving users credits is through the default MYSQL value for the credits field. It works fine like that but some sites want to change the default value and some people don't have access or skill to use myPHPAdmin to
update the default value.

This may well be a limited use sniped of code, but I tested it on a couple of my sites on different servers and it seems to be working so I am going to try this route for now. This should be a value that is only changed say once at most.

I use PHP to update the field attributes and that works fine, the issue was getting what the current setting was and the code above gives me that.
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 11:51 PM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.04252 seconds
  • Memory Usage 2,258KB
  • Queries Executed 13 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (4)bbcode_php
  • (4)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (8)post_thanks_box
  • (8)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (8)post_thanks_postbit_info
  • (8)postbit
  • (8)postbit_onlinestatus
  • (8)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete