You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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>

关键修复&优化说明

  1. 语法错误修复:

    • 把表单action里的嵌套PHP标签改成直接输出变量:<?php echo $_SERVER['PHP_SELF']; ?>,避免在PHP代码块内重复开启PHP解析。
    • 改用PHP与HTML分离的写法,比原来的echo拼接HTML更易读,也减少了语法出错的概率。
  2. 本地显示提交反馈:

    • 在页面顶部添加POST请求处理逻辑,完成数据库更新后设置$successMessage变量。
    • 在页面主体位置判断变量是否为空,不为空则渲染消息区域,提交后页面刷新即可直接看到结果,无需跳转。
  3. 安全性与兼容性升级:

    • 替换过时的mysql_*函数为mysqli_*(PHP7+已彻底移除mysql_*扩展)。
    • 使用mysqli_real_escape_string()过滤用户输入防范SQL注入,用htmlspecialchars()输出变量到HTML中防范XSS攻击。
  4. 补充核心逻辑:你原来的代码只有查询表单的逻辑,缺少表单提交后的更新操作,我补上了这部分,确保表单提交后能真正修改数据库内容并触发成功消息。

内容的提问来源于stack exchange,提问作者Victor Shatera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:37:02