为什么我的这个留言板每次已提交就自动把以前的存在msg.txt里面的内容自动删除了?

为什么我的这个留言板每次已提交就自动把以前的存在msg.txt里面的内容自动删除了?


<?php
header('content-type:text/html;charset=utf8');
$filename='msg.txt';
$msg=[];
//从文件中取出信息并出现在网页上
$date=file_get_contents($filename);
$dates=unserialize($date);

//检测数据是否提交
if(isset($_POST['sub'])){
  $username=strip_tags($_POST['username']);
  $title=strip_tags($_POST['title']);
  $content=strip_tags($_POST['content']);
  $time=date('Y年m月d日 H:i:s');
  $date=compact('username','title','time','content');
  array_push($msg,$date);
  var_dump($msg);
  $msgs=serialize($msg);
//判断是否已经存入txt文件,并作出提示
if(file_put_contents($filename,$msgs)){
    echo "<script>alert('留言成功!');location.href='msg.php';</script>";
}else{
  echo "<script>alert('留言失败!');location.href='msg.php';</script>";
}
}

?>

<html>
<head>
<script type="text/javascript" src="../js/jquery-2.0.0.min.js"></script>
<script type="text/javascript" src="../js/jquery-ui"></script>
<link href="../js/bootstrap-combined.min.css" rel="stylesheet" media="screen">
<script type="text/javascript" src="../js/bootstrap.min.js"></script>
</head>
<body>
<div class="container-fluid">
 <div class="row-fluid">
  <div class="span12">
   <div class="page-header">
    <h1>
     留言板 V1.0
    </h1>
   </div>
   <div class="hero-unit">
    <h1>
     Hello, world!
    </h1>
    <p>
     这是一个可视化布局模板, 你可以点击模板里的文字进行修改, 也可以通过点击弹出的编辑框进行富文本修改. 拖动区块能实现排序.
    </p>
    <p>
     <a class="btn btn-primary btn-large" href="#" rel="nofollow">参看更多 »</a>
    </p>
   </div>
   <table class="table">
    <thead>
     <tr>
      <th>
       编号
      </th>
      <th>
       用户
      </th>
            <th>
          标题
      </th>
      <th>
          时间
      </th>
      <th>
       内容
      </th>
     </tr>
    </thead>
        <?php $i=1; foreach ($dates as $v) { ?>
    <tbody>
     <tr>
      <td>
       <?php echo $i++; ?>
      </td>
      <td>
       <?php echo $v['username']; ?>
      </td>
      <td>
       <?php echo $v['title']; ?>
      </td>
      <td>
       <?php echo $v['time'] ?>
      </td>
            <td>
       <?php echo $v['content']; ?>
      </td>
     </tr>
    </tbody>
        <?php  } ?>
   </table>
   <form class="form-horizontal" action="#" method="post">
    <div class="control-group">
      <label class="control-label" for="inputEmail">用户名</label>
     <div class="controls">
      <input id="inputEmail" type="text" name="username" required/>
     </div>
    </div>
    <div class="control-group">
      <label class="control-label" for="inputPassword">标题</label>
     <div class="controls">
      <input id="inputPassword" type="text" name="title" required/>
     </div>
    </div>
        、<div class="control-group">
      <label class="control-label" for="inputPassword">内容</label>
     <div class="controls">
      <textarea rows="8" cols="80" name="content" required></textarea>
     </div>
    </div>
    <div class="control-group">
     <div class="controls">
       <input type="submit" class="btn btn-primary btn-large" name="sub" value="发布留言">
     </div>
    </div>
   </form>
  </div>
 </div>
</div>
</body>
</html>


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

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

3回答
guly 2018-03-21 13:37:06

你好,添加功能老师课堂已经讲解,详细代码参考课堂源码22-msg.php,

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

祝学习愉快!


guly 2018-03-21 11:32:54

你好,一、老师讲解的是添加留言功能是不需要获取留言id的。

二、编辑留言代码的执行顺序是 

1、获取留言的id。

$editkey = $_GET['editkey'];

2、定义留言的文件,然后定义一个数组用来存放所有留言。

$filename="msg.txt";

3、 由于编写代码的严谨性,使用变量之前应检查变量是否存在。

 if(file_exists($filename))

4、如果变量存在获取变量的内容。

5、获取的内容进行实例化转换成数组。

$msgs=unserialize($string);

6、然后获取通过post表单提交的编辑后的留言内容

if(isset($_POST['pubMsg'])){
   $username=$_POST['username'];
   $title=strip_tags($_POST['title']);
   $content=strip_tags($_POST['content']);
   $time=time();
   //将其组成关联数组
   $data=compact('username','title','content','time');

7、根据编辑留言的id,利用新编辑的留言替换原有的留言,

     $key = $_POST['editkey'];
      $msgs[$key] = $data;

  8、然后对留言进行序列化

  $msgs=serialize($msgs);

   9、最后保存。

   file_put_contents($filename,$msgs))

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

  • 提问者 qq_追梦少年_14 #1
    老师,我上面的那个代码,就是按照老师讲的那个做的,是添加留言。都是,我那个在添加第二条留言的时候,自动就吧,TXT文件中的以前的那个第一条给清空了 ,我没弄明白怎么回事?
    2018-03-21 12:41:27
guly 2018-03-20 12:54:26

你好,首先获取到编辑留言的唯一id号,参考代码如下:

$editkey = $_GET['editkey'];
$filename="msg.txt";
$msgs=[];
//检测文件是否存在
if(file_exists($filename)){
  //读取文件中的内容
  $string=file_get_contents($filename);
  if(strlen($string)>0){
    $msgs=unserialize($string);
  }
  $editarr = $msgs[$editkey];

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

  • 提问者 qq_追梦少年_14 #1
    老师讲的那个代码就没有获取id号这一项为什么就行
    2018-03-20 21:22:30
  • 提问者 qq_追梦少年_14 #2
    而且我不知道我的这个代码到底是错到哪里了,是顺序不到还是怎么回事?为什么msg.txt里只有一条,是我的代码顺序不对?还是因为啥?
    2018-03-20 21:24:45
  • 提问者 qq_追梦少年_14 #3
    我刚才又试了试,为什么把这两句($string=file_get_contents($filename); $msgs=unserialize($string);)写在接受数据的前面就行,写在接收数据的后面就msg.txt里面就只有一条?我想知道在点击提交以后整个PHP文件的执行顺序是怎么样的?
    2018-03-20 21:55:57
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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