织梦表单提交查询代码如何实现?

99ANYc3cd6
预计阅读时长 33 分钟
位置: 首页 织梦建站 正文
  1. 创建表单页面:在前台模板中,用户填写并提交表单。
  2. 创建接收并处理数据的PHP文件:这是一个核心的中间文件,负责接收表单数据,查询数据库,并将结果返回。
  3. 创建显示查询结果的页面:用于展示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"inputname 属性非常重要,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>";
    }
}
?>

代码逻辑详解:

织梦表单提交查询代码
(图片来源网络,侵删)
  1. 引入核心文件require_once(dirname(__FILE__) . "/../include/common.inc.php"); 这行代码至关重要,它让我们的PHP脚本能够使用织梦的全局变量(如 $dsql 数据库连接对象)和函数。
  2. 安全处理:使用 isset, trim, htmlspecialchars 对用户提交的数据进行过滤,防止XSS攻击和SQL注入。注意LIKE 查询中的转义要格外小心,这里为了简化示例做了简单处理,在生产环境中应更严格。
  3. 数据库查询
    • 我们假设产品信息在 dede_archives (主表) 和 dede_addonarticle (文章模型附加表) 中。
    • $dsql 是织梦的数据库操作对象,使用 SetQuery 设置SQL语句,Execute 执行,GetArray 获取结果。
    • 请务必根据你的实际数据表结构和字段名修改 $sql 变量! 如果你用自定义字段存储价格,LEFT JOINSELECT 的部分都需要调整。
  4. 数据传递与跳转
    • 如果查询成功,我们将产品信息 $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>

代码逻辑详解:

  1. 检查 Session:首先检查 $_SESSION['inquiry_result'] 是否存在,如果不存在,直接退出,防止用户直接访问这个页面。
  2. 获取数据:从 session 中把之前存入的产品信息和用户信息取出来。
  3. 清除 Sessionunset() 清除 session 数据,这是一个好习惯,如果不清除,用户刷新页面时会看到重复的数据(并且可能会因为session过期而报错)。
  4. 展示数据:使用HTML和PHP将数据友好地展示出来,同样,使用 htmlspecialchars 对输出进行转义,防止XSS攻击。

总结与注意事项

  1. 路径问题:确保 /plus/ask.php/ask_result.php 的上传路径正确。
  2. 数据库表结构这是最关键的一步,你必须了解你的产品数据存在哪个表、哪个字段里,并相应地修改 ask.php 中的 $sql 查询语句,如果你使用的是自定义模型,附加表名可能是 dede_addonXX(XX是模型ID)。
  3. 权限问题:确保你的网站目录对PHP脚本的执行有正确的权限。
  4. SEO与用户体验:在实际项目中,你可能还需要将询价信息也保存到数据库中,方便后台查看和管理,而不是仅仅用 session 传递,可以添加更友好的URL重写规则。
  5. 安全性:示例中的SQL查询使用了 LIKE,这在简单场景下可用,但存在SQL注入风险,对于生产环境,更推荐使用织梦的 GetOneSelect 等安全方法,或者对输入参数进行更严格的过滤和转义。

通过以上三个步骤,你就成功地在织梦CMS中实现了一个完整的“表单提交-查询-显示结果”的功能流程。

-- 展开阅读全文 --
头像
dede模板如何运行php代码?
« 上一篇 今天
郑莉C语言课后答案哪里能找到?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]