PHP_SELF代码报语法错误,寻求同页显示成功消息解决方案
解决PHP语法错误与表单提交后本地显示成功消息的方案
先来说你遇到的Syntax error问题——根源在你echo表单的action属性里:你在PHP的echo字符串里又嵌套了<?php ?>标签,这完全没必要,而且会导致语法解析失败。因为当前已经处于PHP代码块中,直接使用$_SERVER['PHP_SELF']变量拼接即可。
另外,你的代码还有几个需要优化的点,比如过时的mysql_*扩展(现在PHP已经不再支持,建议换成mysqli),以及SQL注入风险,还有表单提交后的反馈逻辑缺失。下面是修复并完善后的完整代码:
修复后的完整代码
<?php // 先处理表单提交逻辑 $successMessage = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['submitted'])) { // 初始化数据库连接(请替换为你的数据库信息) $conn = mysqli_connect('localhost', 'your_username', 'your_password', 'your_dbname'); if (!$conn) { die("数据库连接失败: " . mysqli_connect_error()); } // 过滤用户输入,防范SQL注入 $id = mysqli_real_escape_string($conn, $_POST['id']); $title = mysqli_real_escape_string($conn, $_POST['title']); $name = mysqli_real_escape_string($conn, $_POST['name']); $message = mysqli_real_escape_string($conn, $_POST['message']); // 执行帖子更新操作 $updateQuery = "UPDATE news_posts SET title='$title', author='$name', post='$message' WHERE id='$id'"; if (mysqli_query($conn, $updateQuery)) { $successMessage = "帖子更新成功!"; } else { $successMessage = "更新失败: " . mysqli_error($conn); } mysqli_close($conn); } // 获取要编辑的帖子信息(假设id通过GET参数传递) $id = isset($_GET['id']) ? $_GET['id'] : 0; $conn = mysqli_connect('localhost', 'your_username', 'your_password', 'your_dbname'); $result = mysqli_query($conn, "SELECT title, author, post, id FROM news_posts WHERE id='$id'"); $num = mysqli_num_rows($result); ?> <!DOCTYPE html> <html> <head> <title>编辑帖子</title> </head> <body> <!-- 显示提交后的反馈消息 --> <?php if (!empty($successMessage)): ?> <div style="color: #2ecc71; font-weight: bold; margin: 10px 0; padding: 8px; border-radius: 4px; background: #f0f9f4;"> <?php echo $successMessage; ?> </div> <?php endif; ?> <?php if ($num == 1): ?> <?php $row = mysqli_fetch_array($result, MYSQLI_NUM); ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> <p><b>Post Title :</b><br /> <input type="text" class="form-control" name="title" value="<?php echo htmlspecialchars($row[0]); ?>" /></p> <p><input type="hidden" name="name" size="15" maxlength="255" value="<?php echo htmlspecialchars($row[1]); ?>" /></p> <p><b>Post Message :</b><br /> <textarea rows="7" class="form-control" name="message"><?php echo htmlspecialchars($row[2]); ?></textarea></p> <p> <input type="button" value="Back" onclick="history.back()"> <input type="submit" name="submit" value="Submit" /> </p> <input type="hidden" name="submitted" value="TRUE" /> <input type="hidden" name="id" value="<?php echo htmlspecialchars($row[3]); ?>" /> </form> <?php else: ?> <p>News post could not be edited, please try again.</p> <?php endif; ?> </body> </html>
关键修复&优化说明
语法错误修复:
- 把表单
action里的嵌套PHP标签改成直接输出变量:<?php echo $_SERVER['PHP_SELF']; ?>,避免在PHP代码块内重复开启PHP解析。 - 改用PHP与HTML分离的写法,比原来的echo拼接HTML更易读,也减少了语法出错的概率。
- 把表单
本地显示提交反馈:
- 在页面顶部添加POST请求处理逻辑,完成数据库更新后设置
$successMessage变量。 - 在页面主体位置判断变量是否为空,不为空则渲染消息区域,提交后页面刷新即可直接看到结果,无需跳转。
- 在页面顶部添加POST请求处理逻辑,完成数据库更新后设置
安全性与兼容性升级:
- 替换过时的
mysql_*函数为mysqli_*(PHP7+已彻底移除mysql_*扩展)。 - 使用
mysqli_real_escape_string()过滤用户输入防范SQL注入,用htmlspecialchars()输出变量到HTML中防范XSS攻击。
- 替换过时的
补充核心逻辑:你原来的代码只有查询表单的逻辑,缺少表单提交后的更新操作,我补上了这部分,确保表单提交后能真正修改数据库内容并触发成功消息。
内容的提问来源于stack exchange,提问作者Victor Shatera
相关产品推荐
相关产品推荐

