如何用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 printCSS规则,只让.print-container里的内容在打印时可见,避免打印表单等无关内容。 - 自动打印触发:当有需要打印的数据时,在页面加载完成后调用
window.print(),自动弹出打印对话框。 - XSS防护:用
htmlspecialchars()转义输出的内容,防止恶意脚本注入。
注意事项
- 替换代码中的数据库连接信息、表名、表单字段为你实际的配置。
- 如果不需要显示打印内容在页面上,可以给
.print-container加display: none;,但打印样式里要改成display: block;,这样页面上看不到,但打印时会显示。 - 部分浏览器可能会阻止自动打印,这是浏览器的安全限制,用户需要手动允许一次,之后就可以正常触发了。
内容的提问来源于stack exchange,提问作者Damiron
相关产品推荐
相关产品推荐

