问题场景:有学生和老师两个界面,它们共用一个修改方法修改数据,这时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);