默认的用户登陆,都是在user.php文件里执行。
可产品购买流程等,都是在flow.php里执行,如果用户没有登陆,会GET请求回flow.php本页的step=login。
然后大约264行有这么一句:if ($user->login($_POST[‘username’], $_POST[‘password’],isset($_POST[‘remember’])))
#在这严重鄙视下EC,面向对象的思维根本就没完整。在user.php里做了用户名/邮件/电话号码及二维码图片登陆,导致我这里又要重写一个。
首先写个手机判断方法:
function is_telephone($phone)
{
$chars = “/^13[0-9]{1}[0-9]{8}$|15[0-9]{1}[0-9]{8}$|18[0-9]{1}[0-9]{8}$/”;
if (preg_match($chars, $phone))
{
return true;
}
else
{
return false;
}
}
然后::修改IF语句:if ($user->login($_POST[‘username’], $_POST[‘password’],isset($_POST[‘remember’])))
改为:
$username=$_POST[‘username’];
if(is_email($username)) //首先判断是否符合邮件
{
$sql =”select user_name from “.$ecs->table(‘users’).” where email='”.$username.”‘”; //SQL语句
$username_e = $db->getOne($sql); //如果有存在的数据赋值给变量
if($username_e) //如果存在不为空的话
{
$username=$username_e; //重新赋值
}
}
if(is_telephone($username))
{
$sql =”select user_name from “.$ecs->table(‘users’).” where mobile_phone='”.$username.”‘”;
$username_e = $db->getOne($sql);
if($username_e)
{
$username=$username_e;
}
}
if ($user->login($username, $_POST[‘password’],isset($_POST[‘remember’])))
{
update_user_info(); //更新用户信息
recalculate_price(); // 重新计算购物车中的商品价格
// 检查购物车中是否有商品 没有商品则跳转到首页
$sql = “SELECT COUNT(*) FROM ” . $ecs->table(‘cart’) . ” WHERE session_id = ‘” . SESS_ID . “‘ “;
if ($db->getOne($sql) > 0)
{
ecs_header(“Location: flow.php?step=checkout\n”);
}
else
{
ecs_header(“Location:index.php\n”);
}
exit;
}
同时为了方便提醒用户可以以上三种方法登陆;
修改flow.dwt文件:找到对应的input添加:
placeholder=”用户名/邮箱/手机号”
关于作者