首先我发现实现点击下拉框中的选项跳转传递信息的功能是需要javascript实现的。于是我把相应代码拷过来,把跳转的地址改掉。接着我发现无法 把<option value=''>中value的值传过去,因为用’.'运算符没有任何用。于是又去看dede中的代码,原来js中要用’+‘来连接地址。由于省级和市级下拉框都需要用到js,而如果我使用同一个函数,则不好区分我传递的信息是哪一个,所以我用了两个函数,但是如果是一模一样的函数,只是最后的地址有一点不同的话,跳转总是会出现问题,无法正常传递信息。于是我又去看dede的代码,发现他有两个关于下拉框跳转的函数,一个是传递的id一个是传递的选项值。如图。

  

  然后,本来是准备写很多和函数的,由于在每个函数里都会用到sql语句,每个函数里我都得进行模型实例化,太麻烦了,想起在看ThinkCMF中上传头像的代码时,看见他在所有方法前创建了全局的变量来进行实例化,这样就不必写很多重复的代码了。如图。

  

  其次,在写的过程中,发现了一些要注意的地方,比如,在进行查询语句使用where()时,通常我们是要将int型与int型比较,可有时我们需要比较字符串,此时必须要在变量两边用双引号为其加上引号。还有如果我们只是需要找到一条信息,而此时使用select(),它返回的是二维数组,这里需要注意。而find方法是最多只会返回一条数据。

  最后,在显示市级区级时,我的省级下拉框处应该显示的是我已经选择的内容,也就是说,我已经选择了的省级我需要一直保存着,这里我用到了session。

  代码如下。

IndexadminController.class.php

  <?php
namespace Student\Controller;
use Common\Controller\AdminbaseController;

class IndexadminController extends AdminbaseController{
    protected $province_model;
    protected $city_model;
    protected $area_model;
    //系统Action类提供了一个初始化方法_initialize接口,可以用于扩展需要,_initialize方法
    // 会在所有操作方法调用之前首先执行
    function _initialize(){
        parent::_initialize();
    $this->province_model=D("Common/Province");
    $this->city_model=D("Common/City");
    $this->area_model=D("Common/Area");
    }
    
    function index(){
        $p=$this->province_model->select();
        $this->assign('p',$p);
        if($_GET['p']){
            $pro=$_GET['p'];    
            // var_dump($_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]);//输出当前完整URL
            //注意一下,tp的查询语句,生成的sql语句,查询的username=admin,这种格式的少了单引号
            $pselect=$this->province_model->where('province='."'".$pro."'")->select();
            $this->assign('ps',$pselect[0]);
            session('ps',$pselect[0]);
            $c=$this->city_model->where('father='.$pselect[0]['id'])->select();
            $this->assign('c',$c);
            }
            if($_GET['c']){
                $father=$_GET['c'];
                $cselect=$this->city_model->where('id='.$father)->select();
                $this->assign('cs',$cselect[0]);
                $a=$this->area_model->where('father='.$father)->select();
                $this->assign('a',$a);
                $this->assign('ps',session('ps'));
            }
            if($_POST){
                $area=$_POST['area'];$city=$_POST['city'];$province=$_POST['province'];
                $an=$this->area_model->where('id='.$area)->getField('area');
                $cn=$this->city_model->where('id='.$city)->getField('city');
                $pn=$this->province_model->where('id='.$province)->getField('province');
                $this->assign('pn',$pn);
                $this->assign('cn',$cn);
                $this->assign('an',$an);
            }    
        $this->display();
    }
}

index.html

<admintpl file="header" />
<script LANGUAGE="JavaScript">
function ChangePage(sobj)
{
    var ntxt = sobj.options[sobj.selectedIndex].text;
    if(sobj.options[sobj.selectedIndex].value==0)
    {
        location.href="{:U('Indexadmin/index')}";
    }
    else
    {
        var ns = ntxt.split('|');
        location.href="{:U('Indexadmin/index')}&p="+ns[0];
    }
}
function ChangePage2(sobj)
{
    var nv = sobj.options[sobj.selectedIndex].value;
    if(sobj.options[sobj.selectedIndex].value==0)
    {
        location.href="{:U('Indexadmin/index')}";
    }
    else
    {
        location.href="{:U('Indexadmin/index')}&c="+nv;
    }
}
</script>
</head>
<body class="J_scroll_fixed" style="min-width:800px;">
<div class="wrap J_check_wrap">
    <ul class="nav nav-tabs">
       <li class="active"><a href="{:U('Indexadmin/index')}">学生信息</a></li>
    </ul>
    <form action="{:U('Indexadmin/index')}" method="post">
        <table class="table table-hover table-bordered table-list">
    <select name="province" id="province" onChange="ChangePage(this)">
        <?php if(!$ps) { ?>
        <option value='0'>--省--</option>
        <?php } else { ?>
        <option value={$ps.id}>{$ps.province}</option>
        <?php } ?>
        <volist name='p' id='p'>
            <option value={$p.id}>{$p.province}</option>
        </volist>
        </select>

<select name="city" id="city" onChange="ChangePage2(this)">
        <?php if(!$cs) { ?>
        <option value='0'>--市--</option>
        <?php } else { ?>
        <option value={$cs.id}>{$cs.city}</option>
        <?php } ?>
            <volist name='c' id='c'>
            <option value={$c.id}>{$c.city}</option>
            </volist>
        </select>

<select name="area" id="area">
        <option value='0'>--区--</option>
            <volist name='a' id='a'>
            <option value={$a.id}>{$a.area}</option>
            </volist>
        </select>
        <input type='submit' value='提交'>

</table>
        </form>
        <?php if($pn&&$cn&&an){ ?>
        {$pn}-{$cn}-{$an}
        <?php } ?>
</div>
<script src="__ROOT__/statics/js/common.js"></script>
</body>
</html>

  效果如图。

  

  

  有很多地方写的很复杂,可能是因为我用的都是很简单的东西,所以复杂了,还有很多我不知道的很有效率的方法期待着我的探索。

...当该页面还有其他信息的时候要注意,跳转到新页面时其他信息要保存

PHP多级联动的学习(二)的更多相关文章

  1. PHP多级联动的学习(一)

    我尝试在ThinkCMF中实现多级联动,首先我开始看了dede的联动类别管理前后台的代码以及他的数据库,经过非常多次的尝试,我渐渐有了一点想法,并给予实施. 首先写出前台的界面.如图. 然后在数据库中 ...

  2. [ PHP+jQuery ] ajax 多级联动菜单的应用:电商网站的用户地址选择功能 ( 二 ) - 仿亚马逊下拉面板

    /** jQuery version: 1.8.3 Author: 小dee Date: 2014.11.8 */ 接上一篇博客. 实现带缓存的仿亚马逊下拉面板 效果图: 图1 初始 图2 点击省份 ...

  3. jQuery cxSelect 多级联动下拉菜单

    随着电商热门,这种多层次的互动更充分地体现在下拉菜单,最明显的是多级联动地址下拉选择,因此,这里是一个简单的分享 jQuery cxSelect 多级联动下拉菜单 cxSelect 它是基于 jQue ...

  4. js 多级联动(省、市、区)

      js 多级联动(省.市.区) CreateTime--2018年4月9日17:10:38 Author:Marydon 方式一: 数据从数据库获取,ajax实现局部刷新 方式二: 数据从json文 ...

  5. 微信小程序-多级联动

    微信小程序中的多级联动 这里用到的案例是城市选择器 先上代码: .wxml <view class="{{boxHide}}"> <view>{{nian} ...

  6. vue在多级联动时,一些情况不用watch而用onchange会更好

    onchange事件在内容改变且失去焦点时触发,因此在一些多级联动需要清空次级内容的时候,用onchange就非常有用了,尤其是浏览器会提前加载数据的情况下.有篇文章可以看一下,链接. PS:路漫漫其 ...

  7. emberjs学习二(ember-data和localstorage_adapter)

    emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用 ...

  8. ReactJS入门学习二

    ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...

  9. DropDownList的多级联动

    DropDownList的多级联动的问题最典型的案例就是实现省市级三级联动的案例,对这个问题的描述是当选中山东省之后,在选择市的下拉菜单时,市一栏只出现山东省下面的市.对于县也是同样的道理. 我也做的 ...

随机推荐

  1. 基础的jdbc连接数据库操作

    首先我们知道在数据库中,我们可以直接写sql或者直接通过数据库工具操作数据,但是在java程序中我们是不能直接操作数据库数据的,所以这就引入了jdbc操作. 百度百科:JDBC(Java Data B ...

  2. angularjs向后台传递数据,与后端进行交互

    angularjs之数据交互 function loadLeftFirstNodes (){ $http.get(sourceUrl,{ params:{ mpId: mpId, visits: ce ...

  3. scenejs的一点Cameras小笔记

    视图模式: 一如官网所见,这个cameras 是控制的视口的东西. 他有如下4个模式 1.orbit模式 鼠标拖中物体,切换视口观察物体,鼠标滚轮变换, 放大缩小可视范围. 2.orbit/spin模 ...

  4. I/O 函数总结

    经过一段时间的学习,发现字符处理时或者文件处理时,经常需要进行输入(读入)和输出,而可供选择的函数很多,现在反而容易搞混淆,下面就对常用的7个 输入输出函数 进行总结和比较,以便于区分和熟练掌握. 标 ...

  5. MATLAB求解代数方程、微分方程的一些常用指令

    MATLAB版本:R2015b 1.求解符号矩阵的行列式.逆.特征值.特征向量 A = sym('[a11, a12; a21, a22]');deltaA = det(A)invA = inv(A) ...

  6. ProtocolBuffers-3 For Objective C (2)-进阶

    先介绍几个常用关键字: equired前缀表示该字段为必要字段,既在序列化和反序列化之前该字段必须已经被赋值.与此同时,在Protocol Buffer中还存在另外两个类似的关键字,optional和 ...

  7. MYsql 数据库密码忘记(Window)

    之前想在自己的机器上搭建一个数据库,但是又怕占用内存太大,因此特地从网上下载了一个绿色版,免安装版本的,开始用着 还可以,后来重启机器发现悲催了,数据库用不了了, 决心好好整整Mysql 我的是 版本 ...

  8. iOS-APP提交上架流程(新手必看!2016年3月1日最新版)

    自己的经验总结,有错的话请留言,第一时间更改. 先大概说一下iOSAPP上架的几个步骤(详细步骤见下图): 创建证书请求文件 登录苹果开发者中心生成发布者证书(下载下来要双击一下) 设置APPID(要 ...

  9. 马氏距离(Mahalanobis distance)

    马氏距离(Mahalanobis distance)是由印度统计学家马哈拉诺比斯(P. C. Mahalanobis)提出的,表示数据的协方差距离.它是一种有效的计算两个未知样本集的相似度的方法.与欧 ...

  10. yii 验证问题

    yii 版本2.08 yii 验证码问题 1.模型里加入'verifyCode', 'captcha','message'=>'error','captchaAction' => 'tes ...