点击提交按钮时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函数未被调用,无法更新数据库。
核心问题及修复步骤
混淆前端JS与后端PHP的执行逻辑
- 按钮上的
onclick="submitData()"是调用前端JavaScript函数,但submitData()是你定义的PHP后端函数,前端无法直接触发服务器端的PHP函数。 - 修复:删除按钮的
onclick属性,在页面最顶部主动调用submitData()——表单提交后会触发服务器请求,此时PHP会在服务器端执行该函数处理POST数据:<?php // 页面开头先执行提交处理 submitData(); // 后续再定义函数和输出页面内容 function getTitle() { ... } function submitData() { ... } ?>
- 按钮上的
表单代码存在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>
- 表单中
存在严重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']); } }
- 当前SQL语句直接拼接
内容的提问来源于stack exchange,提问作者mowsie2k
相关产品推荐
相关产品推荐

