编辑文件时有点问题

编辑文件时有点问题

这是index.php

<?php
header('content-type:text/html;charset=utf-8');
date_default_timezone_set('PRC');
$filename='msg1.txt';
$msgs=[];
//检测文件是否存在
if(file_exists($filename)){
   //读取文件中的内容
   $string=file_get_contents($filename);
   if(strlen($string)>0){
       $msgs=unserialize($string);
   }
};
?>
<html>
<head>
   <script type="text/javascript" src="http://www.francescomalagrino.com/BootstrapPageGenerator/3/js/jquery-2.0.0.min.js"></script>
   <script type="text/javascript" src="http://www.francescomalagrino.com/BootstrapPageGenerator/3/js/jquery-ui"></script>
   <link href="http://www.francescomalagrino.com/BootstrapPageGenerator/3/css/bootstrap-combined.min.css" rel="stylesheet" media="screen">
   <script type="text/javascript" src="http://www.francescomalagrino.com/BootstrapPageGenerator/3/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container-fluid" style="width:1080px;margin:0 auto;">
   <div class="row-fluid">
       <div class="span12">
           <div class="page-header">
               <h1>
                   IMOOC留言板-V1.0
               </h1>
           </div>
           <div class="hero-unit">
               <h1>
                   慕课网留言板,欢迎你!
               </h1>
               <p>
                   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;慕课网是垂直的互联网IT技能免费学习网站。以独家视频教程、在线编程工具、学习计划、
                   问答社区为核心特点。在这里, 你可以找到最好的互联网技术牛人,也可以通过免费的在线
                   公开视频教材学习国内领先的互联网IT技术。
               </p>
           </div>
           <?php if(is_array($msgs)&&count($msgs)>0):?>
           <table class="table">
               <thead>
               <tr>
                   <th>
                       编号
                   </th>
                   <th>
                       用户名
                   </th>
                   <th>
                       标题
                   </th>
                   <th>
                       时间
                   </th>
                   <th>
                       内容
                   </th>
                   <th>
                       操做
                   </th>
               </tr>
               </thead>
               <tbody>
               <?php $i=1;foreach($msgs as $key=>$val):?>
               <tr class="success">
                   <td>
                       <?php echo $i++;?>
                   </td>
                   <td>
                       <?php echo $val['username'];?>
                   </td>
                   <td>
                       <?php echo $val['title'];?>
                   </td>
                   <td>
                       <?php echo date('Y/m/d H:i:s',$val['time']);?>
                   </td>
                   <td>
                       <?php echo $val['content'];?>
                   </td>
                   <td>
                       <a href="edit.php?id=<?php echo $key;?>">编辑</a> |
                       <a href="delete.php?id=<?php echo $key;?>" onclick="return confirmAct();">删除</a>
                   </td>
               </tr>
               <?php endforeach;?>
               <?php
               print_r($msgs);
               ?>
               </tbody>
           </table>
           <?php endif;?>
           <form action="add.php" method="post">
               <input type="submit" class="btn btn-lg btn-primary" value="我要留言"></input>
           </form>
           <div class="page-footer">
               慕课商城 @2017 powered by IMooc.inc
           </div>
       </div>
   </div>
</div>
</body>
<script>
   function confirmAct()
   {
       if(confirm('确定要执行此操作吗?')) {
           return true;
       }else{
           return false;
       }
   }

</script>
</html>


这是edit.php

<?php
header('content-type:text/html;charset=utf-8');
date_default_timezone_set('PRC');
$filename='msg1.txt';
$msgs=[];
if(file_exists($filename)){
   //读取文件中的内容
   $string=file_get_contents($filename);
   if(strlen($string)>0){
       $msgs=unserialize($string);
   }
};
//调试程序
/*function debug($var,$exit=0){
   echo '<pre>';
   print_r($var);
   echo '</pre>';
   if($exit){
       exit();
   }
}*/
//检测用户点击了编辑功能,并获取索引
$editkey=$_GET['id'];
//检测用户是否点击了编辑完成按钮
if(isset($_POST['pubMsg'])){
   $msgs[$editkey]['username']=$_POST['username'];
   $msgs[$editkey]['title']=strip_tags($_POST['title']);
   $msgs[$editkey]['content']=strip_tags($_POST['content']);
   $msgs[$editkey]['time']=time();
   /*debug($editkey);
   debug($msgs,1);*/
   $msgs=serialize($msgs);
   if(file_put_contents($filename,$msgs)){
       echo '<script>alert("编辑成功!");location.href="index.php";</script>';
   }else{
       echo '<script>alert("编辑失败!");location.href="add.php";</script>';
   };
};
//检测用户是否点击了查看留言按钮
if(isset($_POST['seeMsg'])){
   echo '<script>location.href="index.php";</script>';
}
?>
<html>
<head>
   <script type="text/javascript" src="http://www.francescomalagrino.com/BootstrapPageGenerator/3/js/jquery-2.0.0.min.js"></script>
   <script type="text/javascript" src="http://www.francescomalagrino.com/BootstrapPageGenerator/3/js/jquery-ui"></script>
   <link href="http://www.francescomalagrino.com/BootstrapPageGenerator/3/css/bootstrap-combined.min.css" rel="stylesheet" media="screen">
   <script type="text/javascript" src="http://www.francescomalagrino.com/BootstrapPageGenerator/3/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container-fluid" style="width:1080px;margin:0 auto;">
   <div class="row-fluid">
       <div class="span12">
           <div class="page-header">
               <h1>
                   IMOOC留言板-V1.0
               </h1>
           </div>
           <div class="hero-unit">
               <h1>
                   既然来了,就说点什么吧~~~~
               </h1>
               <p>
                   把你想说的都写在下面,标注好你的姓名,主题,点击提交给我们,让小伙伴们都知道你在想什么。
               </p>
           </div>
           <form action="edit.php" method="post" >
               <fieldset>
                   <legend>发布</legend>
                   <div style="width:800px;margin:0 auto">
                       <label>用户名</label><input type="text" name="username" value="<?php echo $msgs[$editkey]['username'];?>" required/>
                       <label>标题</label><input type="text" name="title" value="<?php echo $msgs[$editkey]['title'];?>" required style="width:500px;"/>
                       <label>内容</label><textarea name="content" rows="6" required style="width:500px;"><?php echo $msgs[$editkey]['content'];?></textarea>
                       <hr/>
                       <input type="submit" class="btn btn-primary btn-lg" name="pubMsg" value="编辑完成"></input>
                       <input type="submit" class="btn btn-lg" name="seeMsg" value="查看留言" formnovalidate></input>
                   </div>
               </fieldset>
           </form>
       </div>
   </div>
</div>
</body>
</html>

刚开始先正常添加几条

然后随便点一条编辑,下面就会新增加了没有索引的数组,之后无论编辑那一条都是对这里的编号5进行修改,而且它的位置始终在那里http://img1.sycdn.imooc.com//climg/5ccd055200019db311320320.jpg


还有一个问题,为什么我查看msg.txt时没有内容,而且就算我删除了msg.txt,浏览器还是能读的到这5条信息

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
guly 2019-05-05 11:57:21

你好,问题原因有两处:

1、在编辑也面没有点击编辑时没有对编辑的id进行提交,应该在form表单中添加隐藏域,通过post方式进行提交id值,如edit.php修改如下:

http://img1.sycdn.imooc.com//climg/5cce5e7c0001f22912100298.jpg

然后再通过post提交的id进行修改;

http://img1.sycdn.imooc.com//climg/5cce5f0600012aaf08810537.jpg

如果解决了您的问题请采纳,祝学习愉快!


  • 提问者 慕仙0328516 #1
    为什么上面已经获取了$editkey,下面还要获取一次$editkey呢
    2019-05-05 15:09:48
  • 提问者 慕仙0328516 #2
    $editkey已经获得传过来的值了,为什么提交的时候又传一次才可以操作它?
    2019-05-05 15:11:49
  • guly 回复 提问者 慕仙0328516 #3
    你好,已经获取到的值$editkey是开始进入edit.php页面中式获取到的,提交form时再传走的是if判断里面逻辑,此时再次刷新页面时没有通过a连接获取到改值,此时在if判断里并没有获取到$editkey的值,必须再次通过form表单提交一次。祝学习愉快!(可以提交时在if判断打印改值进行测试)
    2019-05-05 16:50:26
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
PHP小白零基础入门
  • 参与学习           人
  • 提交作业       626    份
  • 解答问题       4930    个

想要学好Web后端开发的中流砥柱语言,本阶段为你轻松铺就扎实的基础,从前端网页布局的搭建到后台PHP开发,助你从零基础到掌握主流开发语言。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师