register.php

来自「速度很快的PHP论坛源程序」· PHP 代码 · 共 303 行

PHP
303
字号
<?php

/*
	[DISCUZ!] register.php - new member registration
	This is NOT a freeware, use is subject to license terms

	Version: 4.0.0
	Web: http://www.comsenz.com
	Copyright: 2001-2005 Comsenz Technology Ltd.
	Last Modified: 2004/9/22 10:12
*/

require_once './include/common.inc.php';
require_once DISCUZ_ROOT.'./forumdata/cache/cache_profilefields.php';

$discuz_action = 5;

if($discuz_uid) {
	showmessage('login_succeed', 'index.php');
}

if(!$regstatus) {
	showmessage('register_disable');
}

$query = $db->query("SELECT * FROM {$tablepre}settings WHERE variable IN ('censoruser', 'doublee', 'bbrules', 'bbrulestxt', 'welcomemsg', 'welcomemsgtxt')");
while($setting = $db->fetch_array($query)) {
	$$setting['variable'] = $setting['value'];
}

$query = $db->query("SELECT groupid, allowcstatus, allowavatar, allowcusbbcode, allowsigbbcode, allowsigimgcode, maxsigsize FROM {$tablepre}usergroups WHERE ".($regverify ? "groupid='8'" : "creditshigher<=0 AND 0<creditslower LIMIT 1"));
$groupinfo = $db->fetch_array($query);

if(!submitcheck('regsubmit')) {

	if($bbrules && !submitcheck('rulesubmit')) {
		$bbrulestxt = nl2br("\n$bbrulestxt\n\n");
	} else {

		$enctype = $groupinfo['allowavatar'] == 3 ? 'enctype="multipart/form-data"' : NULL;

		$styleselect = $dayselect = '';
		$query = $db->query("SELECT styleid, name FROM {$tablepre}styles WHERE available='1'");
		while($styleinfo = $db->fetch_array($query)) {
			$styleselect .= '<option value="'.$styleinfo['styleid'].'">'.$styleinfo['name'].'</option>'."\n";
		}

		for($num = 1; $num <= 31; $num++) {
			$dayselect .= '<option value="'.$num.'">'.$num.'</option>';
		}

		$dateformatorig = $dateformat;
		$dateformatorig = str_replace('n', 'mm', $dateformatorig);
		$dateformatorig = str_replace('j', 'dd', $dateformatorig);
		$dateformatorig = str_replace('y', 'yy', $dateformatorig);
		$dateformatorig = str_replace('Y', 'yyyy', $dateformatorig);

	}

	include template('register');

} else {

	require_once DISCUZ_ROOT.'./include/discuzcode.func.php';
	include_once DISCUZ_ROOT.'./forumdata/cache/cache_bbcodes.php';

	$email = trim($email);
	$username = trim($username);

	if(strlen($username) > 15) {
		showmessage('profile_username_toolang');
	}

	if($password != $password2) {
		showmessage('profile_passwd_notmatch');
	}


	// Regular Expression for "Guest" of different languages
	$guestexp = '\xA1\xA1|^Guest|^\xD3\xCE\xBF\xCD|\xB9\x43\xAB\xC8';

	if(preg_match("/^\s*$|^c:\\con\\con$|[%,\*\"\s\t\<\>\&]|$guestexp/is", $username) || @preg_match('/^'.str_replace(array('\\*', ',', ' '), array('.*', '|', ''), preg_quote($censoruser, '/')).'$/i', $username)) {
		showmessage('profile_username_illegal');
	}

	if(!$password || $password != addslashes($password)) {
		showmessage('profile_passwd_illegal');
	}

	if(!isemail($email)) {
		showmessage('profile_email_illegal');
	}

	$fieldadd1 = $fieldadd2 = '';
	foreach(array_merge($_DCACHE['fields_required'], $_DCACHE['fields_optional']) as $field) {
		$field_key = 'field_'.$field['fieldid'];
		$field_val = ${'field_'.$field['fieldid'].'new'};
		if($field['required'] && trim($field_val) == '') {
			showmessage('profile_required_info_invalid');
		} elseif($field['selective'] && $field_val != '' && !isset($field['choices'][$field_val])) {
			showmessage('undefined_action', NULL, 'HALTED');
		} else {
			$fieldadd1 .= ", $field_key";
			$fieldadd2 .= ", '".dhtmlspecialchars($field_val)."'";
		}
	}

	if($regverify == 2 && !trim($regmessage)) {
		showmessage('profile_required_info_invalid');
	}

	if($groupinfo['maxsigsize'] && strlen($sig) > $groupinfo['maxsigsize']) {
		$maxsigsize = $groupinfo['maxsigsize'];
		showmessage('profile_sig_toolang');
	}

	if($regfloodctrl) {
		$query = $db->query("SELECT count FROM {$tablepre}regips WHERE ip='$onlineip' AND count>'0' AND dateline>'$timestamp'-86400");
		$regattempts = $db->result($query, 0);
		if($regattempts) {
			if($regattempts >= $regfloodctrl) {
				showmessage('register_flood', NULL, 'HALTED');
			} else {
				$db->query("UPDATE {$tablepre}regips SET count=count+1 WHERE ip='$onlineip' AND count>'0'");
			}
		} else {
			$db->query("INSERT INTO {$tablepre}regips (ip, count, dateline)
				VALUES ('$onlineip', '1', '$timestamp')");
		}
	}

	if($regctrl) {
		$query = $db->query("SELECT ip FROM {$tablepre}regips WHERE ip='$onlineip' AND count='-1' AND dateline>$timestamp-'$regctrl'*3600 LIMIT 1");
		if($db->num_rows($query)) {
			showmessage('register_ctrl', NULL, 'HALTED');
		}
	}

	$query = $db->query("SELECT uid FROM {$tablepre}members WHERE username='$username'");
	if($db->num_rows($query)) {
		showmessage('profile_username_duplicate');
	}

	if(!$doublee) {
		$query = $db->query("SELECT uid FROM {$tablepre}members WHERE email='$email' LIMIT 1");
		if($db->num_rows($query)) {
			showmessage('profile_email_duplicate');
		}
	}

	if(($groupinfo['allowavatar'] == 2 || $groupinfo['allowavatar'] == 3) && $avatar) {
		$avatar = dhtmlspecialchars($avatar);
		$avatarext = strtolower(fileext($avatar));
		if(!preg_match("/^((customavatars\/\d+\.[a-z]+)|(images\/avatars\/.+?)|(http:\/\/.+?))$/i", $avatar)
			|| !in_array($avatarext, array('gif', 'jpg', 'png'))) {
			showmessage('profile_avatar_invalid');
		}
	} elseif($groupinfo['allowavatar'] == 3 && $HTTP_POST_FILES['customavatar']) {
		if(disuploadedfile($HTTP_POST_FILES['customavatar']['tmp_name']) && $HTTP_POST_FILES['customavatar']['tmp_name'] != 'none' && $HTTP_POST_FILES['customavatar']['tmp_name'] && trim($HTTP_POST_FILES['customavatar']['name'])) {
			$HTTP_POST_FILES['customavatar']['name'] = daddslashes($HTTP_POST_FILES['customavatar']['name']);
			$avatarext = strtolower(fileext($HTTP_POST_FILES['customavatar']['name']));
			if(!in_array($avatarext, array('gif', 'jpg', 'png'))) {
				showmessage('profile_avatar_invalid');
			}
		} else {
			$HTTP_POST_FILES['customavatar'] = array();
		}
	} else {
		$avatar = '';
	}

	$password = md5($password);
	$secques = quescrypt($questionid, $answer);

	if(!$groupinfo['allowcstatus']) {
		$cstatus = '';
	}

	$bday = "$year-$month-$day";

	if(!$month || !$day || !$year) {
		$bday = '';
	}

	if($dateformatnew) {
		$dateformatnew = str_replace('mm', 'n', $cdateformatnew);
		$dateformatnew = str_replace('dd', 'j', $dateformatnew);
		$dateformatnew = str_replace('yyyy', 'Y', $dateformatnew);
		$dateformatnew = str_replace('yy', 'y', $dateformatnew);
	} else {
		$dateformatnew = '';
	}

	$dateformatnew = str_replace('mm', 'n', $dateformatnew);
	$dateformatnew = str_replace('dd', 'j', $dateformatnew);
	$dateformatnew = str_replace('yyyy', 'Y', $dateformatnew);
	$dateformatnew = str_replace('yy', 'y', $dateformatnew);

	if(!is_numeric($icq) || strlen($icq) < 5 || strlen($icq) > 15) {
		$icq = '';
	}

	$avatar = dhtmlspecialchars($avatar);
	$yahoo = dhtmlspecialchars($yahoo);
	$qq = dhtmlspecialchars($qq);
	$email = dhtmlspecialchars($email);
	$bday = dhtmlspecialchars($bday);

	$site = trim(str_replace('http://', '', $site));
	$site = $site ? dhtmlspecialchars('http://'.$site) : '';

	$signature = censor($signature);
	$sigstatus = $signature ? 1 : 0;
	$sightml = addslashes(discuzcode(stripslashes($signature), 1, 0, 0, 0, ($groupinfo['allowsigbbcode'] ? ($groupinfo['allowcusbbcode'] ? 2 : 1) : 0), $groupinfo['allowsigimgcode'], 0));

	$bio = censor(dhtmlspecialchars($bio));
	$locationnew = cutstr(censor(dhtmlspecialchars($locationnew)), 30);
	$cstatus = cutstr(censor(dhtmlspecialchars($cstatus)), 30);

	$invisiblenew = $invisiblenew && $groupinfo['allowinvisible'] ? 1 : 0;

	$idstring = random(6);
	$authstr = $regverify == 1 ? "$timestamp\t2\t$idstring" : '';

	$db->query("INSERT INTO {$tablepre}members (username, password, secques, gender, adminid, groupid, regip, regdate, lastvisit, lastactivity, posts, credits, email, bday, sigstatus, tpp, ppp, styleid, dateformat, timeformat, pmsound, showemail, newsletter, invisible, timeoffset)
		VALUES ('$username', '$password', '$secques', '$gendernew', '0', '$groupinfo[groupid]', '$onlineip', '$timestamp', '$timestamp', '$timestamp', '0', '0', '$email', '$bday', '$sigstatus', '$tppnew', '$pppnew', '$styleidnew', '$dateformatnew', '$timeformatnew', '$pmsoundnew', '$showemail', '$newsletter', '$invisiblenew', '$timeoffsetnew')");
	$uid = $db->insert_id();

	$db->query("INSERT INTO {$tablepre}memberfields (uid, site, icq, qq, yahoo, msn, location, bio, signature, sightml, customstatus, authstr $fieldadd1)
		VALUES ('$uid', '$site', '$icq', '$qq', '$yahoo', '$msn', '$locationnew', '$bio', '$signature', '$sightml', '$cstatus', '$authstr' $fieldadd2)");

	if($regctrl || $regfloodctrl) {
		$db->query("DELETE FROM {$tablepre}regips WHERE dateline<='$timestamp'-".($regctrl > 24 ? $regctrl : 24)."*3600", 'UNBUFFERED');
		if($regctrl) {
			$db->query("INSERT INTO {$tablepre}regips (ip, count, dateline)
				VALUES ('$onlineip', '-1', '$timestamp')");
		}
	}

	if($regverify == 2) {
		$db->query("REPLACE INTO {$tablepre}validating (uid, submitdate, moddate, admin, submittimes, status, message, remark)
			VALUES ('$uid', '$timestamp', '0', '', '1', '0', '$regmessage', '')");
	}

	if($avatar || $HTTP_POST_FILES['customavatar']) {
		if($HTTP_POST_FILES['customavatar']) {
			$avatar = 'customavatars/'.$uid.'.'.$avatarext;
			$avatartarget = DISCUZ_ROOT.'./'.$avatar;
			if(!@copy($HTTP_POST_FILES['customavatar']['tmp_name'], $avatartarget)) {
				@move_uploaded_file($HTTP_POST_FILES['customavatar']['tmp_name'], $avatartarget);
			}
			$avatarimagesize = @getimagesize($avatartarget);
			if(!$avatarimagesize) {
				@unlink($avatartarget);
				showmessage('profile_avatar_invalid');
			} elseif($maxavatarsize && filesize($avatartarget) > $maxavatarsize) {
				@unlink($avatartarget);
				showmessage('profile_avatar_toobig');
			}
		}

		if($avatarwidth == '*' || $avatarheight == '*') {
			$avatarwidth = $avatarheight = 80;
			@list($avatarwidth, $avatarheight) = $avatarimagesize;
		}
		$maxsize = max($avatarwidth, $avatarheight);
		if($maxsize > $maxavatarpixel) {
			$avatarwidth = $avatarwidth * $maxavatarpixel / $maxsize;
			$avatarheight = $avatarheight * $maxavatarpixel / $maxsize;
		}

		$db->query("UPDATE {$tablepre}memberfields SET avatar='$avatar', avatarwidth='$avatarwidth', avatarheight='$avatarheight' WHERE uid='$uid'");
	}

	if($welcomemsg && !empty($welcomemsgtxt)) {
		$welcomtitle = "Welcome to $bbname!";
		$welcomemsgtxt = addslashes($welcomemsgtxt);
		$db->query("INSERT INTO {$tablepre}pms (msgfrom, msgfromid, msgtoid, folder, new, subject, dateline, message)
			VALUES ('System Message', '0', '$uid', 'inbox', '1', '$welcomtitle', '$timestamp','$welcomemsgtxt')");
		$db->query("UPDATE {$tablepre}members SET newpm='1' WHERE uid='$uid'");
	}

	require_once DISCUZ_ROOT.'./include/cache.func.php';
	updatecache('settings');

	$discuz_uid = $uid;
	$discuz_user = $username;
	$discuz_userss = stripslashes($discuz_user);
	$discuz_pw = $password;
	$discuz_secques = $secques;
	$groupid = $groupinfo['groupid'];
	$styleid = $styleid ? $styleid : $_DCACHE['settings']['styleid'];

	if($regverify == 1){
		sendmail($email, 'email_verify_subject', 'email_verify_message');
		showmessage('profile_email_verify');
	} else {
		showmessage('register_succeed', dreferer());
	}

}

?>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?