PHP 7.4 不支持直接拖放排序,需前端用 SortableJS 实现拖拽并以 AJAX 提交新顺序,后端解析 JSON、校验数据,通过 PDO 事务安全更新 MySQL 的 sort_order 字段或写入 JSON 文件持久化。

PHP 7.4 本身不直接支持文字拖放排序,因为拖放(Drag & Drop)是前端浏览器行为,需靠 HTML + JavaScript 实现;PHP 在这里只负责接收、保存排序后的数据。实现文字拖放排序的关键是:前端用 sortable 类库(如 SortableJS)完成可视化拖拽,再通过 AJAX 把新顺序提交给 PHP 7.4 后端处理并持久化(如存入数据库或文件)。
前端:用 SortableJS 实现文字项拖放
在页面中列出可排序的文字项(例如 <li> 或 <div>),引入 SortableJS,初始化拖拽功能,并监听排序变化:
<ul id="itemList">
<li data-id="1">苹果</li>
<li data-id="2">香蕉</li>
<li data-id="3">橙子</li>
</ul>
<script src="https://cdn.jsdelivr.net/npm/sortablejs@1.15.0/Sortable.min.js"></script>
<script>
const el = document.getElementById('itemList');
new Sortable(el, {
animation: 150,
onEnd: function (evt) {
const order = Array.from(el.children).map((li, index) => ({
id: li.dataset.id,
sort: index + 1
}));
fetch('save_order.php', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(order)
});
}
});
</script>
后端:PHP 7.4 接收并保存排序结果
创建 save_order.php,启用 JSON 输入解析,校验数据,然后写入 MySQL 或其他存储。示例(MySQL + PDO):
- 开启
json_decode(file_get_contents('php://input'))读取原始 JSON - 遍历排序数组,用预处理语句更新每条记录的
sort_order字段 - 确保
id是整型,防止注入;事务包裹提升一致性
<?php
header('Content-Type: application/json; charset=utf-8');
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
echo json_encode(['error' => 'Method not allowed']);
exit;
}
$input = file_get_contents('php://input');
$data = json_decode($input, true);
if (!is_array($data)) {
http_response_code(400);
echo json_encode(['error' => 'Invalid JSON']);
exit;
}
try {
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4', $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);
$pdo->beginTransaction();
$stmt = $pdo->prepare("UPDATE items SET sort_order = ? WHERE id = ?");
foreach ($data as $item) {
$id = (int)$item['id'];
$sort = (int)$item['sort'];
$stmt->execute([$sort, $id]);
}
$pdo->commit();
echo json_encode(['success' => true]);
} catch (Exception $e) {
$pdo->rollback();
http_response_code(500);
echo json_encode(['error' => 'Save failed']);
}>
补充:纯文件存储(无数据库时)
若只需轻量级方案(如配置项排序),可用 PHP 直接写入 JSON 文件:
立即学习“PHP免费学习笔记(深入)”;
- 读取现有
order.json,按前端传来的顺序重排数组 - 用
file_put_contents(..., JSON_PRETTY_PRINT)保存 - 注意
chmod权限,确保 Web 服务器有写权限
注意事项与常见问题
- 前端发送的
data-id必须与数据库主键一致,否则更新无效 - PHP 7.4 默认支持
json_decode和PDO,无需额外扩展(确认已启用php-pdo和php-mysql) - 跨域请求需在 PHP 响应头加
Access-Control-Allow-Origin(如开发环境) - 移动端需开启
forceFallback: true兼容触摸事件



















