———-第一次修改(2018.8.4 15:35)
emmmm,现在已经能够从html页面和php页面进行数据传输,
现在要解决的是前端的页面根据数据库信息进行变化
我先用赋值的方式(大佬教我的方法)让函数获得每一个座位的属性,结果发现不能链接php文件(或许可以,但是我不知道,哭)
因为代码被删除,就不贴过来了
后来我用了click的this方法,获取了点击的对象。
代码如下:
$(function()//建立一个函数
{
$(".img").click(function(){
//创造一个对于class为img的对象的一个点击函数
var seat_num = $ (this).attr("name");//获取当前点击对象的name
这样,就可以获得点击的对象的name值,然后我把name值通过ajax异步传输传给了php文件,由php写给数据库,表明所占的位置的位置号,
再通过php返回是否写入数据库来进行下一步的操作
当成功写入数据时,php返回一个flag值,来让js执行下一步的操作
代码如下:
<?php
header("content-type:text/html;charset=utf-8");
$seat=$_GET['seat_num'];
//$flag=$_GET['flag'];
//var_dump($_GET);
//修改前连接数据库
$link = mysql_connect('localhost' , 'root','1528303964');
if(!$link){
exit('数据库连接失败');
}
mysql_set_charset('utf8');//设置字符就
mysql_select_db('ceshi');
//确认座位//
$sql = "update ceshi.ceshi1 set seat='$seat' where Id=1";
$obj = mysql_query($sql);
if ($obj)//判断是否执行sql语句
{
echo 1;
$sql = "update ceshi.ceshi1 set flag1=1 where Id=1";//座位标号1
$obj = mysql_query($sql);
}else
{
echo 0;
$sql = "update ceshi.ceshi1 set flag1=0 where Id=1";//座位标号0
$obj = mysql_query($sql);
}
mysql_close($link);
?>
这段php的意思是先获得传入的数据即座位号,再学到数据库的seat下,
如果写入成功。则返回flag=1,并把flag值写到数据库,如果座位号写入失败,则返回0,同样也把此flag值写到数据库中。
然后,js就根据返回的flag是1还是0来进行操作,
代码如下:
xmlhttp.onreadystatechange=function(){//onreadystatechange此函数意思为当服务器响应
//已经做好被处理的准备是做出的响应
if (xmlhttp.readyState==4 && xmlhttp.status==200){//readystate的值为4或status为200时代表服务器可以与之通信
var flag1 = xmlhttp.responseText;
alert(flag1);
if(flag1){
element=document.getElementsByName(seat_num);
if(element[0].src.match("no")){
alert('此座位未占');
if(confirm('此座位未占,是否需要占座?')){
element[0].src="yes.png";
var flag_2=1;
第一步,先获取从php文件传回来的flag值,用if进行判断,若为1,
则执行占座代码,若为0。则提示占座失败。这样就完成了占座的过程,
然后后面要进行的是取消占座的过程,之前我一直在上面这段函里面执行代码,设置另一个flag_2;和座位号一起传到php文件中,确始终报错,找了一上午的bug一直没找出来,后来终于发现了当传输数据的语句发生作用是,flag_2根本就没有定义,因为我的flag_2是在获得座位号后的函数里面定义的,所以就根本无法传输、
所以我又内嵌了一个函数,代码如下:
function cheak(flagg){
if (window.XMLHttpRequest){
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xmlhttp=new XMLHttpRequest();
}
else {
// IE6, IE5 浏览器执行代码
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){//onreadystatechange此函数意思为当服务器响应
//已经做好被处理的准备是做出的响应
if (xmlhttp.readyState==4 && xmlhttp.status==200){//readystate的值为4或status为200时代表服务器可以与之通信
var flag_2;
if(flagg==1){
flagg=xmlhttp.responseText;
if(flagg==0)
{
element[0].src="no.png";
alert("取消成功");
}
else{
alert("flag_2不等于0;取消占座失败")
}
}
else{
alert("传输数据错误。取消占座失败")
}
}
}
xmlhttp.open("GET","一楼1.php?flag="+flagg,true);
xmlhttp.send();//请求方式为post才有用
}
这段代码由以下代码调用
else if(element[0].src.match('yes')){
if(confirm('此座位已被占,是否取消占座?(点击确定取消占座)')){
cheak(flag1);
这段代码的意思是
当被点击的座位是被占着的,弹出一个窗口,点击确定返回1,点击取消返回0;
当确定取消占座后,执行下一个函数即上上个代码块
那个代码块的意思是,从调用函数的代码那获得当前flag值,
如果flag=1,则把这个flag值传入php文,如果不为1,则弹出取消占座失败的窗口、
此php文件代码如下
<?php
header("content-type:text/html;charset=utf-8");
$flag1=$_GET['flag'];
//var_dump($_GET);
//修改前连接数据库
$link = mysql_connect('localhost' , 'root','1528303964');
if(!$link){
exit('数据库连接失败');
}
mysql_set_charset('utf8');//设置字符就
mysql_select_db('ceshi');
//确认座位//
$sql = "update ceshi.ceshi1 set flag1=0 where Id=1";
$obj = mysql_query($sql);
if ($obj)//判断是否执行sql语句
{
echo 0;
}else
{
echo 1;
}
mysql_close($link);
?>
这段代码的意思是先获取flag值,由于js中已经判定,所以此flag值一定等于1,所以通过sql语句把flag值更改为0;
当确定更改成功后。php文件返回flag=0的值
当php返回值后,js中的flagg就等于0;判断是否等于0来执行UI上的取消占座操作,否则弹出在取消占座失败
(注。。。。。此函数代码和php代码在编写过程中一次性通过,没有bug!!宛如天人!)
这就实现了占座和取消占座与数据库相关联的操作