Custom fields on custom registration page!?

Discussion forum for MOD Writers regarding MOD Development.

Custom fields on custom registration page!?

Postby oOoCheshireCatoOo » Mon Nov 10, 2008 4:45 pm

Hi,

I have a custom registration page which works perfectly fine (I got the code from on here - the long topic somewhere to do site integration).

I however have some custom fields for members, such as the members address. But I need this to be displayed on the custom registration page, as well as the normal required fields. How would I do this? Is there any snippet of code which I can enter which will enable this?

Thanks
oOoCheshireCatoOo
Registered User
 
Posts: 57
Joined: Sun Jul 13, 2008 1:21 pm

Re: Custom fields on custom registration page!?

Postby Brf » Mon Nov 10, 2008 4:48 pm

Since this envolves custom code, moving to Mod Writers Discussion
User avatar
Brf
Support Team Member
Support Team Member
 
Posts: 46842
Joined: Tue May 10, 2005 7:47 pm
Location: {postrow.POSTER_FROM}

Re: Custom fields on custom registration page!?

Postby A_Jelly_Doughnut » Mon Nov 10, 2008 8:31 pm

More detail would be helpful. Where are these fields being stored? Is your custom registration page processed by phpBB's standard user registration code?
A Donut's Blog
"Bach's Prelude (Cello Suite No. 1) is driving Indiana country roads in Autumn" - Ann Kish

Celebrating 11 years as a phpBB user
User avatar
A_Jelly_Doughnut
Former Team Member
 
Posts: 34391
Joined: Sat Jan 18, 2003 1:26 am
Location: Where the Rivers Run

Re: Custom fields on custom registration page!?

Postby oOoCheshireCatoOo » Wed Nov 12, 2008 12:36 pm

A_Jelly_Doughnut wrote:More detail would be helpful. Where are these fields being stored? Is your custom registration page processed by phpBB's standard user registration code?


Hi. They are custom user fields, the ones which the PHPBB system allows you to create within the admin area.

Here is the code for my reg page (note I have taken some of the styling out for the purpose of posting it up, but it has the main code)

Code: Select all
define('IN_PHPBB', true);
   $phpbb_root_path = '../forums/';
   $phpEx = substr(strrchr(__FILE__, '.'), 1);
   //include($phpbb_root_path . 'common.' . $phpEx);
   include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
   include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx);
   
   // Start session management
   $user->session_begin();
   $auth->acl($user->data);
   $user->setup('ucp');
   
   
   /*if($user->data['is_registered'])
   {
               meta_refresh(3, append_sid("somepage.php"));
               trigger_error("You are already registered.");
   }*/
   
            if ($config['require_activation'] == USER_ACTIVATION_DISABLE)
            {
                trigger_error('UCP_REGISTER_DISABLE');
            }
   
            $confirm_id      = request_var('confirm_id', '');     
            $submit         = (isset($_POST['submit'])) ? true : false;
            // Check and initialize some variables if needed
            if ($submit)
            {
                      $error = $cp_data = $cp_error = array();
   
            $data = array(
                'username'         => utf8_normalize_nfc(request_var('username', '', true)),
                'new_password'      => request_var('new_password', '', true),
                'password_confirm'   => request_var('password_confirm', '', true),
                'email'            => strtolower(request_var('email', '')),
                'email_confirm'      => strtolower(request_var('email_confirm', '')),
                'confirm_code'      => request_var('confirm_code', ''),
            );
            
                $error = validate_data($data, array(
                     'username'         => array(
                         array('string', false, $config['min_name_chars'], $config['max_name_chars']),
                         array('username', '')),
                     'new_password'      => array(
                         array('string', false, $config['min_pass_chars'], $config['max_pass_chars']),
                         array('password')),
                     'password_confirm'   => array('string', false, $config['min_pass_chars'], $config['max_pass_chars']),
                     'email'            => array(
                         array('string', false, 6, 60),
                         array('email')),
                     'email_confirm'      => array('string', false, 6, 60),
                     'confirm_code'      => array('string', !$config['enable_confirm'], 5, 8),
                ));
   
                // Replace "error" strings with their real, localised form
                $error = preg_replace('#^([A-Z_]+)$#e', "(!empty(\$user->lang['\\1'])) ? \$user->lang['\\1'] : '\\1'", $error);
   
                // DNSBL check
                if ($config['check_dnsbl'])
                {
                     if (($dnsbl = $user->check_dnsbl('register')) !== false)
                     {
                         $error[] = sprintf($user->lang['IP_BLACKLISTED'], $user->ip, $dnsbl[1]);
                     }
                }
   
                // Visual Confirmation handling
                $wrong_confirm = false;
                if ($config['enable_confirm'])
                {
                     if (!$confirm_id)
                     {
                         $error[] = $user->lang['CONFIRM_CODE_WRONG'];
                         $wrong_confirm = true;
                     }
                     else
                     {
                         $sql = 'SELECT code
                              FROM ' . CONFIRM_TABLE . "
                              WHERE confirm_id = '" . $db->sql_escape($confirm_id) . "'
                                  AND session_id = '" . $db->sql_escape($user->session_id) . "'
                                  AND confirm_type = " . CONFIRM_REG;
                         $result = $db->sql_query($sql);
                         $row = $db->sql_fetchrow($result);
                         $db->sql_freeresult($result);
   
                         if ($row)
                         {
                              if (strcasecmp($row['code'], $data['confirm_code']) === 0)
                              {
                                  $sql = 'DELETE FROM ' . CONFIRM_TABLE . "
                                       WHERE confirm_id = '" . $db->sql_escape($confirm_id) . "'
                                           AND session_id = '" . $db->sql_escape($user->session_id) . "'
                                           AND confirm_type = " . CONFIRM_REG;
                                  $db->sql_query($sql);
                              }
                              else
                              {
                                  $error[] = $user->lang['CONFIRM_CODE_WRONG'];
                                  $wrong_confirm = true;
                              }
                         }
                         else
                         {
                              $error[] = $user->lang['CONFIRM_CODE_WRONG'];
                              $wrong_confirm = true;
                         }
                     }
                }
   
                if (!sizeof($error))
                {
                     if ($data['new_password'] != $data['password_confirm'])
                     {
                         $error[] = $user->lang['NEW_PASSWORD_ERROR'];
                     }
   
                     if ($data['email'] != $data['email_confirm'])
                     {
                         $error[] = $user->lang['NEW_EMAIL_ERROR'];
                     }
                }
   
                if (!sizeof($error))
                {
                     $server_url = generate_board_url();
   
                     // Which group by default?
                     $group_name = ($coppa) ? 'REGISTERED_COPPA' : 'REGISTERED';
   
                     $sql = 'SELECT group_id
                         FROM ' . GROUPS_TABLE . "
                         WHERE group_name = '" . $db->sql_escape($group_name) . "'
                              AND group_type = " . GROUP_SPECIAL;
                     $result = $db->sql_query($sql);
                     $row = $db->sql_fetchrow($result);
                     $db->sql_freeresult($result);
   
                     if (!$row)
                     {
                         trigger_error('NO_GROUP');
                     }
   
                     $group_id = $row['group_id'];
   
                     if (($coppa ||
                         $config['require_activation'] == USER_ACTIVATION_SELF ||
                         $config['require_activation'] == USER_ACTIVATION_ADMIN) && $config['email_enable'])
                     {
                         $user_actkey = gen_rand_string(10);
                         $key_len = 54 - (strlen($server_url));
                         $key_len = ($key_len < 6) ? 6 : $key_len;
                         $user_actkey = substr($user_actkey, 0, $key_len);
   
                         $user_type = USER_INACTIVE;
                         $user_inactive_reason = INACTIVE_REGISTER;
                         $user_inactive_time = time();
                     }
                     else
                     {
                         $user_type = USER_NORMAL;
                         $user_actkey = '';
                         $user_inactive_reason = 0;
                         $user_inactive_time = 0;
                     }
                     
                     // Set Timezone = EST
                     $data['tz'] = -5.00;
   
                     $user_row = array(
                         'username'            => $data['username'],
                         'user_password'         => phpbb_hash($data['new_password']),
                         'user_email'         => $data['email'],
                         'group_id'            => (int) $group_id,
                         'user_timezone'         => (float) $data['tz'],
                         'user_dst'            => $is_dst,
                         'user_lang'            => $data['lang'],
                         'user_type'            => $user_type,
                         'user_actkey'         => $user_actkey,
                         'user_ip'            => $user->ip,
                         'user_regdate'         => time(),
                         'user_inactive_reason'   => $user_inactive_reason,
                         'user_inactive_time'   => $user_inactive_time,
                     );
   
                     // Register user...
                     $user_id = user_add($user_row, $cp_data);
   
                     // This should not happen, because the required variables are listed above...
                     if ($user_id === false)
                     {
                         trigger_error('NO_USER', E_USER_ERROR);
                     }
   
                     if ($coppa && $config['email_enable'])
                     {
                         $message = $user->lang['ACCOUNT_COPPA'];
                         $email_template = 'coppa_welcome_inactive';
                     }
                     else if ($config['require_activation'] == USER_ACTIVATION_SELF && $config['email_enable'])
                     {
                         $message = $user->lang['ACCOUNT_INACTIVE'];
                         $email_template = 'user_welcome_inactive';
                     }
                     else if ($config['require_activation'] == USER_ACTIVATION_ADMIN && $config['email_enable'])
                     {
                         $message = $user->lang['ACCOUNT_INACTIVE_ADMIN'];
                         $email_template = 'admin_welcome_inactive';
                     }
                     else
                     {
                         $message = $user->lang['ACCOUNT_ADDED'];
                         $email_template = 'user_welcome';
                     }
   
                     if ($config['email_enable'])
                     {
                         include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
   
                         $messenger = new messenger(false);
   
                         $messenger->template($email_template, $data['lang']);
   
                         $messenger->to($data['email'], $data['username']);
   
                         $messenger->headers('X-AntiAbuse: Board servername - ' . $config['server_name']);
                         $messenger->headers('X-AntiAbuse: User_id - ' . $user->data['user_id']);
                         $messenger->headers('X-AntiAbuse: Username - ' . $user->data['username']);
                         $messenger->headers('X-AntiAbuse: User IP - ' . $user->ip);
   
                         $messenger->assign_vars(array(
                              'WELCOME_MSG'   => htmlspecialchars_decode(sprintf($user->lang['WELCOME_SUBJECT'], $config['sitename'])),
                              'USERNAME'      => htmlspecialchars_decode($data['username']),
                              'PASSWORD'      => htmlspecialchars_decode($data['new_password']),
                              'U_ACTIVATE'   => "$server_url/ucp.$phpEx?mode=activate&u=$user_id&k=$user_actkey")
                         );
   
                         if ($coppa)
                         {
                              $messenger->assign_vars(array(
                                  'FAX_INFO'      => $config['coppa_fax'],
                                  'MAIL_INFO'      => $config['coppa_mail'],
                                  'EMAIL_ADDRESS'   => $data['email'])
                              );
                         }
   
                         $messenger->send(NOTIFY_EMAIL);
   
                         if ($config['require_activation'] == USER_ACTIVATION_ADMIN)
                         {
                              // Grab an array of user_id's with a_user permissions ... these users can activate a user
                              $admin_ary = $auth->acl_get_list(false, 'a_user', false);
                              $admin_ary = (!empty($admin_ary[0]['a_user'])) ? $admin_ary[0]['a_user'] : array();
   
                              // Also include founders
                              $where_sql = ' WHERE user_type = ' . USER_FOUNDER;
   
                              if (sizeof($admin_ary))
                              {
                                  $where_sql .= ' OR ' . $db->sql_in_set('user_id', $admin_ary);
                              }
   
                              $sql = 'SELECT user_id, username, user_email, user_lang, user_jabber, user_notify_type
                                  FROM ' . USERS_TABLE . ' ' .
                                  $where_sql;
                              $result = $db->sql_query($sql);
   
                              while ($row = $db->sql_fetchrow($result))
                              {
                                  $messenger->template('admin_activate', $row['user_lang']);
                                  $messenger->to($row['user_email'], $row['username']);
                                  $messenger->im($row['user_jabber'], $row['username']);
   
                                  $messenger->assign_vars(array(
                                       'USERNAME'         => htmlspecialchars_decode($data['username']),
                                       'U_USER_DETAILS'   => "$server_url/memberlist.$phpEx?mode=viewprofile&u=$user_id",
                                       'U_ACTIVATE'      => "$server_url/ucp.$phpEx?mode=activate&u=$user_id&k=$user_actkey")
                                  );
   
                                  $messenger->send($row['user_notify_type']);
                              }
                              $db->sql_freeresult($result);
                         }
                     }
   
                     $message = $message . '<br /><br />' . sprintf($user->lang['RETURN_INDEX'], '<a href="' . "http://www.mysite.com/index.php" . '">', '</a>');
                     trigger_error($message);
                }
            }
   
            $s_hidden_fields = array(
                'agreed'      => 'true',
                'change_lang'   => 0,
            );
               
            $s_hidden_fields = build_hidden_fields($s_hidden_fields);
   
            $confirm_image = '';
   
            // Visual Confirmation - Show images
   
            if ($config['enable_confirm'])
            {
                if ($change_lang)
                {
                     $str = '&amp;change_lang=' . $change_lang;
                     $sql = 'SELECT code
                              FROM ' . CONFIRM_TABLE . "
                              WHERE confirm_id = '" . $db->sql_escape($confirm_id) . "'
                                  AND session_id = '" . $db->sql_escape($user->session_id) . "'
                                  AND confirm_type = " . CONFIRM_REG;
                     $result = $db->sql_query($sql);
                     if (!$row = $db->sql_fetchrow($result))
                     {
                         $confirm_id = '';
                     }
                     $db->sql_freeresult($result);
                }
                else
                {
                     $str = '';
                }
                if (!$change_lang || !$confirm_id)
                {
                     $user->confirm_gc(CONFIRM_REG);
                        
                     $sql = 'SELECT COUNT(session_id) AS attempts
                         FROM ' . CONFIRM_TABLE . "
                         WHERE session_id = '" . $db->sql_escape($user->session_id) . "'
                              AND confirm_type = " . CONFIRM_REG;
                     $result = $db->sql_query($sql);
                     $attempts = (int) $db->sql_fetchfield('attempts');
                     $db->sql_freeresult($result);
   
                     if ($config['max_reg_attempts'] && $attempts > $config['max_reg_attempts'])
                     {
                         trigger_error('TOO_MANY_REGISTERS');
                     }
   
                     $code = gen_rand_string(mt_rand(5, 8));
                     $confirm_id = md5(unique_id($user->ip));
                     $seed = hexdec(substr(unique_id(), 4, 10));
   
                     // compute $seed % 0x7fffffff
                     $seed -= 0x7fffffff * floor($seed / 0x7fffffff);
   
                     $sql = 'INSERT INTO ' . CONFIRM_TABLE . ' ' . $db->sql_build_array('INSERT', array(
                         'confirm_id'   => (string) $confirm_id,
                         'session_id'   => (string) $user->session_id,
                         'confirm_type'   => (int) CONFIRM_REG,
                         'code'         => (string) $code,
                         'seed'         => (int) $seed)
                     );
                     $db->sql_query($sql);
                }
                $confirm_image = '<img src="' . append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=confirm&amp;id=' . $confirm_id . '&amp;type=' . CONFIRM_REG . $str) . '" alt="" title="" />';
                $s_hidden_fields .= '<input type="hidden" name="confirm_id" value="' . $confirm_id . '" />';
            }
   
            //
            $l_reg_cond = '';
            switch ($config['require_activation'])
            {
                case USER_ACTIVATION_SELF:
                     $l_reg_cond = $user->lang['UCP_EMAIL_ACTIVATE'];
                break;
   
                case USER_ACTIVATION_ADMIN:
                     $l_reg_cond = $user->lang['UCP_ADMIN_ACTIVATE'];
                break;
            }
   include_once("members-header.inc.php");
            
   if( isset($error))
   {
   $error_display = (sizeof($error)) ? implode('<br />&bull;', $error) : '';
   echo '<p>'.$error_display.'</p>';
   }
   $returnpage = 'index.php';
   ?>
         <h1>Registration</h1>
         <p>Please fill in the details below for registration.</p>
       <form action="register.php" method="post">
       <input type="hidden" name="redirect" value="<?= $returnpage ?>" /> 
       <table width="100%" align="center">
         <tbody>
          <tr align="center">
            <td width="30%" align="left"><label for="username">Desired Username: </label></td>
            <td width="70%" align="left"><input id="username" type="text" size="25" maxlength="50" name="username" /></td>
          </tr>
          <tr align="center">
            <td width="30%" align="left"><label for="email">E-mail Address: </label></td>
            <td width="70%" align="left"><input id="email" type="text" size="25" maxlength="100" name="email" /></td>
          </tr>
          <tr align="center">
            <td width="30%" align="left"><label for="email_confirm">Confirm E-Mail Address: </label></td>
            <td width="70%" align="left"><input id="email_confirm" type="text" name="email_confirm" size="25" maxlength="100" /></td>
          </tr>
          <tr align="center">
            <td width="30%" align="left"><label for="new_password">Password: </label></td>
            <td width="70%" align="left"><input id="new_password" type="password" size="25" maxlength="50" name="new_password" /></td>
          </tr>
          <tr align="center">
            <td width="30%" align="left"><label for="password_confirm">Confirm Password: </label></td>
            <td width="70%" align="left"><input id="password_confirm" type="password" size="25" maxlength="50" name="password_confirm" /></td>
          </tr>
          <tr align="center">
            <td width="30%" align="left">Confirmation Image: </td>
            <td width="70%" align="left"><?= $confirm_image ?><?= $s_hidden_fields ?></td>
          </tr>
          <tr align="center">
            <td width="30%" align="left"> </td>
            <td width="70%" align="left"><input type="text" name="confirm_code" size="25" maxlength="8" /></td>
          </tr>
          <tr align="center">
            <td class="note" width="30%" align="left"> </td>
            <td width="70%" align="left"><span class="note">Enter the code exactly as it appears. <br />All letters are case insensitive, there is no zero.<br/>We do this as an added safety feature incase of spam bots.</span></td>
          </tr>
         </tbody>
       </table>
       <table width="100%" align="center">
         <tbody>
          <tr align="center">
            <td width="100%" align="center"><input type="submit" name="submit" value="Submit" /></td>
          </tr>
         </tbody>
       </table>
      </form>


So this works perfectly fine. I just want to know if I can add to it so it includes the custom fields too, such as "address" (one of the custom fields Ihave created) etc... which saves having to enter it after the user has registered.
oOoCheshireCatoOo
Registered User
 
Posts: 57
Joined: Sun Jul 13, 2008 1:21 pm


Return to [3.0.x] MOD Writers Discussion

Who is online

Users browsing this forum: AjaxBB, omgili [Bot] and 11 guests