PHP初学者遇语法错误,求助实现发帖展示与内容长度校验逻辑
解决PHP语法错误+实现发帖验证与展示功能
首先咱们先搞定那个烦人的语法错误:Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE)... 这个错误90%的情况是字符串拼接/变量嵌入双引号时的格式问题。比如你可能在双引号字符串里直接写了数组变量,像$_SESSION['user_id'],这时候PHP会把['user_id']当成字符串的一部分,导致解析失败。
修复语法错误的正确写法
举个你代码里$strQuery的常见错误场景和修正方案:
// 错误写法(会触发你遇到的报错) $strQuery = "SELECT * FROM posts WHERE user_id = $_SESSION['user_id']"; // 正确写法1:用大括号包裹数组变量 $strQuery = "SELECT * FROM posts WHERE user_id = {$_SESSION['user_id']}"; // 正确写法2:改用单引号字符串+拼接(更直观,避免引号冲突) $strQuery = 'SELECT * FROM posts WHERE user_id = ' . $_SESSION['user_id'];
如果你的line235不是这个场景,大概率是引号不匹配——比如双引号里嵌套了未转义的双引号,或者字符串结尾漏了引号,你可以检查下那行附近的代码,按这个思路排查。
实现发帖验证+主页展示功能
接下来咱们一步步实现你要的功能,全程用安全的写法(避免SQL注入):
1. 表单提交处理页(比如submit_post.php)
首先要开启Session(所有用到Session的页面顶部都要加),然后做内容验证:
<?php session_start(); // 确保用户已登录(可选,根据你的需求) if (!isset($_SESSION['user_id'])) { header('Location: login.php'); exit; } // 处理POST提交 if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 接收并清理发帖内容 $post_content = trim($_POST['post_content']); $content_length = strlen($post_content); // 验证长度(注意:长度不可能小于0,所以改成判断是否为空或超过160) if ($content_length === 0 || $content_length > 160) { // 把错误信息存在Session里,方便跳转后显示 $_SESSION['post_error'] = '发帖内容不能为空,且长度不能超过160字符!'; // 跳转回发帖页面 header('Location: post_form.php'); exit; } // 内容有效,插入数据库(用预处理语句防SQL注入) // 假设你已经有数据库连接$conn $insert_sql = "INSERT INTO posts (user_id, content, created_at) VALUES (?, ?, NOW())"; $stmt = $conn->prepare($insert_sql); // 绑定参数:'i'表示整数(user_id),'s'表示字符串(content) $stmt->bind_param('is', $_SESSION['user_id'], $post_content); if ($stmt->execute()) { // 插入成功,跳转回个人主页 header('Location: homepage.php'); } else { $_SESSION['post_error'] = '发帖失败,请稍后重试'; header('Location: post_form.php'); } exit; } ?>
2. 个人主页展示帖子(homepage.php)
在主页查询并展示当前用户的帖子,记得转义内容防止XSS攻击:
<?php session_start(); if (!isset($_SESSION['user_id'])) { header('Location: login.php'); exit; } // 查询用户的帖子(按发布时间倒序,最新的在前) $strQuery = "SELECT content, created_at FROM posts WHERE user_id = {$_SESSION['user_id']} ORDER BY created_at DESC"; $result = $conn->query($strQuery); ?> <!-- HTML部分 --> <div class="user-posts"> <h2>我的帖子</h2> <?php if ($result->num_rows > 0): ?> <?php while ($post = $result->fetch_assoc()): ?> <div class="post-item"> <!-- 用htmlspecialchars转义内容,防止XSS --> <p><?php echo htmlspecialchars($post['content']); ?></p> <small>发布于:<?php echo date('Y-m-d H:i', strtotime($post['created_at'])); ?></small> </div> <?php endwhile; ?> <?php else: ?> <p>你还没有发布任何帖子,快去发一条吧!</p> <?php endif; ?> </div>
3. 发帖页面显示错误信息(post_form.php)
在发帖页面顶部加上错误信息的显示:
<?php session_start(); ?> <!-- 显示错误信息 --> <?php if (isset($_SESSION['post_error'])): ?> <div class="error-message"> <?php echo $_SESSION['post_error']; ?> <?php unset($_SESSION['post_error']); // 显示后清除错误信息 ?> </div> <?php endif; ?> <!-- 发帖表单 --> <form method="POST" action="submit_post.php"> <textarea name="post_content" rows="3" placeholder="分享你的想法(最多160字)"></textarea> <button type="submit">发布帖子</button> </form>
内容的提问来源于stack exchange,提问作者Nigel Perey
相关产品推荐
相关产品推荐

