xoops forums

tdldp

Just popping in
Posted on: 2004/2/2 9:05
tdldp
tdldp (Show more)
Just popping in
Posts: 9
Since: 2002/3/13
#1

Xoops Kernel / user.php functions.... Devs i need you ;)

hi all,

Trying to understand how kernel / user.php works (i am having problems storing new fields on database in xoops_user tables)

I was wondering how the :

$this->initVar('Var_name', XOBJ_DTYPE_XXXXX, null, false);

worked...

I'd like to know what are the different XXXXX type accepted by XOOPS (Else the INT,TXTBOX,TXTAREA,OTHER)

My problem is the following. When storing departement data, i can have to store : 01, 02, 03, 04, 05, 06, 07, 08, 09, 2A, 2B in database. Yet these always appear like this in database :
1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 2

Everything goes on well until storage in database (hidden vars are correct) So i guess it comes from the :
$this->initVar('dept', XOBJ_DTYPE_INT, 0, false);
Thing. But if i modify it, (putting TXTBOX, or OTHER) i get suddenly blank page out of xoops...

What must i do ???
Thanls for you help
Tdldp

Mithrandir

XOOPS is my life!
Posted on: 2004/2/2 9:47
Mithrandir
Mithrandir (Show more)
XOOPS is my life!
Posts: 6320
Since: 2003/6/21
#2

Re: Xoops Kernel / user.php functions.... Devs i need you ;)

Turn on PHP debug and go to the page again and see if there comes an error.

The available types are:
XOBJ_DTYPE_TXTBOX
XOBJ_DTYPE_TXTAREA
XOBJ_DTYPE_INT
XOBJ_DTYPE_URL
XOBJ_DTYPE_EMAIL
XOBJ_DTYPE_ARRAY
XOBJ_DTYPE_OTHER
XOBJ_DTYPE_SOURCE
XOBJ_DTYPE_STIME
XOBJ_DTYPE_MTIME
XOBJ_DTYPE_LTIME

I'd say that TXTBOX was the correct one to choose for you. See if the PHP debug won't get you closer to the answer

tdldp

Just popping in
Posted on: 2004/2/4 8:16
tdldp
tdldp (Show more)
Just popping in
Posts: 9
Since: 2002/3/13
#3

Re: Xoops Kernel / user.php functions.... Devs i need you ;)

Thks for your answer mithrandir, i appreciated it and it help me a round... But here it goes :

turning on debug gave me this :

page register.php

Notice: Undefined variable: dept in /www/include/registerform.php on line 83

Notice: Undefined variable: type in /www/include/registerform.php on line 84

These lines correspond in registerform.php at :

$reg_form->addElement(new XoopsFormSelectDept(_US_DEPT, "dept", $dept));
$reg_form->addElement(new XoopsFormSelectType(_US_TYPECHASSE, "type", $type));

XoopsFormSelectDept and Type are 2 scripts of my composition which were inspired from FormSelectCountry :
here is coding :

[/quote]
/**
* lists of values
*/
include_once XOOPS_ROOT_PATH."/class/xoopslists.php";

/**
* Parent
*/
include_once XOOPS_ROOT_PATH."/class/xoopsform/formselect.php";

/**
* A select field with types
*
* @package kernel
* @subpackage form
*
* @author Tdldp
* @copyright
*/
class XoopsFormSelectDept extends XoopsFormSelect
{
/**
* Constructor
*
* @param string $caption Caption
* @param string $name "name" attribute
* @param mixed $value Pre-selected value (or array of them).
* Legal are all 2-letter country codes (in capitals).
* @param int $size Number or rows. "1" makes a drop-down-list
*/
function XoopsFormSelectDept($caption, $name, $value=null, $size=1)
{
$this->XoopsFormSelect($caption, $name, $value, $size);
$this->addOptionArray(XoopsLists::getDeptList());
}
}
[/quote]

here is extract from xoopslist corresponding at select list :
Quote:

function &getTypeList()
{
$type_list = array (
"1" => "Chasse Petit Gibier Sedentaire",
"2" => "Chasse du Grand Gibier",
"3" => "Chasse du Gibier d'eau",
"4" => "Chasse Petit Gibier Migrateur",
"5" => "Chasse à Courre",
"6" => "Chasse à L'arc",
);
asort($type_list);
reset($type_list);
return $type_list;
}

function &getDeptList()
{
$db =& Database::getInstance();
$myts =& MyTextSanitizer::getInstance();
$sql = "SELECT dept, intitule FROM ".$db->prefix("departements")." ORDER BY dept";
$result = $db->query($sql);
$dept_list = array();
while ( $myrow = $db->fetchArray($result) ) {
$dept_list[$myrow['dept']] = $myts->makeTboxData4Show($myrow['intitule']);
}
return $dept_list;
}


I have correcly defined these 2 files in Xoopsformloader :
include_once XOOPS_ROOT_PATH."/class/xoopsform/formselectType.php";
include_once XOOPS_ROOT_PATH."/class/xoopsform/formselectDept.php";

Finally in Kernel / User.php i added this :

$this->initVar('dept', XOBJ_DTYPE_INT, 0, false);

and lower :
function dept()
{
return $this->getVar("dept");
}

Not forgetting :

$sql = sprintf("INSERT INTO %s (uid, uname, name, email, url, user_avatar, user_regdate, user_icq, user_from, user_sig, user_viewemail, actkey, user_aim, user_yim, user_msnm, pass, posts, attachsig, rank, level, theme, timezone_offset, last_login, umode, uorder, notify_method, notify_mode, user_occ, bio, user_intrest, user_mailok, date, ip, prenom, dept, type, mailing, valide) VALUES (%u, %s, %s, %s, %s, %s, %u, %s, %s, %s, %u, %s, %s, %s, %s, %s, %u, %u, %u, %u, %s, %.2f, %u, %s, %u, %u, %u, %s, %s, %s, %u, %u, %u, %s, %u, %u, %u, %u)", $this->db->prefix('users'), $uid, $this->db->quoteString($uname), $this->db->quoteString($name), $this->db->quoteString($email), $this->db->quoteString($url), $this->db->quoteString($user_avatar), time(), $this->db->quoteString($user_icq), $this->db->quoteString($user_from), $this->db->quoteString($user_sig), $user_viewemail, $this->db->quoteString($actkey), $this->db->quoteString($user_aim), $this->db->quoteString($user_yim), $this->db->quoteString($user_msnm), $this->db->quoteString($pass), $posts, $attachsig, $rank, $level, $this->db->quoteString($theme), $timezone_offset, 0, $this->db->quoteString($umode), $uorder, $notify_method, $notify_mode, $this->db->quoteString($user_occ), $this->db->quoteString($bio), $this->db->quoteString($user_intrest), $user_mailok, $this->db->quoteString($date), $this->db->quoteString($ip), $this->db->quoteString($prenom), $dept, $type, $mailing, $valide);
} else {
$sql = sprintf("UPDATE %s SET uname = %s, name = %s, email = %s, url = %s, user_avatar = %s, user_icq = %s, user_from = %s, user_sig = %s, user_viewemail = %u, user_aim = %s, user_yim = %s, user_msnm = %s, posts = %d, pass = %s, attachsig = %u, rank = %u, level= %u, theme = %s, timezone_offset = %.2f, umode = %s, last_login = %u, uorder = %u, notify_method = %u, notify_mode = %u, user_occ = %s, bio = %s, user_intrest = %s, user_mailok = %u, date = %s, ip = %s, prenom = %s, dept = %s, type = %u, mailing = %u, valide = %u WHERE uid = %u", $this->db->prefix('users'), $this->db->quoteString($uname), $this->db->quoteString($name), $this->db->quoteString($email), $this->db->quoteString($url), $this->db->quoteString($user_avatar), $this->db->quoteString($user_icq), $this->db->quoteString($user_from), $this->db->quoteString($user_sig), $user_viewemail, $this->db->quoteString($user_aim), $this->db->quoteString($user_yim), $this->db->quoteString($user_msnm), $posts, $this->db->quoteString($pass), $attachsig, $rank, $level, $this->db->quoteString($theme), $timezone_offset, $this->db->quoteString($umode), $last_login, $uorder, $notify_method, $notify_mode, $this->db->quoteString($user_occ), $this->db->quoteString($bio), $this->db->quoteString($user_intrest), $user_mailok, $this->db->quoteString($date), $this->db->quoteString($ip), $this->db->quoteString($prenom), $dept, $type, $mailing, $valide, $uid);

As precised storage of $dept in database has attribute "Char(2)"

When switching to Dept to XobJ_Dtype_TXTBOX, i get no changes, that is to say departements are still stored under 1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 2 instead of 01, 02, 03, 04, 05, 06, 07, 08, 09, 2A, 2B...

When switching function dept to :
function dept($format="S")
{
return $this->getVar("dept", $format);
}

And sql insert and update to :
Insert ...dept...VALUES...%s....$this->db->quoteString($dept)...

Update ...SET...dept = %s...WHERE...$this->db->quoteString($dept)...

I get errors
Any idea on how solving this problem ???

Thks for any help
Tdldp

tdldp

Just popping in
Posted on: 2004/2/4 9:37
tdldp
tdldp (Show more)
Just popping in
Posts: 9
Since: 2002/3/13
#4

Re: Strange did you say strange....

I don't know what i did, but that f..... darn script finally works...

I do Get storage in the format desired...

But here i have a more general question...

Once stored 2A or anything else in database field dept, i can't retrieve information as soon as i have 2A or 2B (only 2 that i have btw) in my sql query:

SELECT * FROM `cef_users` WHERE dept = 2A;

although i can retrieve all information for any other departement : 02 , 44, etc... this one gives me following error :

#1054 - Unknown column '2A' in 'where clause'


An idea ???

Tdldp

Dave_L

XOOPS is my life!
Posted on: 2004/2/4 10:33
Dave_L
Dave_L (Show more)
XOOPS is my life!
Posts: 2277
Since: 2003/11/7
#5

Re: Strange did you say strange....

Strings need to be quoted:

SELECT FROM cef_users WHERE dept '2A';


The backticks (``) around the table name are unnecessary here. Backticks around identifiers are only needed when those names contain special characters (characters other than "_", "$" and those outside the set of alphanumeric characters from the current character set). Reference

tdldp

Just popping in
Posted on: 2004/2/4 21:29
tdldp
tdldp (Show more)
Just popping in
Posts: 9
Since: 2002/3/13
#6

Re: Strange did you say strange....

Tks a lot dave, indeed it was the problem with my scripting...

what a poor developper i make ;)

Tdldp

Mithrandir

XOOPS is my life!
Posted on: 2004/2/4 21:42
Mithrandir
Mithrandir (Show more)
XOOPS is my life!
Posts: 6320
Since: 2003/6/21
#7

Re: Strange did you say strange....

Practice makes perfect