- 创建表单页面:在前台模板中,用户填写并提交表单。
- 创建接收并处理数据的PHP文件:这是一个核心的中间文件,负责接收表单数据,查询数据库,并将结果返回。
- 创建显示查询结果的页面:用于展示PHP文件查询到的数据。
下面我将通过一个详细的 “在线询价” 示例,为你讲解每一步的代码实现。

(图片来源网络,侵删)
场景示例:一个产品询价表单
用户输入产品名称,提交后,系统查询出该产品的信息,并显示在结果页面上。
第一步:创建表单页面 (ask.htm)
这个页面是用户看到的表单,我们把它放在织梦的模板目录下,/templets/default/ask.htm。
/templets/default/ask.htm 代码:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">产品询价</title>
</head>
<body>
<h1>产品询价</h1>
<form action="/plus/ask.php" method="post">
<!--
action="/plus/ask.php": 指定表单提交的地址。
我们将在第三步创建这个PHP文件,并把它放在网站的 /plus/ 目录下。
method="post": 使用POST方法提交数据,更安全,适合提交敏感信息。
-->
<p>
<label for="product_name">产品名称:</label>
<input type="text" name="product_name" id="product_name" required>
</p>
<p>
<label for="contact_name">您的姓名:</label>
<input type="text" name="contact_name" id="contact_name" required>
</p>
<p>
<label for="contact_phone">联系电话:</label>
<input type="text" name="contact_phone" id="contact_phone" required>
</p>
<p>
<label for="message">备注信息:</label>
<textarea name="message" id="message" rows="4"></textarea>
</p>
<p>
<input type="submit" value="提交询价">
</p>
</form>
</body>
</html>
关键点说明:

(图片来源网络,侵删)
<form action="/plus/ask.php" method="post">:这是核心。action指向我们即将创建的处理脚本,method必须是post。name="product_name":input的name属性非常重要,PHP脚本将通过这个name来获取用户输入的值。required:HTML5属性,表示该字段为必填项。
第二步:创建接收并处理数据的PHP文件 (ask.php)
这是整个功能的核心,它负责接收表单数据,连接数据库进行查询,然后将结果传递给结果页面。
请将以下代码保存为 ask.php,并上传到您网站的 /plus/ 目录下。
/plus/ask.php 代码:
<?php
/**
* 产品询价处理脚本
* 文件位置: /plus/ask.php
*/
// 1. 引入织梦的核心文件,确保可以调用织梦的函数和配置
// define('DEDEINC', dirname(__FILE__).'/../include');
// require_once(DEDEINC.'/common.inc.php');
// 如果你的织梦版本较新,或者上面的路径不工作,可以尝试下面这行
require_once(dirname(__FILE__) . "/../include/common.inc.php");
// 2. 安全处理:防止SQL注入
$product_name = isset($_POST['product_name']) ? trim(htmlspecialchars($_POST['product_name'], ENT_QUOTES)) : '';
$contact_name = isset($_POST['contact_name']) ? trim($_POST['contact_name']) : '';
$contact_phone = isset($_POST['contact_phone']) ? trim($_POST['contact_phone']) : '';
$message = isset($_POST['message']) ? trim($_POST['message']) : '';
// 简单验证
if (empty($product_name) || empty($contact_name) || empty($contact_phone)) {
ShowMsg('请填写所有必填项!', '-1');
exit();
}
// 3. 查询数据库
// 假设我们的产品信息存储在 dede_addonarticle 表中(这是文章模型的附加表)
// 并且产品名称在 `title` 字段,价格在 `body` 字段(或自定义字段)
// 请根据你的实际情况修改表名、字段名和查询条件
// 查询条件
$where = " WHERE a.title LIKE '%$product_name%' ";
// 执行查询
$sql = "SELECT a.*, m.body as product_body
FROM dede_archives a
LEFT JOIN dede_addonarticle m ON a.id = m.aid
$where
LIMIT 1"; // 限制只返回一个结果
$dsql->SetQuery($sql);
$dsql->Execute('product_query');
$product_info = $dsql->GetArray('product_query');
// 4. 准备数据并跳转到结果页面
if ($product_info) {
// 如果查询到产品,将产品信息和用户提交的信息存入session,以便结果页面使用
// 使用session是传递数据的一种好方法,尤其当数据较多时
$_SESSION['inquiry_result'] = $product_info;
$_SESSION['inquiry_user_info'] = [
'contact_name' => $contact_name,
'contact_phone' => $contact_phone,
'message' => $message
];
// 跳转到结果页面
header("Location: /ask_result.php");
exit();
} else {
// 如果没有查询到产品
ShowMsg('未找到名为 "' . $product_name . '" 的产品,请检查名称是否正确!', '-1');
exit();
}
/**
* 织梦自带的提示函数
* @param string $msg 提示信息
* @param string $gourl 跳转地址,-1表示返回上一页
*/
function ShowMsg($msg, $gourl)
{
echo "<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />";
echo "<script>alert('$msg');</script>";
if ($gourl != '-1') {
echo "<script>window.location='$gourl';</script>";
} else {
echo "<script>history.go(-1);</script>";
}
}
?>
代码逻辑详解:

(图片来源网络,侵删)
- 引入核心文件:
require_once(dirname(__FILE__) . "/../include/common.inc.php");这行代码至关重要,它让我们的PHP脚本能够使用织梦的全局变量(如$dsql数据库连接对象)和函数。 - 安全处理:使用
isset,trim,htmlspecialchars对用户提交的数据进行过滤,防止XSS攻击和SQL注入。注意:LIKE查询中的转义要格外小心,这里为了简化示例做了简单处理,在生产环境中应更严格。 - 数据库查询:
- 我们假设产品信息在
dede_archives(主表) 和dede_addonarticle(文章模型附加表) 中。 $dsql是织梦的数据库操作对象,使用SetQuery设置SQL语句,Execute执行,GetArray获取结果。- 请务必根据你的实际数据表结构和字段名修改
$sql变量! 如果你用自定义字段存储价格,LEFT JOIN和SELECT的部分都需要调整。
- 我们假设产品信息在
- 数据传递与跳转:
- 如果查询成功,我们将产品信息
$product_info和用户信息存入$_SESSION。 - 然后使用
header("Location: /ask_result.php");页面跳转到我们创建的结果页面。 - 如果查询失败,使用织梦自带的
ShowMsg()函数弹窗并返回。
- 如果查询成功,我们将产品信息
第三步:创建显示查询结果的页面 (ask_result.php)
这个页面负责从 session 中取出数据,并格式化展示给用户。
请将以下代码保存为 ask_result.php,并上传到您网站的根目录。
/ask_result.php 代码:
<?php
/**
* 产品询价结果页面
* 文件位置: /ask_result.php
*/
// 1. 引入织梦核心文件(如果需要调用织梦函数)
// require_once(dirname(__FILE__) . "/include/common.inc.php");
// 2. 检查session中是否有结果数据,如果没有,说明是非法访问
if (!isset($_SESSION['inquiry_result'])) {
echo "非法访问!请通过表单提交查询。";
exit;
}
// 3. 从session中取出数据
$product = $_SESSION['inquiry_result'];
$user_info = $_SESSION['inquiry_user_info'];
// 4. 清除session数据,防止刷新页面重复显示
unset($_SESSION['inquiry_result']);
unset($_SESSION['inquiry_user_info']);
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">询价结果</title>
<style>
body { font-family: Arial, sans-serif; line-height: 1.6; margin: 20px; }
.result-box { border: 1px solid #ccc; padding: 20px; border-radius: 5px; }
.product-info h2 { color: #0056b3; }
.product-info p { margin: 10px 0; }
.user-info h3 { color: #28a745; margin-top: 30px; }
.user-info p { margin: 5px 0; }
</style>
</head>
<body>
<div class="result-box">
<?php if ($product): ?>
<div class="product-info">
<h2>产品询价成功!</h2>
<p><strong>产品名称:</strong><?php echo $product['title']; ?></p>
<!-- 注意:产品详情通常在附加表里,这里是示例 -->
<p><strong>产品详情:</strong><?php echo $product['product_body']; ?></p>
<!-- 如果你有价格字段,可以这样显示 -->
<!-- <p><strong>产品价格:</strong><?php echo $product['price_field']; ?></p> -->
</div>
<div class="user-info">
<h3>您的联系方式已记录,我们会尽快与您联系!</h3>
<p><strong>联系人:</strong><?php echo htmlspecialchars($user_info['contact_name']); ?></p>
<p><strong>联系电话:</strong><?php echo htmlspecialchars($user_info['contact_phone']); ?></p>
<p><strong>备注信息:</strong><?php echo nl2br(htmlspecialchars($user_info['message'])); ?></p>
</div>
<?php else: ?>
<p>抱歉,系统暂时无法显示询价结果,请稍后再试或联系客服。</p>
<?php endif; ?>
</div>
</body>
</html>
代码逻辑详解:
- 检查 Session:首先检查
$_SESSION['inquiry_result']是否存在,如果不存在,直接退出,防止用户直接访问这个页面。 - 获取数据:从
session中把之前存入的产品信息和用户信息取出来。 - 清除 Session:
unset()清除session数据,这是一个好习惯,如果不清除,用户刷新页面时会看到重复的数据(并且可能会因为session过期而报错)。 - 展示数据:使用HTML和PHP将数据友好地展示出来,同样,使用
htmlspecialchars对输出进行转义,防止XSS攻击。
总结与注意事项
- 路径问题:确保
/plus/ask.php和/ask_result.php的上传路径正确。 - 数据库表结构:这是最关键的一步,你必须了解你的产品数据存在哪个表、哪个字段里,并相应地修改
ask.php中的$sql查询语句,如果你使用的是自定义模型,附加表名可能是dede_addonXX(XX是模型ID)。 - 权限问题:确保你的网站目录对PHP脚本的执行有正确的权限。
- SEO与用户体验:在实际项目中,你可能还需要将询价信息也保存到数据库中,方便后台查看和管理,而不是仅仅用
session传递,可以添加更友好的URL重写规则。 - 安全性:示例中的SQL查询使用了
LIKE,这在简单场景下可用,但存在SQL注入风险,对于生产环境,更推荐使用织梦的GetOne或Select等安全方法,或者对输入参数进行更严格的过滤和转义。
通过以上三个步骤,你就成功地在织梦CMS中实现了一个完整的“表单提交-查询-显示结果”的功能流程。
