数据库与后台的连接

2017-11-22

前端与后台的互动无非是前端需要后台的数据来生成自己需要的页面,前端做出的框架需要后台的数据来填充,在没学习数据库之前,我们把前台上交的数据经过.txt文件来记录,然后需要用的时候,再读取.txt文件,这个方法并非长久之计,接下来学习的数据库就为我们解决了这个难题。
数据库无疑就是存储数据的地方,它们按照一定的规律存储在一起,让我们在需要的时候去获取,这才成为前后端的合作开发。下面是一个小栗子,一起来看如何从数据库获取数据并且向数据库添加数据。

思路

1.首先需要一个页面可以让用户添加菜单,即自定义菜的名字、价格、还有菜的照片。
2.上面的提交结果发送到php文件上,这个阶段需要把上传的菜的信息存储到数据库menu表中。
3.然后还需要一个页面生成菜单,即从menu表中获取全部的记录传送到桌面,并且设置菜单可选,以及菜单的份数可以输入。
4.把选中的菜单数据传送到orders表中保存。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//用户自定义菜单页面(addmenu.html)
<form action="addmenu.php" method="post" enctype="multipart/form-data">
菜名:<input type="text" name="name"></br>
价格¥:<input type="text" name="price"></br>
菜的照片:<input type="file" name="pic"></br>
<input type="submit" name="submit" value="上传菜单">
</form>
//接收自定义菜单数据并把数据保存在menu数据表中(addmenu.php)
if(!empty($_POST['submit'])){
if(!empty($_FILES['pic'])){
if($_FILES['pic'][type]=="image/jpeg" ||$_FILES['pic'][type]=="image/png"){
$result=move_uploaded_file($_FILES['pic']['tmp_name'],$_FILES['pic']['name']);
}
if($result){
$name=htmlspecialchars($_POST['name']);
$price=floatval($_POST['price']);
$pic=$_FILES['pic']['name'];
//接下来就是打开数据库,添加数据,关闭数据库
$link=mysqli_connect("localhost","root","","mydb");
//然后是数据库的连接错误处理
if(mysqli_connect_errno($link)){
echo "错误号:".mysqli_connect_errno($link);
echo "</br>错误描述:网站错误,请联系管理员".mysqli_connect_errno($link);
exit;
}else{
//编码处理
mysqli_set_charset($link,"utf8");
}
$sql="insert into menu (name,price,pic) values ('$name',$price,$pic);";
$result=mysqli_query($link,$sql);
//关闭连接
mysqli_close($link);
}
}
}

然后就是从menu数据表中获取全部的记录展示在前台页面上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
//从数据库中获取全部的数据展示在前台页面上生成菜单(menulist.html)
<form action="dingdan.php" method="post">
<div>菜单</div>
<table border="2" cellpadding="1" cellspacing="2">
<tr>
<th>勾选框</th>
<th>菜的照片</th>
<th>菜名</th>
<th>菜的单价</th>
<th>菜的份数</th>
</tr>
</table>
<input type="submit" name="submit" value="立即订餐">
</form>
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<script type="text/javascript">
$.ajax({
type:"post",
url:"listmenu.php",
data:{},
dataType:"json",
async:true,
success:function(data){
for(i in data){
var tr=document.createElement("tr");
tr.innerHTML="<td><input type='checkbox' name='menu_id[]' value='"+data[i]['Id']+"' /></td><td><img src='"+data[i]['pic']+" alt='lala'></td><td>"+data[i]['name']+"</td><td>¥"+data[i]['price']+"</td><td><input type="text" name='num_"+data[i]['Id']+"' /></td>";
$("table")[0].appendChild(tr);
}
}
});
</script>
//菜单页面的生成需要从menu数据表中读取数据(listmenu.php)
$link=mysqli_connect("localhost","root","","mydb");
if(mysqli_connect_errno($link)){
echo "错误号:".mysqli_connect_errno($link);
echo "</br>错误编码:网站错误,请联系管理员".mysqli_connect_errno($link);
exit;
}else{
mysqli_set_charset($link,"utf8");
}
$sql="select * from menu";
$result=mysqli_query($link,$sql);
//方法fetch_all返回结果集中所有的记录
//MYSQLI_ASSOC关联数组下标 || MYSQLI_NUM数字下标 || MYSQLI_BOTH数字下标和关联数组下标
$data=mysqli_fetch_all($result,MYSQLI_ASSOC);
echo json_encode($data);
mysqli_close($link);
//菜单页面提交订单数据给(dingdan.php),并把数据存储在orderlist数据表中
if(!empty($_POST['submit'])){
$menu_id=$_POST['menu_id'];
//打开数据库连接
$link=mysqli_connect("localhost","root","","mydb");
if(mysqli_connect_errno($link)){
echo "错误号:".mysqli_connect_errno($link);
echo "错误描述:网站错误,请联系管理员 ".mysqli_connect_errno($link);
exit;
}else{
mysqli_set_charset($link,"utf8");
}
foreach($menu_id as $key => $val){
$menuid=intval($val);
$amount=intval($_POST['num_.$menuid']);
//根据传过来的id值先查出整条记录
$sql="select name,price from menu where id=".$menuid;
$result=mysqli_query($link,$sql);
//此方法返回查找的记录结果,关联下标
$row=mysqli_fetch_assoc($result);
$fields=array(
'name'=>$row['name'],
'price'=>$row['price'],
'amount'=>$amount,
'createDate'=>date("Y-m-d H:i:s");
);
//定义一个函数用来插入数据记录
function insert($link,$fields,$table){
$sql="insert into ";
$sql.=$table." set ";
$string="";
foreach($fields as $key => $val){
$string.=$key."=".$val.",";
}
$string=trim($string,",");
$sql.=$string;
mysqli_query($link,$sql);
}
//然后调用该函数
insert($link,$fields,"orderlist");
}
}
//最终的结果就是在orderlist数据表中可以看到订餐数据记录。

🤡🤡🤡🤡