vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB3 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=15)
-   -   Getting Default value for Field using PHP? (https://vborg.vbsupport.ru/showthread.php?t=190185)

Quarterbore 09-06-2008 03:56 PM

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

Opserty 09-06-2008 04:05 PM

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.

Quarterbore 09-06-2008 04:27 PM

Sorry, you lost me :confused:

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.

sockwater 09-06-2008 07:55 PM

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.

Quarterbore 09-06-2008 08:18 PM

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 :D

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!

sockwater 09-06-2008 09:47 PM

Glad you got it working. :)

Marco van Herwaarden 09-07-2008 08:47 AM

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?

Quarterbore 09-07-2008 07:50 PM

Quote:

Originally Posted by Marco van Herwaarden (Post 1616455)
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.


All times are GMT. The time now is 09:12 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.00988 seconds
  • Memory Usage 1,765KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (4)bbcode_php_printable
  • (4)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (8)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.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/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete