问题场景:有学生和老师两个界面,它们共用一个修改方法修改数据,这时get请求传递给后端的数据就不一样了。例如原来一行的数据是这样的
//这是学生原来的数据 stu={sno:'10001',sname:'张三',ssex:'男'} //这是老师原来的数据 tea={tno:'0001',tname:'郭靖',ssex:'男'}现在我要发送get请求给后台(我这里后台是php)要求改成这样
//这是学生要修改的数据 newStu={sno:'10001',sname:'王五',ssex:'女'} //这是老师要修改的数据 newTea={tno:'0001',tname:'王重阳',ssex:'男'}由于它们共用一个修改方法
update(){ this.$http.get('xuanke/Admin/update.php',{ params:{ //由于键值不一样,这里怎么把要修改的数据传到后台 } }).then(res=>{ console.log(res.data) }) },思考了一下,params是一个object,stu、tea也是一个object,或许可以修改的时候把值赋给一个对象
var data={}; //学生修改的时候 data=newStu //老师修改的时候 data=newTea update(){ this.$http.get('xuanke/Admin/update.php',{ params:data//注意这里 }).then(res=>{ console.log(res.data) }) },事实证明确实可以 那么问题又来了,后台php怎么接收数据,$_GET[’’]用不了啊,因为传递的参数都是不确定的,有可能传过来的是要修改的学生数据,也有可能传过来的是要修改的老师数据。
$_GET[’’]不能用,那我们是不是可以取url地址
$serve=$_SERVER['QUERY_STRING']; echo $serve //如果中文是乱码的话可以这样 //$serve=urldecode($_SERVER['QUERY_STRING']);取出来是这样的 接下来给他处理一下
$data=preg_split('/[=&]/',$serve);//按符号&和=切割为数组,这里用的正则 //结果就像是这样的 ['sno','10001','sname','张三','ssex','男']在遍历一下,弄成关联数组那样
$arr=array(); for($i=0;$i<count($data);$i+=2) { $arr[$data[$i]]=$data[$i+1]; } //就像这样的 arr('sno'=>'10001','sname'=>'张三','ssex'=>'男') //这样我们就可以很随便调用值了 arr['sno'] arr['sname'] arr['ssex']但是还是有个问题,php里怎么区分是哪个页面发来的请求,然后根据不同的情况执行update语句 细心的同学可以看到我echo $serve的时候有个table=teacher
var data={}; //学生修改的时候 data=newStu data.table='student' //老师修改的时候 data=newTea data.table='teacher' update(){ this.$http.get('xuanke/Admin/update.php',{ params:data//注意这里 }).then(res=>{ console.log(res.data) }) },这样我们就可根据不同的table执行不同的操作了
switch ($arr['table']){ case 'teacher': $sql="update teacher set tname='".$arr['tname']."',tphone='".$arr['tphone']."',tsex='".$arr['tsex']."'"; break; case 'student': $sql="update student set "; break; } mysqli_query($conn,$sql);