编辑功能只能编辑第二条数据,麻烦老师帮忙看一下

编辑功能只能编辑第二条数据,麻烦老师帮忙看一下

index.php文件
<?php
//字符集编码和时区设置
header('content-type:text/html;charset=utf-8');
date_default_timezone_set('PRC');

//创建储存文件
$filename="msg.txt";
$msgs=[];

//检测文件是否存在
if(file_exists($filename)){
 $string=file_get_contents($filename);//读取文件中的内容
 if(strlen($string)>0){//检测内容是否存在
 $msgs=unserialize($string);//反序列化字符串
 }
}

//检测用户是否点击了提交按钮
if(isset($_POST['leaveMsg'])){
 $username = $_POST['username'];
 $title = strip_tags($_POST['title']);//过滤留言信息中的HTML和PHP标签
 $content = strip_tags($_POST['content']);
 $time = time();
 //将其组成关联数组
 $data = compact('username', 'title', 'content', 'time');
 array_push($msgs, $data);
 $msgs = serialize($msgs);//序列化字符串

}

if(isset($_GET['delkey'])){
 $key = $_GET['delkey'];
 //要删除的数据不存在
 if(!isset($msgs[$key])){
 echo "<script>alert('数据出错,请重试!');location.href='index.php';</script>";
    }
 unset($msgs[$key]);
 $msgs=serialize($msgs);
 if(file_put_contents($filename,$msgs)){
 echo "<script>alert('删除成功!');location.href='index.php';</script>";
    }else{
 echo "<script>alert('删除失败,请重试!');location.href='index.php';</script>";
    }
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <title>慕课留言板</title>
    <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>
    <script type="text/javascript">
 function del(key){
 if(confirm("确定删除?")){
 location.href="delete.php?delkey="+key;
            }else{
 location.href="index.php";
            }
        }
    </script>
</head>
<body>
<div class="container-fluid">
    <div class="row-fluid">
        <div class="span12">
            <div class="page-header">
                <h1>
 慕课留言板-<span>V1.0</span>
                </h1>
            </div>
            <div class="hero-unit">
                <h1>
 Hello, World!
 </h1>
                <p>
 一个自由,平等与民主的留言板, 你可以自由友善的发言。
 </p>
                <p>
                    <a rel="nofollow" class="btn btn-primary btn-large" href="#">查看更多 »</a>
                </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("m/d/Y H:i:s",$val['time']);?>
 </td>
                            <td>
 <?php echo $val['content'];?>
 </td>
                            <td>
                                <a href="edit.php?id=<?php echo $key ?>">编辑</a>&nbsp;&nbsp;|&nbsp;&nbsp;
 <a href="javascript:;" onclick="del(<?php echo $key?>);return false;">删除</a>
                            </td>
                        </tr>

 <?php } ?>
 </tbody>
                </table>

 <?php ; ?>

 <form action="#" method="post">
                <fieldset>
                    <input type="submit" class="btn leave message btn-lg" name="leaveMsg" value="我要留言">
                </fieldset>
            </form>

        </div>
    </div>
</div>
<hr>
<div class="footer">
    <p><span>慕课商城</span>©2017 powered by IMooc.inc</p>
</div>
<!--跳转留言页面-->
<?php
    if(isset($_POST['leaveMsg'])) {
 $leaveMsg = $_POST['leaveMsg'];
 header("Location: add.php");
    }else{
 exit;
    }
?>
</body>
</html>


edit.php文件
<?php
//字符集编码和时区设置
header('content-type:text/html;charset=utf-8');
date_default_timezone_set('PRC');

$filename='msg.txt';//创建储存文件
$msgs = [];

//检测文件是否存在
if(file_exists($filename)){
 $string=file_get_contents($filename);//读取文件中的内容
 if(strlen($string)>0){//检测内容是否存在
 $msgs=unserialize($string);//反序列化字符串
 }
}

// 获取数组的键名
$editkey=$_GET['editkey'];
$editmsgs=$msgs[$editkey];

//判断是否点击编辑按钮
if (isset($_POST['editMsg'])) {
 $editmsgs['username']=$_POST['username'];
 $editmsgs['title']=$_POST['title'];
 $editmsgs['content']=$_POST['content'];
 $editmsgs['time']=time();

 //将指定位置的数据修改为接收到的新数据。
 $msgs[$editkey]=$editmsgs;

 //将所有数据序列化
 $msgs=serialize($msgs);

 //向文件中重写内容
 if (file_put_contents($filename, $msgs)) {
 echo "<script>alert('编辑成功!');location.href='index.php';</script>";
    }else{
 echo "<script>alert('编辑失败!');location.href='index.php';</script>";
    }
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <title>慕课留言板</title>
    <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>
    <style type="text/css">
 form{
 text-align: center;
        }
 button{
 width: 82px;
 height: 30px;
        }
        .check a:link{
 color: #0C0C0C;
 text-decoration: none;
        }
        .check a:visited{
 color: #0C0C0C;
 text-decoration: none;
        }
        .username{
 width: 440px;
        }
        .title{
 width: 440px;
        }
        .content{
 width: 440px;
 height: 220px;
        }
    </style>
</head>
<body>
<div class="container-fluid">
    <div class="row-fluid">
        <div class="span12">
            <div class="page-header">
                <h1>
 慕课留言板-<span>V1.0</span>
                </h1>
            </div>
            <div class="hero-unit">
                <h1>
 来都来了,就说点什么吧~~~~
 </h1>
                <p>
 把你想说的都写在下面,点击发布留言,和小伙伴们交流,请友善发言哦。
 </p>
                <p>
                    <a rel="nofollow" class="btn btn-primary btn-large" href="#">查看更多 ?</a>
                </p>
            </div>

            <h3>编辑</h3>
            <hr/>


 <!--留言提交-->
 <form action="edit.php" method="post">
                <fieldset>
                    <label>用户名</label><input type="text" name="username" class="username" value="<?php echo $editmsgs['username'];?>" required>
                    <label>标题</label><input type="text" name="title" class="title"  value="<?php echo $editmsgs['title'];?>" required>
                    <label>内容</label><textarea name="content" rows="5" cols="30" class="content"  value="<?php echo $editmsgs['content'];?>" required></textarea><br/>
                    <input type="submit" class="btn btn-primary btn-lg" name="editMsg" value="编辑完成">
                    <button><div class="check"><a href="index.php">查看留言</a></div></button>
                </fieldset>
            </form>
        </div>
    </div>
</div>
</body>
</html>

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

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

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

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

点击第四条数据后出现第二条数据的标题和用户名,没有内容。编辑内容后跳转index页后发现第二条数据被修改,添加数据和删除数据功能都没问题

正在回答

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

4回答

同学你好,在edit文件中添加input标签,如下:

 <input type="hidden" name="id" value="<?php echo $editkey ?>">

与form表单一起提交。然后在PHP代码中进接收。代码如下:

//判断是否点击编辑按钮
if (isset($_POST['editMsg'])) {
    $data['username']=$_POST['username'];
    $data['title']=$_POST['title'];
    $data['content']=$_POST['content'];
    $data['time']=time();
 
    //将指定位置的数据修改为接收到的新数据。
    $id = $_POST['id'];
    $msgs[$id]=$data;
    // var_dump($id);die;
    //将所有数据序列化
    $msgs=serialize($msgs);
 
    //向文件中重写内容
    if (file_put_contents($filename, $msgs)) {
        echo "<script>alert('编辑成功!');location.href='index.php';</script>";
    }else{
        echo "<script>alert('编辑失败!');location.href='index.php';</script>";
    }
}

祝学习愉快!

  • 断线纸鸢1 提问者 #1
    好了,谢谢老师
    2019-08-18 16:51:35
好帮手慕小尤 2019-08-18 14:06:37

同学你好,测试代码是可以完成编辑的。同学可以将数据全部删除,然后重新添加数据。

textarea标签的默认值不是写在value中的,而是现在标签中间。代码如下:

<label>内容</label>
<textarea name="content" rows="5" cols="30" class="content" required><?php echo $editmsgs['content'];?></textarea><br/>

祝学习愉快!

  • 提问者 断线纸鸢1 #1
    老师,我代码改成了这样: <label>用户名</label><input type="text" name="username" class="username" required value="<?php echo $editmsgs['username'];?>"> <label>标题</label><input type="text" name="title" class="title" required value="<?php echo $editmsgs['title'];?>"> <label>内容</label><textarea name="content" rows="5" cols="30" class="content" required><?php echo $editmsgs['content'];?></textarea><br/> <input type="submit" class="btn btn-primary btn-lg" name="editMsg" value="编辑完成"> <button><div class="check"><a href="index.php">查看留言</a></div></button> 删除msgs.txt文件后重新添加了一条留言,点击编辑发现会重新添加一条留言,第二条留言可以编辑,编辑之后添加的所有留言都只能编辑第二条。显示未定义的索引id在edit.php18行
    2019-08-18 16:05:00
提问者 断线纸鸢1 2019-08-18 12:03:47
edit.php    有die;只显示数组
<?php
//字符集编码和时区设置
header('content-type:text/html;charset=utf-8');
date_default_timezone_set('PRC');

$filename='msg.txt';//创建储存文件
$msgs = [];

//检测文件是否存在
if(file_exists($filename)){
 $string=file_get_contents($filename);//读取文件中的内容
 if(strlen($string)>0){//检测内容是否存在
 $msgs=unserialize($string);//反序列化字符串
 }
}

//获取数组的键名
$editkey=$_GET['id'];
$editmsgs=$msgs[$editkey];
var_dump($editmsgs);die;

//判断是否点击编辑按钮
if (isset($_POST['editMsg'])) {
 $editmsgs['username']=$_POST['username'];
 $editmsgs['title']=$_POST['title'];
 $editmsgs['content']=$_POST['content'];
 $editmsgs['time']=time();

 //将指定位置的数据修改为接收到的新数据。
 $msgs[$editkey]=$editmsgs;

 //将所有数据序列化
 $msgs=serialize($msgs);

 //向文件中重写内容
 if (file_put_contents($filename, $msgs)) {
 echo "<script>alert('编辑成功!');location.href='index.php';</script>";
    }else{
 echo "<script>alert('编辑失败!');location.href='index.php';</script>";
    }
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <title>慕课留言板</title>
    <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>
    <style type="text/css">
 form{
 text-align: center;
        }
 button{
 width: 82px;
 height: 30px;
        }
        .check a:link{
 color: #0C0C0C;
 text-decoration: none;
        }
        .check a:visited{
 color: #0C0C0C;
 text-decoration: none;
        }
        .username{
 width: 440px;
        }
        .title{
 width: 440px;
        }
        .content{
 width: 440px;
 height: 220px;
        }
    </style>
</head>
<body>
<div class="container-fluid">
    <div class="row-fluid">
        <div class="span12">
            <div class="page-header">
                <h1>
 慕课留言板-<span>V1.0</span>
                </h1>
            </div>
            <div class="hero-unit">
                <h1>
 来都来了,就说点什么吧~~~~
 </h1>
                <p>
 把你想说的都写在下面,点击发布留言,和小伙伴们交流,请友善发言哦。
 </p>
                <p>
                    <a rel="nofollow" class="btn btn-primary btn-large" href="#">查看更多 ?</a>
                </p>
            </div>

            <h3>编辑</h3>
            <hr/>


 <!--留言提交-->
 <form action="edit.php" method="post">
                <fieldset>
                    <label>用户名</label><input type="text" name="username" class="username" value="<?php echo $editmsgs['username'];?>" required>
                    <label>标题</label><input type="text" name="title" class="title"  value="<?php echo $editmsgs['title'];?>" required>
                    <label>内容</label><textarea name="content" rows="5" cols="30" class="content"  value="<?php echo $editmsgs['content'];?>" required></textarea><br/>
                    <input type="submit" class="btn btn-primary btn-lg" name="editMsg" value="编辑完成">
                    <button><div class="check"><a href="index.php">查看留言</a></div></button>
                </fieldset>
            </form>
        </div>
    </div>
</div>
</body>
</html>


edit.php   无die;显示编辑页面但依然只能编辑第二条数据
<?php
//字符集编码和时区设置
header('content-type:text/html;charset=utf-8');
date_default_timezone_set('PRC');

$filename='msg.txt';//创建储存文件
$msgs = [];

//检测文件是否存在
if(file_exists($filename)){
 $string=file_get_contents($filename);//读取文件中的内容
 if(strlen($string)>0){//检测内容是否存在
 $msgs=unserialize($string);//反序列化字符串
 }
}

//获取数组的键名
$editkey=$_GET['id'];
$editmsgs=$msgs[$editkey];
var_dump($editmsgs);

//判断是否点击编辑按钮
if (isset($_POST['editMsg'])) {
 $editmsgs['username']=$_POST['username'];
 $editmsgs['title']=$_POST['title'];
 $editmsgs['content']=$_POST['content'];
 $editmsgs['time']=time();

 //将指定位置的数据修改为接收到的新数据。
 $msgs[$editkey]=$editmsgs;

 //将所有数据序列化
 $msgs=serialize($msgs);

 //向文件中重写内容
 if (file_put_contents($filename, $msgs)) {
 echo "<script>alert('编辑成功!');location.href='index.php';</script>";
    }else{
 echo "<script>alert('编辑失败!');location.href='index.php';</script>";
    }
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <title>慕课留言板</title>
    <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>
    <style type="text/css">
 form{
 text-align: center;
        }
 button{
 width: 82px;
 height: 30px;
        }
        .check a:link{
 color: #0C0C0C;
 text-decoration: none;
        }
        .check a:visited{
 color: #0C0C0C;
 text-decoration: none;
        }
        .username{
 width: 440px;
        }
        .title{
 width: 440px;
        }
        .content{
 width: 440px;
 height: 220px;
        }
    </style>
</head>
<body>
<div class="container-fluid">
    <div class="row-fluid">
        <div class="span12">
            <div class="page-header">
                <h1>
 慕课留言板-<span>V1.0</span>
                </h1>
            </div>
            <div class="hero-unit">
                <h1>
 来都来了,就说点什么吧~~~~
 </h1>
                <p>
 把你想说的都写在下面,点击发布留言,和小伙伴们交流,请友善发言哦。
 </p>
                <p>
                    <a rel="nofollow" class="btn btn-primary btn-large" href="#">查看更多 ?</a>
                </p>
            </div>

            <h3>编辑</h3>
            <hr/>


 <!--留言提交-->
 <form action="edit.php" method="post">
                <fieldset>
                    <label>用户名</label><input type="text" name="username" class="username" value="<?php echo $editmsgs['username'];?>" required>
                    <label>标题</label><input type="text" name="title" class="title"  value="<?php echo $editmsgs['title'];?>" required>
                    <label>内容</label><textarea name="content" rows="5" cols="30" class="content"  value="<?php echo $editmsgs['content'];?>" required></textarea><br/>
                    <input type="submit" class="btn btn-primary btn-lg" name="editMsg" value="编辑完成">
                    <button><div class="check"><a href="index.php">查看留言</a></div></button>
                </fieldset>
            </form>
        </div>
    </div>
</div>
</body>
</html>

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


好帮手慕小尤 2019-08-18 11:24:48

同学你好,在index.php文件中为edit.php文件传递的参数名为id而不是editkey。代码如下:

<?php
//字符集编码和时区设置
header('content-type:text/html;charset=utf-8');
date_default_timezone_set('PRC');
 
$filename='msg.txt';//创建储存文件
$msgs = [];
 
//检测文件是否存在
if(file_exists($filename)){
 $string=file_get_contents($filename);//读取文件中的内容
 if(strlen($string)>0){//检测内容是否存在
 $msgs=unserialize($string);//反序列化字符串
 }
}
 
// 获取数组的键名
$editkey=$_GET['id'];
$editmsgs=$msgs[$editkey];
var_dump($editmsgs);die;

祝学习愉快!

  • 提问者 断线纸鸢1 #1
    老师,我按你的代码修改后发现 //获取数组的键名 $editkey=$_GET['id']; $editmsgs=$msgs[$editkey]; var_dump($editmsgs);die; 点击index.php的编辑功能跳转后只有我点击的那条数据的数组出现,如: array(4) { ["username"]=> string(4) "Nova" ["title"]=> string(6) "你好" ["content"]=> string(6) "你好" ["time"]=> int(1566043208) } 去掉die;之后点击编辑虽然能跳转到相应的数据编辑页面,但是内容还是没有,还是只能修改第二条数据
    2019-08-18 11:58:35
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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