ホームページ > バックエンド開発 > PHPチュートリアル > php+mysql+ajax県市の3階層連携メニューについて、教えてください。

php+mysql+ajax県市の3階層連携メニューについて、教えてください。

WBOY
リリース: 2016-06-23 13:53:30
オリジナル
934 人が閲覧しました

やあ、また行きます。今回は、道市における三段階連携メニューの問題についてです。インターネット上でそのようなコードをたくさん見つけましたが、ほとんどはデータを js に入れていました。上司は「いいえ、データベースに接続する必要がある」と言ったので、CSDN フォーラムでデータベースを持っている人を見つけました。しかし、それは使いにくいです。後で上司が、各州と市に 1 つずつ、それぞれ 1 つの ID を持つ 3 つのテーブルを持ったデータベースをくれました。市と地区には、その市の親 ID があります。州の ID、地区の ID です。親 ID は都市 ID です。次に、ajax を使用して 3 レベルのリンケージ効果を作成します。彼はそれがとても簡単だと言いましたが、私は ajax を知りません。誰か助けてくれないかな。昨日はこれのためだけに8時過ぎまで残業してしまいました こんなに遅くまで残業したのは大学卒業以来初めてでした… これは昨日の仕事で、今日の仕事がまだ残っているので。もう先延ばしにすることはできません。お願いします。


ディスカッションへの返信 (解決策)

http://blog.csdn.net/sangliu/article/details/8674886
http://blog.csdn.net/ykm0722/article/details/6064559
http ://www.cnblogs.com/freespider/archive/2010/08/30/1812669.html

他の人はあなたに N 回言いました、なぜ自分でやらないのですか。

http://download.csdn.net/detail/jam00/5079966
またはメールを残していただければ、直接送信されます

http://download.csdn.net/detail/jam00/5079966
またはメールを残してください 直接あなたに送信されます


ありがとう、私には本当にポイントがありません。 894563420@qq.com

http://blog.csdn.net/sangliu/article/details/8674886
http://blog.csdn.net/ykm0722/article/details/6064559
http://www. cnblogs.com/freespider/archive/2010/08/30/1812669.html

他の人が N 回言った、自分でやったらどうですか。

そうですね、インターネットで純粋な js を見つけて静的ページに配置しましたが、まだ動作します。しかし、それをプロジェクトに組み込むと機能しません。データは表示されません。 Firefox でデバッグすると、area.js と location.js がそれぞれ showLocation(province, city, town) 関数と
function Location() 
ログイン後にコピー
関数を宣言していることがわかります。Baidu で確認したところ、
$(document).ready(function() {
ログイン後にコピー
は次のことを意味します。「ページが正常に読み込まれた後、ページ内のすべてのリンクがその関数を読み込みます。」 「クリック」イベントが発生したとき私は JS の初心者です、いくつかの指導をお願いします...

http://blog.csdn.net/sangliu/article/details/8674886
http://blog.csdn.net/ykm0722/article /details/6064559
http://www.cnblogs.com/freespider/archive/2010/08/30/1812669.html

他の人が N 回言ったのなら、自分でやってみませんか。

ああ、これは HTML ページです。
area.js
        <script language="JavaScript" src="area.js"></script>		<script language="JavaScript" src="location.js"></script>		<div class="main">        <select id="loc_province" name="sheng" style="width: 80px;"></select>        <select id="loc_city" name="shi" style="width:100px;"></select>        <select id="loc_town" name="qu" style="width:120px;"></select>        <input type="hidden" name="location_id" />        </div>  
ログイン後にコピー
location.js
function showLocation(province , city , town) {		var loc	= new Location();	var title	= ['省份' , '地级市' , '市、县、区'];	$.each(title , function(k , v) {		title[k]	= '<option value="">'+v+'</option>';	})		$('#loc_province').append(title[0]);	$('#loc_city').append(title[1]);	$('#loc_town').append(title[2]);			$('#loc_province').change(function() {		$('#loc_city').empty();		$('#loc_city').append(title[1]);		loc.fillOption('loc_city' , '0,'+$('#loc_province').val());		$('#loc_town').empty();		$('#loc_town').append(title[2]);		//$('input[@name=location_id]').val($(this).val());	})		$('#loc_city').change(function() {		$('#loc_town').empty();		$('#loc_town').append(title[2]);		loc.fillOption('loc_town' , '0,' + $('#loc_province').val() + ',' + $('#loc_city').val());		//$('input[@name=location_id]').val($(this).val());	})		$('#loc_town').change(function() {		$('input[@name=location_id]').val($(this).val());	})		if (province) {		loc.fillOption('loc_province' , '0' , province);				if (city) {			loc.fillOption('loc_city' , '0,'+province , city);						if (town) {				loc.fillOption('loc_town' , '0,'+province+','+city , town);			}		}			} else {		loc.fillOption('loc_province' , '0');	}		}
ログイン後にコピー

データベースの使い方を知っている人はいますか?

知っている人がいたら、私のメールに送ってください。ありがとう 2969978505@qq.com

http://blog.sina.com.cn/s/blog_49ea36420100t1ji.html

この例については js を見てください。サーバー側で実行します ネイティブ PHP コード クエリを作成します。
わからない質問がある場合は、投稿してください

http://www.helloweba.com/view-blog-188.html
http://www.helloweba.com/demo/cityselect /

これはjsで実装されており、効果はすぐに現れます。

http://blog.sina.com.cn/s/blog_49ea36420100t1ji.html

この例では、サーバー側でクエリを実行するネイティブ php コードを作成できます。
理解できない質問がある場合は、もう一度投稿してください

私は上記の兄弟のメールアドレスから送られてきたコードを使用しました。問題は、クエリされた州のデータがすべて「???」であることです。データベースのエンコーディングは UTF8 で、私の php のエンコーディングも UTF8 ですが、なぜこの問題が発生するのかわかりません。また、コードをプロジェクトに挿入すると、州のみがデータを持ちますが、そのデータは市や地区ではクエリできません。理由はわかりません。

ネイティブ JS コードは 20 行を超えません。 jqueryは4行を超えることはなく、データ構造がうまく設計されていれば1行で十分です

PHP部分はデータベース接続をカウントしないので、コードは3〜4行だけです

それほど複雑ではありません、 右?ある日。まだ手がかりがありません

http://blog.sina.com.cn/s/blog_49ea36420100t1ji.html


この例では、サーバー側でネイティブ php を書くことができます。クエリするコード。
分からない質問があれば、投稿してください
ページに載せるとデータを問い合わせることができますが、それだけでしょうか? 私のプロジェクトに入れると、地方のデータのみが表示されます

function Location() {	this.items	= {	'0':{1:'北京市',22:'天津市',44:'上海市',66:'重庆市',108:'河北省',406:'山西省',622:'内蒙古',804:'辽宁省',945:'吉林省',1036:'黑龙江省',1226:'江苏省',1371:'浙江省',1500:'安徽省',1679:'福建省',1812:'江西省',1992:'山东省',2197:'河南省',2456:'湖北省',2613:'湖南省',2822:'广东省',3015:'广西',3201:'海南省',3235:'四川省',3561:'贵州省',3728:'云南省',3983:'西藏',4136:'陕西省',4334:'甘肃省',4499:'青海省',4588:'宁夏',4624:'新疆',4802:'香港',4822:'澳门',4825:'台湾省'},	'0,1':{2:'北京市'},.............};}Location.prototype.find	= function(id) {	if(typeof(this.items[id]) == "undefined")		return false;	return this.items[id];}Location.prototype.fillOption	= function(el_id , loc_id , selected_id) {	var el	= $('#'+el_id);		var json	= this.find(loc_id);		if (json) {		var index	= 1;		var selected_index	= 0;		$.each(json , function(k , v) {			var option	= '<option value="'+k+'">'+v+'</option>';			el.append(option);						if (k == selected_id) {				selected_index	= index;			}						index++;		})		el.attr('selectedIndex' , selected_index);	}}
ログイン後にコピー
これは HTML
script type="text/javascript">//创建AJAX 引擎function getXmlHttpObject(){	var XmlHttpRequest;	if(ActiveXObject){		//ie		XmlHttpRequest=new ActiveXObject("Microsoft.XMLHTTP");	}else{		//火狐,opera		XmlHttpRequest=new XMLHttpRequest();	}	return XmlHttpRequest;}var myXmlHttpRequest="";//根据省级信息获取城市function getCities(){	myXmlHttpRequest=getXmlHttpObject();	if(myXmlHttpRequest){		var url="showCitiesPro.php";//post方式		var data="type=city&province="+$('province').value;		myXmlHttpRequest.open("post",url,true);//异步		myXmlHttpRequest.setRequestHeader("content-type","application/x-www-form-urlencoded");		//指定回调函数		myXmlHttpRequest.onreadystatechange=chuliCity;		//发送		myXmlHttpRequest.send(data);	}}function chuliCity(){	if(myXmlHttpRequest.readyState==4){		//status==200 才是真正的成功		if(myXmlHttpRequest.status==200){			//取出服务器回送的数据			var cities=myXmlHttpRequest.responseXML.getElementsByTagName("name");			var codes=myXmlHttpRequest.responseXML.getElementsByTagName("code");			//每次执行都将id为city的select长度清零			$('city').length=0;			var myOption=document.createElement("option");			myOption.innerText="---城市---";			$('city').appendChild(myOption);			//遍历并取出城市			for(var i=0;i<cities.length;i++){				var city_name=cities[i].childNodes[0].nodeValue;				var city_code=codes[i].childNodes[0].nodeValue;				//创建新的元素option				var myOption=document.createElement("option");				myOption.value=city_code;				//赋文本				myOption.innerText=city_name;				//添加到 id为city的select里				$('city').appendChild(myOption);			}		}	}}//根据市级获取县级function getArea(){	myXmlHttpRequest=getXmlHttpObject();	if(myXmlHttpRequest){		var url="showCitiesPro.php";//post方式		var data="type=area&city="+$('city').value;		myXmlHttpRequest.open("post",url,true);//异步		myXmlHttpRequest.setRequestHeader("content-type","application/x-www-form-urlencoded");		//指定回调函数		myXmlHttpRequest.onreadystatechange=chuliArea;		//发送		myXmlHttpRequest.send(data);	}}function chuliArea(){	if(myXmlHttpRequest.readyState==4){		//status==200 才是真正的成功		if(myXmlHttpRequest.status==200){			//取出服务器回送的数据			var cities=myXmlHttpRequest.responseXML.getElementsByTagName("name");			var codes=myXmlHttpRequest.responseXML.getElementsByTagName("code");			//每次执行都将id为city的select长度清零			$('area').length=0;			var myOption=document.createElement("option");			myOption.innerText="---县城---";			$('area').appendChild(myOption);			//遍历并取出城市			for(var i=0;i<cities.length;i++){				var city_name=cities[i].childNodes[0].nodeValue;				var city_code=codes[i].childNodes[0].nodeValue;				//创建新的元素option				var myOption=document.createElement("option");				myOption.value=city_code;				//赋文本				myOption.innerText=city_name;				//添加到 id为area的select里				$('area').appendChild(myOption);			}		}	}}//获取对象的函数function $(id){	return document.getElementById(id);}</script>
ログイン後にコピー
の JS コードです

原生 js 代码不超过 20 行
用 jquery 不超过 4 行,如果数据结构设计的好,一行也就可以了

php 部分不算数据库连接,也就 3、4 行代码吧

不至于搞得那么复杂吧?一天了。还没头绪

哎,主要是js的一点都不会啊,php也是半吊子。求大神给个js代码被,网上弄的都是一放到我的项目里就不好用了。关于php的给我个思路我自己弄也可以啊。我的数据库的结构就是省市区分三个表,每个表都有一个id,一个名字。市和区各有一个父id,市的父id就是省的id,区的父id就是市的id

php 部分

//连接mysql并选择库switch($_POST['type']) {  case 'shi':     $tbl = '市表';     $where = "pid='$_POST[id]'";     break;  case 'xian':     $tbl = '县表';     $where = "pid='$_POST[id]'";     break;  default:     $tbl = '省表';     $where = "1";}$sql = "select concat('<option value=\"', id, '\">', name,  '</optipn') from $tbl where $where";$rs = mysql_query($sql);while(list($r) = mysql_fetch_row($rs)) $row[] = $r;echo join('', $row);
ログイン後にコピー
ログイン後にコピー


js 部分 需加载 jquery
$(function() {  $('#sheng').change(function() {     $('#shi').load(url, {type:'shi', id:$(this.val()});  });  $('#shi').change(function() {     $('#xian').load(url, {type:'xian', id:$(this.val()});  });  $('#sheng').load(url, {type:sheng'});});
ログイン後にコピー
ログイン後にコピー

HTML部分
<select id="sheng"><option value="">---省---</option></select><select id="shi"><option value="">---市---</option></select><select id="xian"><option value="">---县---</option></select>
ログイン後にコピー
ログイン後にコピー

php 部分

//连接mysql并选择库switch($_POST['type']) {  case 'shi':     $tbl = '市表';     $where = "pid='$_POST[id]'";     break;  case 'xian':     $tbl = '县表';     $where = "pid='$_POST[id]'";     break;  default:     $tbl = '省表';     $where = "1";}$sql = "select concat('<option value=\"', id, '\">', name,  '</optipn') from $tbl where $where";$rs = mysql_query($sql);while(list($r) = mysql_fetch_row($rs)) $row[] = $r;echo join('', $row);
ログイン後にコピー
ログイン後にコピー


js 部分 需加载 jquery
$(function() {  $('#sheng').change(function() {     $('#shi').load(url, {type:'shi', id:$(this.val()});  });  $('#shi').change(function() {     $('#xian').load(url, {type:'xian', id:$(this.val()});  });  $('#sheng').load(url, {type:sheng'});});
ログイン後にコピー
ログイン後にコピー

HTML部分
<select id="sheng"><option value="">---省---</option></select><select id="shi"><option value="">---市---</option></select><select id="xian"><option value="">---县---</option></select>
ログイン後にコピー
ログイン後にコピー

那个加载jquery是不是在页头加一个

是的,当然你要有,且路径正确

是的,当然你要有,且路径正确

再问你个事情呗,就是我把你给的三段代码都放在了html里面,然后也面上放php代码的地放就把省里面的所有数据都循环出来了,
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />{$css}{$js}<!--<script type="text/javascript">//创建AJAX 引擎function getXmlHttpObject(){	var XmlHttpRequest;		//火狐,opera		XmlHttpRequest=new XMLHttpRequest();	return XmlHttpRequest;}var myXmlHttpRequest="";//根据省级信息获取城市function getCities(){	myXmlHttpRequest=getXmlHttpObject();	if(myXmlHttpRequest){		var url="__PUBLIC__/showCitiesPro.php";//post方式		var data="type=city&province="+$('province').value;		myXmlHttpRequest.open("post",url,true);//异步		myXmlHttpRequest.setRequestHeader("content-type","application/x-www-form-urlencoded");		//指定回调函数		myXmlHttpRequest.onreadystatechange=chuliCity;		//发送		myXmlHttpRequest.send(data);	}}function chuliCity(){	if(myXmlHttpRequest.readyState==4){		//status==200 才是真正的成功		if(myXmlHttpRequest.status==200){			//取出服务器回送的数据			var cities=myXmlHttpRequest.responseXML.getElementsByTagName("name");			var codes=myXmlHttpRequest.responseXML.getElementsByTagName("code");			//每次执行都将id为city的select长度清零			$('city').length=0;			var myOption=document.createElement("option");			myOption.innerText="--城市--";			$('city').appendChild(myOption);			//遍历并取出城市			for(var i=0;i<cities.length;i++){				var city_name=cities[i].childNodes[0].nodeValue;				var city_code=codes[i].childNodes[0].nodeValue;				//创建新的元素option				var myOption=document.createElement("option");				myOption.value=city_code;				//赋文本				myOption.innerText=city_name;				//添加到 id为city的select里				$('city').appendChild(myOption);			}		}	}}//根据市级获取县级function getArea(){	myXmlHttpRequest=getXmlHttpObject();	if(myXmlHttpRequest){		var url="showCitiesPro.php";//post方式		var data="type=area&city="+$('city').value;		myXmlHttpRequest.open("post",url,true);//异步		myXmlHttpRequest.setRequestHeader("content-type","application/x-www-form-urlencoded");		//指定回调函数		myXmlHttpRequest.onreadystatechange=chuliArea;		//发送		myXmlHttpRequest.send(data);	}}function chuliArea(){	if(myXmlHttpRequest.readyState==4){		//status==200 才是真正的成功		if(myXmlHttpRequest.status==200){			//取出服务器回送的数据			var cities=myXmlHttpRequest.responseXML.getElementsByTagName("name");			var codes=myXmlHttpRequest.responseXML.getElementsByTagName("code");			//每次执行都将id为city的select长度清零			$('area').length=0;			var myOption=document.createElement("option");			myOption.innerText="---县城---";			$('area').appendChild(myOption);			//遍历并取出城市			for(var i=0;i<cities.length;i++){				var city_name=cities[i].childNodes[0].nodeValue;				var city_code=codes[i].childNodes[0].nodeValue;				//创建新的元素option				var myOption=document.createElement("option");				myOption.value=city_code;				//赋文本				myOption.innerText=city_name;				//添加到 id为area的select里				$('area').appendChild(myOption);			}		}	}}//获取对象的函数function $(id){	return document.getElementById(id);}</script>--><script type="text/javascript">$(function() {	  $('#sheng').change(function() {	     $('#shi').load(url, {type:'shi', id:$(this.val()});	  });	  $('#shi').change(function() {	     $('#xian').load(url, {type:'xian', id:$(this.val()});	  });	 	  $('#sheng').load(url, {type:sheng'});	});</script></head><body><?php//连接mysql并选择库switch($_POST['type']) {  case 'shi':     $tbla = 'city';     $wherea = "provincecode='$_POST[code]'";     break;  case 'xian':     $tbla = 'area';     $wherea = "citycode='$_POST[code]'";     break;  default:     $tbla = 'province';     $wherea = "1";}$sql = "select concat('<option value=\"', code, '\">', name,  '</optipn') from $tbla where $wherea";$rsa = mysql_query($sql);while(list($r) = mysql_fetch_row($rsa)) $row[] = $r;echo join('', $row);?><div class="page_function">  <div class="info">    <h3>帮帮{$action_name}</h3>  </div></div><div class="page_form"><form action="__URL__/{$action}_save/time-<?php echo time(); ?>-ajax-true" method="post" id="form"><div class="page_table form_table">    <table width="100%" border="0" cellspacing="0" cellpadding="0">         <tr>     <?php if(!isset($info['familyOrShop'])){ $info['familyOrShop']=1; } ?>     <input name="familyOrShop" type="radio" value="1" <!--if:{$info['familyOrShop']==1}--> checked="checked" <!--{/if}--> />       家庭       <input name="familyOrShop" type="radio" value="0" <!--if:{$info['familyOrShop']==0}--> checked="checked" <!--{/if}--> />        店铺 </td>        </tr>            <tr>        <td width="120">价格</td>        <td width="300">        <input name="price" type="text" class="text_value" id="price" value="{$info.price}" reg="(-?\d*)\.?\d+" msg="请输入正确的价格" />        </td>      </tr>       <tr>        <td width="120">姓名</td>        <td width="300">        <input name="name" type="text" class="text_value" id="name" value="{$info.name}" reg="\S" msg="姓名不能为空" />        </td>      </tr>       <tr>        <td width="120">内容</td>        <td width="300">        <input name="content" type="text" class="text_value" id="content" value="{$info.content}" reg="\S" msg="内容不能为空" />        </td>      </tr><tr>        <td width="120">联系方式</td>        <td width="300">        <input name="telephone" type="text" class="text_value" id="telephone" reg="(^(\d{3,4}-)?\d{7,8})$|(13[0-9]{9})" msg='请输入正确的电话号码' value="{$info.telephone}" />        </td>      </tr>       <tr>        <td width="120">城市</td>        <td width="300">        <!--<select id="province" onChange="getCities();" name="province">	<option value="">---省---</option>	<?php		require_once(CP_PATH.'ext/process.php'); 		getProvince();	?>     </select>     <select id="city" onChange="getArea();" name="city">	 <option value="">---城市---</option>     </select>     <select id="area" name="area">	 <option value="">---县城---</option>     </select> -->     <select id="sheng">			<option value="">---省---</option>		</select> <select id="shi">			<option value="">---市---</option>		</select> <select id="xian">			<option value="">---县---</option>		</select>     </td>        </tr> 		    </table><div class="form_submit"><input name="id" type="hidden" value="{$info.id}" /><button type="submit" class="button">保存</button> </div></form></div><script type="text/javascript">function checkForm(){	if(!document.getElementById || !document.createTextNode) return false;	var utel=document.getElementById("utel");	var str=utel.value;	var errors=document.getElementById("myError");	var regPartton=/1[3-8]+\d{9}/;	if(!str || str==null){		erros.innerHTML="手机号码不能为空!";		utel.focus();		return false;	}else if(!regPartton.test(str)){		errors.innerHTML="手机号码格式不正确!";		utel.focus();		return false;	}else{		errors.innerHTML.nodeValue="";		return true;	}}</script></body>
ログイン後にコピー
我看php的代码最后把数据echo了一下,所以页面上会出现省的数据。但是怎么给她放到下拉菜单里面的。还有我这个网站使用cms做的,是不是就不用加载jquery了。


http://download.csdn.net/detail/jam00/5079966
或者留个邮箱直接发给你


谢了,真的没有积分了。894563420@qq.com
给你一个实际在线的例子吧 www.35dalu.com/info/fabu 看看里面有2个省市区 三级联动。


http://download.csdn.net/detail/jam00/5079966
或者留个邮箱直接发给你


谢了,真的没有积分了。894563420@qq.com 啥也不说了,分都给你了

谢谢大家的指导了,但是jam00这位仁兄在QQ邮箱上不厌其烦的指导,终于让我弄出来了,所以只有把分给他了

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート