知名网站建设定制基于PHP、Mysql的电影院售票系统

 一、系统特色

(一)、系统角色

        分为用户端管理员端以及游客端知名网站建设定制三大参与者。知名网站建设定制如下图所示:

(二)、系统特色

        1.可以使用PHPExecl知名网站建设定制插件来批量读取本地存储中的execl知名网站建设定制表格进行添加电影信息,知名网站建设定制也可以反操作下载数据知名网站建设定制库中的电影信息以表格知名网站建设定制的方式读取出来;

        2.大量使用Php嵌入JavaScript以及Html知名网站建设定制的格式化语句;

        3.知名网站建设定制采用与定时器,知名网站建设定制设置电影过时间则不可知名网站建设定制购买的效果。

二、需求分析

        1.关于用户,知名网站建设定制即包括游客、知名网站建设定制普通用户和管理员三个知名网站建设定制角色的注册、知名网站建设定制登录与修改删除,知名网站建设定制并加以后台数据化管理;

        2.知名网站建设定制关于电影与影院的增删改查,知名网站建设定制管理员可以根据当前情知名网站建设定制况进行实时分析,知名网站建设定制确认是否有该电影或影院的存在;

        3.知名网站建设定制关于放映计划安排的增删改查,知名网站建设定制管理员可以根据电影ID与影院ID知名网站建设定制进行多表查询;

        4.知名网站建设定制关于座位的订购,知名网站建设定制用户可以根据放映安排编号对每一部电影、每一个影院、每一个影厅的不同情况进行分别操作;

        5.关于用户订票的查询,用户可以通过查询个人信息界面进行添加与删除;

        6.管理员可以查询到所有用户、电影、影院、放映安排与座位订购的信息;

        7.所有角色都可以根据信息界面修改自己的用户名与密码,或者查看系统电影资讯。

三、总体设计

(一)、概念设计

        根据电影院管理的设计理念,将上述需求分析阶段得到的功能需求进行分析、总结、归纳,得到该管理系统的实体以及实体属性,并在这里采用E-R图的方式抽象成信息结构即概念模型,其中根据实体间联系,如下图所示:

(二)、逻辑设计

关系模式(关系模型)

1.用户(用户ID,用户名,密码,用户头像路径);

2.管理员(管理员ID,管理员姓名,密码);

3.电影(电影ID,电影中文名,电影英文名,上映时间,清晰度,国籍,电影描述,电影封面图片路径,海报图片路径,主演人员,电影类型);

4.影院(影院ID,影院名称,影院类型,影院地址,影院距离,影院最低消费);

5.放映安排(放映安排ID,起止时间,放映版本,价格,影厅ID,影院ID,电影ID);

6.座位(座位ID,用户ID,放映安排ID,座位行数,座位列数);

(三)、物理设计

        通过关系模型,我们能进一步确立实体间的相互关系,从而方便我们进行下一步操作,按照存储结构和存取方法我们构成了数据库物理结构,这里主要根据我们总结得出的关系模型,进行表结构的建立,做出具体表格结构示意图,由于系统结构庞大,表格体现选择以电影信息表的部分典型字段为例,如下所示:

字段名

数据类型

长度

是否允许null值

约束

备注

movie_id

Int

20

主键

电影编号

movie_name

Char

100

电影名称

movie_type

Char

100

电影类型

movie_definition

Char

100

电影清晰度

movie_time

Char

100

电影上映时间

movie_image

Char

100

电影封面图片

        根据上述的需求分析,以及功能的确认与设计,我们这里采用架构的理解模式,即在正式开始功能实现之前,对整体架构有一个模型似的认识,对每一个分区的实现效果进行区分,方便后期对项目制作时间的可行性分配,因此,这里我们采用常和数据库E-R图配套出线的总体设计图,来展示后面对过程中每一分区的功能实现。

四、详细设计

(一)、游客界面的设计

        这里未登录的游客可以查看首页信息,而如若想跳转其他信息界面则会提示先登录后跳转到登录界面。

(二)、用户界面设计

1.登录与注册界面的设计 

        注册界面与登录界面采用两个盒子模型div进行嵌套,根据用户点击不同的模块进行动态切换,从一定程度上,大大减少了代码量的冗余,而对于前端背景的设置,我继续结合之前学期对HTML5的学习,使用video控件切入了动态视频作为登录界面的前端效果,并为其设置一个调节透明度opacity遮罩层后的画布,增加高科技效果。

         对于后端PHP的开发,这里我利用mysqli_num_rows的方法对查询结果集的数据进行了统计,以此来达到用户输入数据与系统数据库匹配的效果,注意这里的mysqli_affect_rows是对上一次查询结果所影响行数的统计,需要严格区分,随后我们调用SESSION进行传值,嵌套script语句跳转到相应的界面。部分截图如下所示:

        由 上图可以看出,用户在注册时还需填写自己的安全问题,以防止忘记密码后进行核对。若点击登录界面的忘记密码,则跳转至账号输入界面,答对安全问题后即可重新修改密码,部分代码如下所示:

  1. <?php
  2. require_once '../process/connect.php';
  3. require_once '../process/functions.php';
  4. if (isset($_GET['username'])){
  5. $sql= "select * from user_message where user_name='{$_GET['username']}'";
  6. $userMsg = selectOne($link,$sql);
  7. $password = $userMsg['password'];
  8. echo "<script>";
  9. echo "var username = document.getElementById('myusername');";
  10. echo "var mypassword = document.getElementById('mypassword');";
  11. echo "var li1 = document.getElementById('li1');";
  12. echo "var li2 = document.getElementById('li2');";
  13. echo "li1.setAttribute('class','gtco-second');";
  14. echo "li2.setAttribute('class','active gtco-first');";
  15. echo "var div1 = document.getElementById('mydiv1');";
  16. echo "var div2 = document.getElementById('mydiv2');";
  17. echo "div1.setAttribute('class','tab-content-inner');";
  18. echo "div2.setAttribute('class','tab-content-inner active');";
  19. echo "username.value={$_GET['username']};";
  20. echo "mypassword.value={$userMsg['password']};";
  21. echo "</script>";
  22. }
  23. ?>

2.主界面的设计       

        经过用户登录,首先跳转到的界面应该是对电影整体信息的一个展示,这里的前端编写,我才用了Chinaz与商业信息的一部分模板,调用script中的setTimeout函数,对每一页的信息进行循环展示,这里由于为了更好的体现电影院前端系统的可视化效果,我又在后面设置了script代码中的经典案例——手风琴效果,来体现电影的相关信息,从而在一定程度上使界面科技感更加酷炫。代码展示如下:

  1. <header class="slider">
  2. <div class="main-slider">
  3. <div class="swiper-wrapper">
  4. <?php
  5. foreach ($movies as $movie) {
  6. ?>
  7. <div class="swiper-slide">
  8. <div class="slide-inner bg-image" data-background="<?php echo $movie['movie_image']; ?>">
  9. <div class="container" data-swiper-parallax="200">
  10. <h6 class="tagline">新上映 NewFashion</h6>
  11. <h2 class="name"><?php echo $movie['movie_name']; ?><br>
  12. <strong><?php echo $movie['movie_ename']; ?></strong></h2>
  13. <ul class="features">
  14. <li>
  15. <div class="year"><?php echo $movie['movie_time']; ?></div>
  16. </li>
  17. <li>
  18. <div class="hd"><?php echo strrev(substr(strrev($movie['movie_definition']), 2)); ?>
  19. <b><?php echo substr($movie['movie_definition'], -2); ?></b></div>
  20. </li>
  21. <li>
  22. <div class="tags"><?php echo $movie['movie_country']; ?></div>
  23. </li>
  24. </ul>
  25. <p class="description"><?php echo $movie['movie_description']; ?>
  26. </p>
  27. <a href="movie-single.html" class="play-btn">详情信息</a></div>
  28. <!-- end container -->
  29. </div>
  30. <!-- end slide-inner -->
  31. </div>
  32. <!-- end swiper-slide -->
  33. <?php } ?>
  34. </div>
  35. <!-- end swiper-wrapper -->
  36. <div class="swiper-pagination"></div>
  37. <!-- end swiper-pagination -->
  38. </div>
  39. <!-- end main-slider -->
  40. </header>
  41. <!-- end slider -->

        对于后端PHP代码的实现,这里对第一个定时器滑动模板,使用了查找全部movie数据表的信息,为了体现每一部电影的具体信息,从而进一步吸引大众,而对于下部分的手风琴展示效果,则使用了limit限制语句,限制了movie数据表信息的输出,从而达到最佳的可视化效果。

        接着,便是对每个界面都有的右上角信息栏的设计,这里利用了很多模板寻找灵感,最终采用了HTML5的新标签i作为展示载体,并设置它的border-radious属性为50%,硬性规划个人信息头像的展示方式,接着便是普通文本节点的输入,实现效果为,若传递用户SESSION值,则根据传入的用户ID进行信息查找,将用户头像与用户名展示在一旁,并可选择退出登录,而若未检测到值,则显示用户登录。需要注意的是,这里对前端效果的展示尤为精确,即为了更大程度的贴近生活,我想看到的细节在于,如何在检测到信息后,只有新增添的退出登录有a标签的链接,而用户名身上则不加其余操作,这里对于script代码的体现便在于DOM元素的获取以及createElement、append方法的使用。如何在指定盒子内创建我们需要的元素节点显得尤为重要。部分代码如下:

  1. <?php
  2. require_once '../process/connect.php';
  3. require_once '../process/functions.php';
  4. $selectSql = "select * from movie_message";
  5. $movies = selectAll($link, $selectSql);
  6. $selectSql8 = "select * from movie_message limit 4";
  7. $movies2 = selectAll($link, $selectSql8);
  8. if(isset($_SESSION["user_id"])){
  9. $user_id=$_SESSION["user_id"];
  10. $selectSql1="select * from user_message where user_id = {$user_id}";
  11. $user_Msg=selectOne($link,$selectSql1);
  12. }
  13. ?>

3.电影资讯界面的设计 

        根据我们平常订购电影票使用的美团平台、猫眼平台、万达小程序等多个线上管理系统的了解,对于电影订购的模式大致分为两种,即根据电影信息进行查找和根据影院信息进行查找。这里我们先模拟根据电影的类型进行选票的过程,通过对其余模板的分析,我发现,使用类型筛选作为整体电影筛选的实现效果可以更加还原现实生活中的种种情况,更加方便用户对自己喜好的电影进行范围的进一步缩小。

        例如,若类型存在,则判断国家信息,进而判断年份信息,而在类型存在的if大括号内仍需继续判断每种信息是否存在的情况,若不存在,则需要一并调用变量值,这里我额外设置了三个href的值,分别对应三个多选框内的属性,点到哪个则传递哪个的字段值,需要注意的是,一部分值的查找,若等号右侧为0,则默认查找全部语句,而另一部分字段则需要右侧为字段名本身,不同的查找效果需要进行简单区分,具体实现效果如下图所示:     

   

         部分代码实现如下:

  1. if(isset($_GET["type"])){
  2. $href1="?type=".$_GET["type"]."&";
  3. $href2="?";
  4. $href3="?type=".$_GET["type"]."&";
  5. $search_type = $_GET["type"];
  6. if(isset($_GET["country"])){
  7. $href2="?country=".$_GET["country"]."&";
  8. $href3="?type=".$_GET["type"]."&"."country=".$_GET["country"]."&";
  9. $search_country = $_GET["country"];
  10. if(isset($_GET["time"])){
  11. $href2="?country=".$_GET["country"]."&"."time=".$_GET['time']."&";
  12. $href1="?type=".$_GET["type"]."&"."time=".$_GET['time']."&";
  13. $search_time = $_GET["time"];
  14. $selectSql3 = "select * from movie_message where movie_country = '{$search_country}' and movie_type = '{$search_type}' and movie_time='{$search_time}'";
  15. }else{
  16. $search_time = "movie_time";
  17. $selectSql3 = "select * from movie_message where movie_country = '{$search_country}' and movie_type = '{$search_type}'";
  18. }
  19. }else{
  20. $href2="?";
  21. $href3="?type=".$_GET["type"]."&";
  22. $search_country = 0;
  23. $search_type = $_GET["type"];
  24. if(isset($_GET["time"])){
  25. $href2="?time=".$_GET['time']."&";
  26. $href1="?type=".$_GET["type"]."&"."time=".$_GET['time']."&";
  27. $search_time = $_GET["time"];
  28. $selectSql3 = "select * from movie_message where movie_type = '{$search_type}' and movie_time='{$search_time}'";
  29. }else{
  30. $search_time = "movie_time";
  31. $selectSql3 = "select * from movie_message where movie_type = '{$search_type}'";
  32. }
  33. }
  34. }elseif(isset($_GET["country"])){
  35. $href1="?";
  36. $href2="?country=".$_GET["country"]."&";
  37. $href3="?country=".$_GET["country"]."&";
  38. $search_type = 0;
  39. $search_country = $_GET["country"];
  40. if(isset($_GET["time"])){
  41. $href2="?country=".$_GET["country"]."&"."time=".$_GET['time']."&";
  42. $href1="?time=".$_GET['time']."&";
  43. $search_time = $_GET["time"];
  44. $selectSql3 = "select * from movie_message where movie_country = '{$search_country}' and movie_time='{$search_time}'";
  45. }else{
  46. $search_time = "movie_time";
  47. $selectSql3 = "select * from movie_message where movie_country = '{$search_country}'";
  48. }
  49. }elseif(isset($_GET["time"])){
  50. $href3="?";
  51. $href2="?time=".$_GET["time"]."&";
  52. $href1="?time=".$_GET["time"]."&";
  53. $search_type = 0;
  54. $search_time = $_GET["time"];
  55. if(isset($_GET["country"])){
  56. $href2="?time=".$_GET["time"]."&"."country=".$_GET['country']."&";
  57. $href3="?time=".$_GET['time']."&";
  58. $search_country = $_GET["country"];
  59. $selectSql3 = "select * from movie_message where movie_country = '{$search_country}' and movie_time='{$search_time}'";
  60. }else{
  61. $search_country = 0;
  62. $selectSql3 = "select * from movie_message where movie_time = '{$search_time}'";
  63. }
  64. }else{
  65. $href1="?";
  66. $href2="?";
  67. $href3="?";
  68. $search_type = 0;
  69. $search_country = 0;
  70. $search_time = "movie_time";
  71. $selectSql3 = "select * from movie_message";
  72. }
  73. $typeMegs = selectAll($link,$selectSql3);
  74. if(isset($_SESSION["user_id"])){
  75. $user_id=$_SESSION["user_id"];
  76. $selectSql1="select * from user_message where user_id = {$user_id}";
  77. $user_Msg=selectOne($link,$selectSql1);
  78. }

        整体展示效果如下所示:

4.电影购票+放映安排+选票界面的设计

        这里对于影院信息的设计,我依旧延续了电影信息筛选界面的三重多选框,即根据不同的_GET传值,对展示信息进行不断的多次筛选,最终实现用户想要看到的小范围效果,此处的前端模板,我选用了猫眼电影的模板信息,即利用我们Python学到的爬虫技术,对网页模板进行爬取,将最终的前端效果设置其CSS样式,达到所需要的信息模式。而这里的选座购票按钮则继续使用了a标签的href属性的链接方式传递_GET请求,跳转到放映安排playtime界面,并向其传递电影的编号与影厅的编号信息。

        通过影院的选择,跳转到放映安排即影厅的选择界面,并传值。 

        这里引入了开始第一种选择电影的方式,及根据电影直接跳选至影院信息选择界面的情况,则会直接向该放映安排界面传入一个电影ID值,那么,该界面的信息则会根据这个_GET传值重新设置界面信息,而该页面的处理是对最终电影票订票界面的最终审查,会根据放映安排的编号,查出放映的厅号、起止时间、放映版本、票价与放映安排的编号并进行按钮的值传递。具体代码如下:

  1. <?php
  2. require_once '../process/connect.php';
  3. require_once '../process/functions.php';
  4. if(isset($_GET['movie_id'])){
  5. $myId = $_GET['movie_id'];
  6. }elseif(isset($_GET['id'])) {
  7. $myId = $_GET['id'];
  8. }else{
  9. $myId = 1;
  10. }
  11. $selectSql3 = "select * from movie_message where movie_id = {$myId}";
  12. $movies = selectOne($link, $selectSql3);
  13. $selectSql1 = "select * from movie_message";
  14. $cinema_name=$_GET["cinema_name"];
  15. $selectSql4 = "select * from cinema_message where cinema_name = '{$cinema_name}'";
  16. $cinema_message=selectOne($link,$selectSql4);
  17. $movieMegs = selectAll($link,$selectSql1);
  18. $selectSql2 = "select * from playtime_message where movie_id = {$myId} and cinema_id= {$cinema_message['cinema_id']}";
  19. $playtimeMegs = selectAll($link,$selectSql2);
  20. $movie_id=$_GET['movie_id'];
  21. $_SESSION["movie_name"]=$movies["movie_name"];
  22. $_SESSION["movie_image"]=$movies["movie_show"];
  23. $_SESSION["cinema_name"]=$_GET["cinema_name"];
  24. $user_id=$_SESSION["user_id"];
  25. $selectSql1="select * from user_message where user_id = {$user_id}";
  26. $user_Msg=selectOne($link,$selectSql1);
  27. //echo "<pre>";
  28. //print_r($_GET);
  29. //echo "</pre>"
  30. ?>

        最后是对电影院座位的选择,这里对于展示栏,这里通过不断的a标签罗列,对每一个a标签设置了背景图片,并设置其id、name与value值以方便后期PHP代码的添加,为模拟电影院的内部设置,这里我也充分使用HTML的盒子模型,首先对每一种座位信息进行了注释,也标记了荧幕与中心线的划分效果。接着是对右边信息栏的设计,这里我仅仅采用ul-li的列表标签进行一一输出。

        在前端样式设计完毕后,就是对后台数据的分析处理了,这里我们将功能一个个实现,首先是对用户的座位选定能够实现循环点击循环变色,本来是想到了JavaScript中曾学到的toggle方法,但尝试多次未果,最终采用赋初值的方式,让一个标定值也参与循环,并在循环中实现累加操作,进而根据它的值来判断座位的样式改变,接着便是对右侧信息栏座位信息的即时性变化的设计,这里我考虑到与三重多选框类似的情况,比如用户在选座后,可以不按选票的顺序进行取消,那么怎么根据信息实时性准确的显示出我们点击的座椅位置呢?这里我采用自己设置其value值的一个笨方法,对每一个座椅实例化,即规定其每一个的onclick方法中对信息输出的元素节点中添加的文本节点的值 。

         具体代码展示如下:

  1. <?php
  2. require_once '../process/connect.php';
  3. require_once '../process/functions.php';
  4. $userID=$_SESSION['user_id'];
  5. $playtime_id=$_GET['playtime_id'];
  6. $selectSql = "select * from seat_message where playtime_id={$playtime_id} and user_id = {$userID}";
  7. $seatMegs = selectAll($link,$selectSql);
  8. $image=$_SESSION['movie_image'];
  9. $movie_name=$_SESSION["movie_name"];
  10. $movie_hall=$_GET["moviehall_id"];
  11. $cinema_name=$_SESSION["cinema_name"];
  12. $language=$_GET["language"];
  13. $start_time=$_GET['start_time'];
  14. $price=$_GET['price'];
  15. $_SESSION["playtime_id"]=$playtime_id;
  16. $user_id=$_SESSION["user_id"];
  17. $selectSql1="select * from user_message where user_id = {$user_id}";
  18. $user_Msg=selectOne($link,$selectSql1);
  19. if(isset($_GET['flag'])){
  20. $playtime_id=$_GET['playtime_id'];
  21. $selectSql = "select * from playtime_message where playtime_id={$playtime_id}";
  22. $playtimeMegs = selectOne($link,$selectSql);
  23. $selectSql2 = "select * from movie_message where movie_id={$playtimeMegs['movie_id']}";
  24. $movieMegs = selectOne($link,$selectSql2);
  25. $image=$movieMegs['movie_image'];
  26. $movie_name=$movieMegs["movie_name"];
  27. $movie_hall=$playtimeMegs["moviehall_id"];
  28. $cinema_name=$_SESSION["cinema_name"];
  29. $language=$playtimeMegs["language"];
  30. $start_time=$playtimeMegs['begin_time'];
  31. $price=$playtimeMegs['price'];
  32. }
  33. ?>

         可实现同步更改。

5.个人信息界面的设计

        首先查找出用户的单条记录与座位订购的全部信息,使用foreach语句对信息进行输出,接着便是对input中type属性为file文件类型的操作进行处理,即调用move_uploaded_file函数对传入的文本路径信息进行保存。最后就是对已订座椅信息的操作,删除操作仅是_GET传值的方式,对传入的座椅编号进行where子句的确认并进行Sql语句执行,而座椅信息修改这里便需要传入一个标记量。

        如若用户需要修改,则可以点击按钮重新跳转至选票界面。

         具体代码展示如下:

  1. <?php
  2. if (!isset($_SESSION["username"])) {
  3. echo "用户登录";
  4. echo "<script>";
  5. echo "var i1 = document.createElement('i');";
  6. echo "i1.setAttribute('class','lni lni-user');";
  7. echo "var myOut = document.getElementById('myOut');";
  8. echo "myOut.append(i1);";
  9. echo "</script>";
  10. } else {
  11. echo $_SESSION["username"];
  12. echo "<script>";
  13. echo "var myUsername=document.getElementById('myUsername');";
  14. echo "myUsername.removeAttribute('href');";
  15. echo "var a1 = document.createElement('a');";
  16. echo "var txt1 = document.createTextNode('退出登录');";
  17. echo "var myOut = document.getElementById('myOut');";
  18. echo "a1.append(txt1);";
  19. echo "myOut.append(a1);";
  20. echo "a1.href='../process/logout.php';";
  21. echo "var i1 = document.createElement('i');";
  22. echo "var img1 = document.createElement('img');";
  23. echo "img1.setAttribute('src','".$user_Msg['user_image']."');";
  24. echo "img1.style.borderRadius='50%';";
  25. echo "img1.style.height='100%';";
  26. echo "img1.style.width='100%';";
  27. echo "img1.style.paddingBottom='3px';";
  28. echo "img1.style.marginTop='-4px';";
  29. echo "var myOut = document.getElementById('myOut');";
  30. echo "i1.append(img1);";
  31. echo "myOut.append(i1);";
  32. echo "</script>";
  33. }
  34. ?>

(三)、管理员界面设计 

1. 与用户的登录界面一致,这里管理员根据信息在数据库检索正确后将进入管理员界面,对于管理员界面的前端设计,我采用了script中的抽屉模型,总共分为六大模块,这里一方面为了减少代码冗余,另一方面为了进一步体现封装思想,对每一部分的信息都采用了盒子模型进行包装,并设置了其id值,利用script语句中DOM元素对节点的获取,使用控件充分利用display属性的block与none进行部分的隐藏与展示。

        这里可以对用户、管理员、电影、影院、放映时间以及购座信息分别进行增删改查,具体代码展示如下:

  1. foreach ($_POST as $key => $value)
  2. {
  3. // echo "$value"."<br>";
  4. $value=str_replace('座','',$value);
  5. $array=explode('排', $value);
  6. // echo $array[0]."<br>";
  7. // echo $array[1]."<br>";
  8. $line=$array[0];
  9. $column=$array[1];
  10. if($_SESSION['flag']=="insert"){
  11. $insertSql = "insert into seat_message(seat_line,seat_column,user_id,playtime_id) values('{$line}','{$column}',{$userid},{$playtime_id})";
  12. $result = mysqli_query($link,$insertSql);
  13. if(!$result){
  14. echo mysqli_error($link);
  15. exit();
  16. }
  17. }else{
  18. $insertSql = "insert into seat_message(seat_line,seat_column,user_id,playtime_id) values('{$line}','{$column}',{$userid},{$playtime_id})";
  19. $result = mysqli_query($link,$insertSql);
  20. if(!$result){
  21. echo mysqli_error($link);
  22. exit();
  23. }
  24. }
  25. }

 2.导入Excel与下载Excel的操作

        首先是对已存在的表的信息对数据库的录入,在导入相关文件后,我们首先创建文件输入流,并载入文件路径信息,获取该表格的总行数与总列数,随后在判断表内确实存在数据后,通过工作表中自带的getCellByColumnAndRow方法对二维数组中的数据进行获取并输出存储,最后调用字符串对sql语句中的字段名与值进行拼接后执行存入。

        接着是对已存在表信息的输出,这里相当于是一个置反性质的操作,我们首先需要通过数据库查询出我们需要导出的表格信息,接着根据自定义的表格实例,通过setCellValue方法对数据进行输出并设置给Excel表格的相应位置。 代码部分展示如下:

  1. $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
  2. $reader->setReadDataOnly(TRUE);
  3. $spreadsheet = $reader->load('movies.xlsx');
  4. $worksheet = $spreadsheet->getActiveSheet();
  5. $highestRow = $worksheet->getHighestRow();
  6. $highestColumn = $worksheet->getHighestColumn();
  7. $highestColumnIndex = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($highestColumn);

注意:

        利用phpspreadsheet插件对Excel表格的信息与Mysql数据库连接后,进行录入与导出,首先在实现功能之前,在经过我查阅大量资料后,我发现原本可以灵活使用于Phostorm中的PHPExcel插件在版本7.0之后便被弃用了,由phpspreadsheet插件替代,而利用我们php中自带的命令提示行terminal中的命令composer进行安装时,会发现版本不兼容,这里我们需要调整php.in文件中的gb属性,将其权限放开后,便可以成功安装。

  1. $fileName = $_FILES['excel']["name"];
  2. //临时路径
  3. $tempName = $_FILES['excel']["tmp_name"];
  4. //第一个参数是临时路径,
  5. move_uploaded_file($tempName,$fileName);
  6. require 'D:\xmapp\htdocs\vendor\autoload.php';
  7. include('../process/connect.php'); //连接数据库
  8. $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
  9. $reader->setReadDataOnly(TRUE);
  10. $spreadsheet = $reader->load('movies.xlsx'); //载入excel表格
  11. $worksheet = $spreadsheet->getActiveSheet();
  12. $highestRow = $worksheet->getHighestRow(); // 总行数
  13. $highestColumn = $worksheet->getHighestColumn(); // 总列数
  14. $highestColumnIndex = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($highestColumn); // e.g. 5
  15. $lines = $highestRow - 2;
  16. if ($lines <= 0) {
  17. exit('Excel表格中没有数据');
  18. }
  19. $sql = "INSERT INTO `movie_message` (`movie_name`, `movie_ename`, `movie_time`, `movie_definition`,`movie_country`,`movie_description`,`movie_image`,`movie_show`,`movie_type`,`movie_role`) VALUES ";
  20. for ($row = 3; $row <= $highestRow; ++$row) {
  21. $moviename = $worksheet->getCellByColumnAndRow(1, $row)->getValue(); //姓名
  22. $movieename = $worksheet->getCellByColumnAndRow(2, $row)->getValue(); //语文
  23. $movietime = $worksheet->getCellByColumnAndRow(3, $row)->getValue(); //数学
  24. $moviedefinition = $worksheet->getCellByColumnAndRow(4, $row)->getValue(); //外语
  25. $moviecountry = $worksheet->getCellByColumnAndRow(5, $row)->getValue(); //外语
  26. $moviedescription = $worksheet->getCellByColumnAndRow(6, $row)->getValue(); //外语
  27. $movieimage = $worksheet->getCellByColumnAndRow(7, $row)->getValue(); //外语
  28. $movieshow = $worksheet->getCellByColumnAndRow(8, $row)->getValue(); //外语
  29. $movietype = $worksheet->getCellByColumnAndRow(9, $row)->getValue(); //外语
  30. $movierole = $worksheet->getCellByColumnAndRow(10, $row)->getValue(); //外语
  31. $sql .= "('$moviename','$movieename','$movietime','$moviedefinition','$moviecountry','$moviedescription','$movieimage','$movieshow','$movietype','$movierole'),";
  32. }
  33. $sql = rtrim($sql, ","); //去掉最后一个,号
  34. try {
  35. $link->query($sql);
  36. echo 'OK';
  37. } catch (Exception $e) {
  38. echo $e->getMessage();
  39. }

        至此,该电影院信息查询管理系统的基本功能与界面展示完毕。如对您有所帮助,望留下宝贵一赞!谢谢!

        需源码 请私信 扣扣 1092644308

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发