ThinkPhp会员地址管理设计

jianfly.com 2019-01-31 1645次浏览

此方法依赖于会员设计

1、数据库设计

CREATE TABLE IF NOT EXISTS `qf_address` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `mid` int(11) NOT NULL COMMENT '用户id',
  `name` varchar(255) DEFAULT NULL COMMENT '收货人',
  `address` varchar(255) DEFAULT NULL COMMENT '地址',
  `tel` varchar(80) DEFAULT NULL COMMENT '联系方式',
  `zip` char(20) DEFAULT NULL COMMENT '邮编',
  `default` tinyint(1) DEFAULT '0' COMMENT '默认',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

2、php设计

/**
 * 展示地址的页面
 */
public function myaddress() {
	$this->checkLogin();
	$id = $_SESSION['member']['id'];
	$address = M('address')->where(array('mid'=>$id))->order(' `default` desc , `id` desc ')->select();
	$this->assign("address",$address);
	$this->display();
}
/**
 * 修改地址的页面
 */
public function caddress() {
	$this->checkLogin();
	$id = intval($_GET['id']);//地址id
	//查找地址信息,验证地址是否属于当前用户
	$address = M('address')->where(array('id'=>$id, 'mid'=>$_SESSION['member']['id']))->find();
	if(!$address)
	{
		$this->error('系统繁忙,请稍后重试');
		exit;
	}
	$this->assign('address',$address);
	$this->display();//使用新增地址的页面
}
/**
 * 处理修改地址
 */
public function docaddress() {
	$this->checkLogin();
	//获取数据
	$mid     = $_SESSION['member']['id'];//用户id
	$name    = htmlspecialchars($_POST['name']);//收货人
	$address = htmlspecialchars($_POST['address']);//收货地址
	$tel     = htmlspecialchars($_POST['tel']);//联系电话
	$zip     = htmlspecialchars($_POST['zip']);//邮编
	$default = intval($_POST['default']);//排序
	$id      = intval($_POST['id']);//地址id
	//查找地址信息,验证地址是否属于当前用户
	$chk = M('address')->where(array('id'=>$id, 'mid'=>$_SESSION['member']['id']))->find();
	if(!$chk)
	{
		$this->error('系统繁忙,请稍后重试');
		exit;
	}

	if(empty($name))
	{
		$this->error('收货人为空');
		exit;
	}
	if(empty($address))
	{
		$this->error('地址为空');
		exit;
	}
	if(empty($tel))
	{
		$this->error('联系电话为空');
		exit;
	}
	if(empty($zip))
	{
		$this->error('邮编为空');
		exit;
	}
	if($this->doAddAddress( $id , $mid , $name , $address , $tel , $zip , $default ) )
		$this->success("修改地址成功",'myaddress');
	else
		$this->error("系统繁忙,请稍后重试");
}
/**
* 新增地址的页面
*/
public function address() {
	$this->checkLogin();
	$this->display();
}
/**
* 新增地址
*/
public function addaddress() {
	$this->checkLogin();
	//获取数据
	$mid     = $_SESSION['member']['id'];//用户id
	$name    = htmlspecialchars($_POST['name']);//收货人
	$address = htmlspecialchars($_POST['prov']).htmlspecialchars($_POST['city']).htmlspecialchars($_POST['area']).htmlspecialchars($_POST['address']);//收货地址
	$tel     = htmlspecialchars($_POST['tel']);//联系电话
	$zip     = htmlspecialchars($_POST['zip']);//邮编
	$default = intval($_POST['default']);//默认
	if(empty($name))
	{
		$this->error('收货人为空');
		exit;
	}
	if(empty($address))
	{
		$this->error('地址为空');
		exit;
	}
	if(empty($tel))
	{
		$this->error('联系电话为空');
		exit;
	}
	if(empty($zip))
	{
		$this->error('邮编为空');
		exit;
	}
	if($this->doAddAddress( null , $mid , $name , $address , $tel , $zip , $default ) )
		$this->success("新增地址成功",'myaddress');
	else
		$this->error("系统繁忙,请稍后重试");
}
/**
 * 删除地址
 * @param id 地址id
 * @param mid 用户id
 * @return data{state:"true/false", msg:'...', code:''}
 */
public function delAddress() {
	$id = intval($_POST['id']);
    $mid = $_SESSION['member']['id'];
    $data = array();
    if(empty($mid))
    {
        $data['state'] = false;
        $data['msg']   = '未登录';
        $data['code']  = 1;
        $this->ajaxReturn($data);
        exit;
    }
    if(empty($id))
    {
        $data['state'] = false;
        $data['msg']   = '未接收到地址id';
        $data['code']  = 2;
        $this->ajaxReturn($data);
        exit;
    }
    $ret = M('address')->where(array('id'=>$id, 'mid'=>$mid))->delete();
    if(!$ret)
    {
        $data['state'] = false;
        $data['msg']   = '删除失败';
        $data['code']  = 3;
        $this->ajaxReturn($data);
        exit;
    }else {
        $data['state'] = true;
        $data['msg']   = '删除成功';
        $data['code']  = 0;
        $this->ajaxReturn($data);
        exit;
    }
}
/**
 * 处理新增地址
 * @param id
 * @param $mid     用户id
 * @param $name    收货人
 * @param $address 收货地址
 * @param $tel     联系方式
 * @param $zip     邮编
 * @param $default 默认
 * @return true/false
*/
protected function doAddAddress( $id , $mid , $name , $address , $tel , $zip , $default) {
	//过滤数据
	if(!empty($id))
		$id = intval($id);
	if(!empty($mid))
		$data['mid'] = intval($mid);
	if(!empty($name))
		$data['name'] = htmlspecialchars($name);
	if(!empty($address))
		$data['address'] = htmlspecialchars($address);
	if(!empty($tel))
		$data['tel'] = htmlspecialchars($tel);
	if(!empty($zip))
		$data['zip'] = htmlspecialchars($zip);
	$data['default'] = intval($default);
	//修改或插入
	if(empty($id))//插入
	{
		if(!$data['default'])//没有设默认,直接插入
			$ret = M('address')->add($data);
		else//先把所有的改为非默认,再插入
		{
			M('address')->where(array('mid'=>$data['mid']))->save(array('default'=>0));
			$ret = M('address')->add($data);
		}
	}else {//修改
		if($data['default'])//设默认,把其他的设为非默认
			M('address')->where(" `mid` = '".$data['mid']."' and id != ".$id)->save(array('default'=>0));
			$ret = M('address')->where(array('id'=>$id))->save($data);
	}
	return $ret;
}

3、前端地址设计的js

<div data-toggle="distpicker">
	<select name="prov" data-province="---- 选择省 ----"></select>
	<select name="city" data-city="---- 选择市 ----"></select>
	<select name="area" data-district="---- 选择区 ----"></select>
</div>
<script src="__PUBLIC__/js/distpicker.data.js"></script>
<script src="__PUBLIC__/js/distpicker.js"></script>