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

点击提交按钮时PHP函数submitData未被调用,求排查解决

问题:点击表单提交按钮无法调用PHP的submitData函数

我的PHP代码(get函数可正常运行)

<?php 
function getTitle()
{
    $connection = new PDO('mysql:host=x.x.x.x;dbname=x;charset=utf8', 'x', 'xxxx');
    $query      = $connection->query("SELECT `value` FROM `services` WHERE `type` = 'title';");
    $data     = $query->fetchAll(PDO::FETCH_COLUMN);
    echo '<textarea id="services-title" name="services-title" rows="1">' . htmlentities($data[0]) . '</textarea>';
}

function submitData()
{
    $connection = new PDO('mysql:host=x.x.x.x;dbname=xx;charset=utf8', 'xx', 'xxxx');
    if (isset($_POST['submit'])) {
        $query = $connection->query("UPDATE `services` SET `value`='" . $_POST['services-description'] . "' WHERE `type`='description';");
        $query->execute();
        $query = $connection->query("UPDATE `services` SET `value`='" . $_POST['services-meta_keywords'] . "' WHERE `type`='meta_keywords';");
        $query->execute();
        $query = $connection->query("UPDATE `services` SET `value`='" . $_POST['services-title'] . "' WHERE `type`='title';");
        $query->execute();
        $query = $connection->query("UPDATE `services` SET `value`='" . htmlspecialchars($_POST['services-content']) . "' WHERE `type`='content';");
        $query->execute();
    }
}

我的表单代码

<form method="post">
<h2>Metadata</h2>
<h3>Description</h3>
<?php
<h3>Title</h3>
<?php
getTitle();
?>
<div class="flex-row-right">
<input type="submit" name="submit" value="submit" onclick="submitData()" />
</div>
</form>

问题描述

点击表单提交按钮时,submitData函数未被调用,无法更新数据库。


核心问题及修复步骤

  1. 混淆前端JS与后端PHP的执行逻辑

    • 按钮上的onclick="submitData()"是调用前端JavaScript函数,但submitData()是你定义的PHP后端函数,前端无法直接触发服务器端的PHP函数。
    • 修复:删除按钮的onclick属性,在页面最顶部主动调用submitData()——表单提交后会触发服务器请求,此时PHP会在服务器端执行该函数处理POST数据:
      <?php
      // 页面开头先执行提交处理
      submitData();
      
      // 后续再定义函数和输出页面内容
      function getTitle() { ... }
      function submitData() { ... }
      ?>
      
  2. 表单代码存在PHP语法错误

    • 表单中<h3>Title</h3>直接写在未闭合的<?php标签后,会导致PHP解析失败,页面无法正常渲染,间接影响提交逻辑。
    • 修复:修正表单的PHP标签:
      <form method="post">
      <h2>Metadata</h2>
      <h3>Description</h3>
      <h3>Title</h3>
      <?php
      getTitle();
      ?>
      <div class="flex-row-right">
      <input type="submit" name="submit" value="submit" />
      </div>
      </form>
      
  3. 存在严重SQL注入风险(必须修复)

    • 当前SQL语句直接拼接$_POST参数,攻击者可构造恶意输入篡改SQL语句,窃取或破坏数据库数据。
    • 修复:使用PDO预处理语句绑定参数:
      function submitData()
      {
          $connection = new PDO('mysql:host=x.x.x.x;dbname=xx;charset=utf8', 'xx', 'xxxx');
          if (isset($_POST['submit'])) {
              $stmt = $connection->prepare("UPDATE `services` SET `value`=? WHERE `type`=?;");
              $stmt->execute([$_POST['services-description'], 'description']);
              $stmt->execute([$_POST['services-meta_keywords'], 'meta_keywords']);
              $stmt->execute([$_POST['services-title'], 'title']);
              $stmt->execute([htmlspecialchars($_POST['services-content']), 'content']);
          }
      }
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:45:40