mtWeb > Download > PHP Login Script

<?php
/* $Id: signup.php,v 1.1 2002/09/20 20:01:18 shaggy Exp $ */

    
begin_html();

    
define('SIGNUP_SUCCESS', 0);
    
define('SIGNUP_ERROR_USERNAME_TAKEN', 1);
    
define('SIGNUP_ERROR_EMAIL_TAKEN', 2);
    
define('SIGNUP_ERROR_DB', 4);

    
$error_messages = Array(
        
SIGNUP_SUCCESS => 'Congratulations your account has been created, you can now log in.',
        
SIGNUP_ERROR_USERNAME_TAKEN => 'This <strong>username</strong> has already been taken.',
        
SIGNUP_ERROR_EMAIL_TAKEN => 'We already have a user registered with this <strong>email address</strong>.',
        
SIGNUP_ERROR_DB => 'Your account could <strong>not</strong> be created. Try again later.',
    );

    require_once
'html_form.php';
    
$form = new Form(uri_self());

    
$form->addText('username', 'Username (5-20 characters)');
    
$form->addPassword('password', 'Password (5-20 characters)');
    
$form->addText('fullname', 'Name', ' ');
    
$form->addText('email', 'Email');

    
$form->addCheckbox('email_priv', 'Hide my email');

    
$form->addSubmit('Sign up');

    
$form->addRule('username', 'range:5:20',
        
'Enter your <strong>username</strong>, between 5 and 20 characters.');
    
$form->addRule('password', 'range:5:20',
        
'Enter your <strong>passeword</strong>, between 5 and 20 characters.');
    
$form->addRule('email', 'email', 'Not a valid <strong>email</strong>.');
    
$form->addRule('email', 'required', 'Your <strong>email</strong> is required.');

    
$form->addFilter('_ALL_', 'db');

    if (
$form->valid()) {
        
signup($form, $error_messages);
    } else {
        
$form->display();
    }



function
signup(&$form, &$error_messages) {
    global
$db, $user;

    
$err = new HTML_Form_Error($error_messages);

    
$processed = $form->getProcessed();
    
$email_priv = isset($processed['email_priv']) ? "'y'" : "'n'";
    
$name = isset($processed['fullname']) ? $processed['fullname'] : "''";
    
$cookie = $GLOBALS['user']->generateCookie();

    
$sql = "INSERT INTO member " .
            
"(username, password, cookie, registered, name, email, email_priv) VALUES " .
            
"($processed[username], md5($processed[password]), '$cookie', CURRENT_DATE, " .
            
"$name, $processed[email], $email_priv)";

    
$db->pushErrorHandling(PEAR_ERROR_RETURN);
    
$result = $db->query($sql);

    if (
DB::isError($result)) {
        if (
$result->getCode() == DB_ERROR_ALREADY_EXISTS) {
            
$db->popErrorHandling();
            
$sql = "SELECT id FROM member WHERE username = $processed[username]";
            
$result = $db->query($sql);

            if (
$result->numRows() == 1 ) {
                
$err->addError(SIGNUP_ERROR_USERNAME_TAKEN);
            }

            
$sql = "SELECT id FROM member WHERE email = $processed[email]";
            
$result = $db->query($sql);

            if (
$result->numRows() == 1 ) {
                
$err->addError(SIGNUP_ERROR_EMAIL_TAKEN);
            }
        }

        if (
$err->isError() ) {
            echo
$err->getMessage();
            
$form->display();
        } else {
            
$err->addError(SIGNUP_ERROR_DB);
        }
        return ;
    }

    if (
$db->affectedRows() != 1) {
        
$err->addError(SIGNUP_ERROR_DB);
        echo
$err->getMessage();
        die (
$db->getMessage());
    } else {
        echo
$err->getMessage();

        
$sql = "SELECT subject, message FROM mail WHERE description='signup' ";
        list(
$subject, $message) = $db->getRow($sql, DB_FETCHMODE_ORDERED);
        
$message = str_replace('$name', $form->getValue('fullname'), $message);
        
$message = str_replace('$username', $form->getValue('username'), $message);
        
$message = str_replace('$password', $form->getValue('password'), $message);

        
$message = mail_them($form->getValue('email'), $subject, $message);
        echo
"<p>$message</p>";

        
$user->_checkLogin($processed['username'], $processed['password'], true);
        
        if (isset(
$_SESSION['log_to'])) {
            echo
'<p>You can now proceed to the <a href="' . $_SESSION['log_to'] . '">' .
                
"page you were headed to</a>.</p>";
        }
    }
}

?>