为何无法展示合作社用户全部动态?代码仅显首条且重复循环
问题分析与解决方案
你的代码存在两个核心问题,导致只显示第一条动态且出现重复循环的情况:
1. 查询函数仅返回单条数据
你的viewCoopNewsfeed函数使用了fetch()方法,它只会从结果集中取出第一条匹配的记录。要获取合作社的所有动态,你需要改用fetchAll()方法,它会返回符合条件的所有记录组成的数组,无匹配数据时则返回空数组。
修正后的查询函数:
function viewCoopNewsfeed($coopID) { try { $connection = connect(); $statement = $connection->prepare("SELECT * FROM newsfeed WHERE coopID = :coopID"); $statement->bindParam(":coopID", $coopID); $statement->execute(); $statement->setFetchMode(PDO::FETCH_ASSOC); // 使用fetchAll获取所有符合条件的记录 return $statement->fetchAll(); } catch (PDOException $exception) { die("Error: " . $exception->getMessage()); } }
2. 视图循环中错误引用数组变量
在foreach循环里,你错误地用数组名$coopNewsfeeds访问字段(比如$coopNewsfeeds['photo']),而不是循环的单个元素$coopNewsfeed。此外还有两个小问题需要修正:
<textarea>标签不需要value属性,内容应该直接放在标签内部- 表单标签
<form>没有闭合,会导致HTML结构混乱
修正后的视图代码:
<?php if(!empty($coopNewsfeeds)) { foreach($coopNewsfeeds as $coopNewsfeed) { ?> <form method="post" enctype="multipart/form-data"> <!-- 传递动态ID,用于后续修改/删除操作 --> <input type="hidden" name="newsfeed_id" value="<?=$coopNewsfeed['id']?>"> <div class="row"> <div class="col-md-6"> <div class="form-group"> <label>Photo</label> <img class="profile-pic" src="<?=$coopNewsfeed['photo']?>"/> </div> </div> <!-- 建议用CSS margin替代大量<br>,更利于维护 --> <br><br><br><br><br><br><br><br><br><br> </div> <div class="row"> <div class="col-md-6"> <div class="form-group"> <label>Title</label> <input type="text" class="form-control" placeholder="Title" name="title" value="<?=$coopNewsfeed['title']?>" required> </div> </div> <div class="col-md-6"> <div class="form-group"> <label>Body</label> <textarea class="form-control" name="Body" placeholder="Body" id="" cols="30" rows="2"> <?=$coopNewsfeed['Body']?> </textarea> </div> </div> </div> <!-- 添加修改/删除按钮,根据需求调整逻辑 --> <button type="submit" name="action" value="edit">修改</button> <button type="submit" name="action" value="delete">删除</button> </form> <?php } }?>
额外提示
- 表单中添加的隐藏字段
newsfeed_id是为了让后端识别要操作的具体动态,你需要在处理提交的后端代码中,根据这个ID执行对应的修改或删除逻辑。 - 大量的
<br>标签不利于页面维护,建议用CSS的margin属性来控制元素之间的间距。
内容的提问来源于stack exchange,提问作者John Macasinag
相关产品推荐
相关产品推荐

