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

如何用PHP $_SERVER['PHP_SELF']实现表单数据存MySQL并自动打印

实现PHP表单提交入库后自动打印数据

嘿,既然你已经搞定了表单数据写入MySQL的部分,那加上自动打印功能其实很简单。咱们直接基于你的现有代码调整,核心思路是:表单提交成功入库后,渲染出要打印的数据,再用JS自动触发浏览器打印功能,同时用CSS控制只打印需要的内容。

完整代码示例

<?php
// 数据库连接配置(根据你的实际情况修改)
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

// 定义表单提交的目标页面(就是当前页面)
$editFormAction = $_SERVER['PHP_SELF'];

// 处理表单提交
$printedData = null;
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // 假设你的表单字段是name、email、content(根据实际字段修改)
    $name = $conn->real_escape_string($_POST['name']);
    $email = $conn->real_escape_string($_POST['email']);
    $content = $conn->real_escape_string($_POST['content']);

    // 插入数据库的SQL语句
    $sql = "INSERT INTO your_table (name, email, content) VALUES ('$name', '$email', '$content')";

    if ($conn->query($sql) === TRUE) {
        // 获取刚插入的数据(可以用806584查询)
        $lastId = $conn->insert_id;
        $selectSql = "SELECT * FROM your_table WHERE id = $lastId";
        $result = $conn->query($selectSql);
        if ($result->num_rows > 0) {
            $printedData = $result->fetch_assoc();
        }
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }
}

$conn->close();
?>

<!DOCTYPE html>
<html>
<head>
    <title>表单提交与自动打印</title>
    <style>
        /* 打印样式:只显示打印容器,隐藏其他内容 */
        @media print {
            body * {
                visibility: hidden;
            }
            .print-container, .print-container * {
                visibility: visible;
            }
            .print-container {
                position: absolute;
                left: 0;
                top: 0;
            }
        }
    </style>
</head>
<body>
    <!-- 你的表单 -->
    <form method="post" name="form1" action="<?php echo $editFormAction; ?>" target="_parent">
        <label>姓名:</label>
        <input type="text" name="name" required><br>
        <label>邮箱:</label>
        <input type="email" name="email" required><br>
        <label>内容:</label>
        <textarea name="content" required></textarea><br>
        <input type="submit" value="提交并打印">
    </form>

    <!-- 打印内容容器:只有提交成功后才显示 -->
    <?php if ($printedData): ?>
    <div class="print-container">
        <h2>提交成功,以下是您的信息:</h2>
        <p><strong>姓名:</strong> <?php echo htmlspecialchars($printedData['name']); ?></p>
        <p><strong>邮箱:</strong> <?php echo htmlspecialchars($printedData['email']); ?></p>
        <p><strong>内容:</strong> <?php echo htmlspecialchars($printedData['content']); ?></p>
    </div>

    <script>
        // 页面加载完成后自动触发打印
        window.onload = function() {
            window.print();
        };
    </script>
    <?php endif; ?>
</body>
</html>

关键说明

  • 数据库操作部分:用real_escape_string()防止SQL注入,插入成功后通过insert_id获取刚插入的记录ID,再查询出完整数据用于打印。
  • 打印样式控制:通过@media print CSS规则,只让.print-container里的内容在打印时可见,避免打印表单等无关内容。
  • 自动打印触发:当有需要打印的数据时,在页面加载完成后调用window.print(),自动弹出打印对话框。
  • XSS防护:用htmlspecialchars()转义输出的内容,防止恶意脚本注入。

注意事项

  1. 替换代码中的数据库连接信息、表名、表单字段为你实际的配置。
  2. 如果不需要显示打印内容在页面上,可以给.print-container加display: none;,但打印样式里要改成display: block;,这样页面上看不到,但打印时会显示。
  3. 部分浏览器可能会阻止自动打印,这是浏览器的安全限制,用户需要手动允许一次,之后就可以正常触发了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:14:58