我正在使用我尝试贡献的Etano开源脚本。该脚本使用用户名登录,但希望用户可以选择用户名或电子邮件登录。任何帮助将不胜感激。
用户帐户的数据库表格为dsb_user_accounts
,结构如下:
登录的php代码如下:
if ($_SERVER['REQUEST_METHOD']=='POST') {
$user=strtolower(sanitize_and_format_gpc($_POST,'user',TYPE_STRING,$__field2format[FIELD_TEXTFIELD],''));
$pass=sanitize_and_format_gpc($_POST,'pass',TYPE_STRING,$__field2format[FIELD_TEXTFIELD],'');
if (!empty($user) && !empty($pass)) {
$log['level']='login';
$log['user_id']=!empty($_SESSION[_LICENSE_KEY_]['user']['user_id']['email']) ? $_SESSION[_LICENSE_KEY_]['user']['user_id'] : 0;
$log['sess']=session_id();
$log['user']=$user;
$log['membership']=$_SESSION[_LICENSE_KEY_]['user']['membership'];
$log['ip']=sprintf('%u',ip2long($_SERVER['REMOTE_ADDR']));
log_user_action($log);
rate_limiter($log);
$query="SELECT a.`".USER_ACCOUNT_ID."` as `user_id`,b.`_user` as `user`,a.`status`,a.`membership`,UNIX_TIMESTAMP(a.`last_activity`) as `last_activity`,a.`email`,b.`status` as `pstat` FROM `".USER_ACCOUNTS_TABLE."` a LEFT JOIN `{$dbtable_prefix}user_profiles` b ON a.`".USER_ACCOUNT_ID."`=b.`fk_user_id` WHERE a.`".USER_ACCOUNT_USER."`='$user' IN (user, email) AND a.`".USER_ACCOUNT_PASS."`=".PASSWORD_ENC_FUNC."('$pass')";
if (!($res=@mysql_query($query))) {trigger_error(mysql_error(),E_USER_ERROR);}
我已添加" IN(用户,电子邮件)"允许使用用户名或电子邮件登录的部分,但是当您使用电子邮件登录时,它会记录错误的用户。