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

PHP博客编辑更新数据库时字段为空问题求助

PHP博客编辑功能修复方案

核心问题分析

你的代码存在几个关键错误,导致提交后POST变量为空、数据库字段被更新为空值:

  1. 表单提交时丢失edit_id参数,无法触发更新逻辑
  2. 表单字段名与PHP代码中的变量名不匹配(select的name是statuss,但代码中用$_POST['aktivs']获取)
  3. 错误的请求判断逻辑,页面加载时就执行更新操作,导致空值写入数据库
  4. 无条件调用更新函数,GET请求时也会执行更新

分步修复

1. 在表单中添加隐藏字段传递edit_id

提交表单时需要携带文章ID,在表单内添加隐藏input:

<form method="post" action="blog_form.php">
    <!-- 添加隐藏字段传递编辑ID -->
    <input type="hidden" name="edit_id" value="<?php echo isset($_GET['edit_id']) ? $_GET['edit_id'] : ''; ?>">
    
    <!-- 原有表单字段保持不变 -->
    <label>Virsraksts:</label>
    <input type="text" id="title" name="virsraksts" required="required"  value="<?php echo htmlspecialchars($edit_virsraksts); ?>">
    <!-- ...其他字段 -->
</form>

2. 修改更新函数的触发逻辑

更新labot_blog函数,修正参数获取和请求判断:

function labot_blog(){
    global $con;
    
    // 仅在POST请求且携带edit_id时执行更新
    if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['edit_id'])){
        // 从POST获取表单数据,修正字段名匹配
        $edit_virsraksts = $_POST['virsraksts'];
        echo('Virsraksts ir:'.$edit_virsraksts);
        $edit_autors = $_POST['autors'];
        $edit_saturs = $_POST['saturs'];
        
        // 匹配表单select的name="statuss"和选项值
        if($_POST['statuss'] == 'aktīvs'){
            $edit_statuss = 1;
        }else{
            $edit_statuss = 0;    
        }
        
        $edit_publisks = isset($_POST['publisks']) ? 1 : 0;
        
        // 从POST获取ID,避免依赖全局变量
        $id = intval($_POST['edit_id']);
        
        // 构造更新语句(先保证功能,后续需处理SQL注入)
        $query = "UPDATE blogs SET virsraksts = '".$edit_virsraksts."' , autors = '".$edit_autors."', saturs = '".$edit_saturs."',
                  aktivs = '".$edit_statuss."', publisks = '".$edit_publisks."' WHERE id=".$id;
        
        $result = mysqli_query($con, $query);
        echo $query;
        if ($result) {
            echo 'Labošanas funkcija izsaukta un izpildīta veiksmīgi!';
        } else {
            echo 'Kļūda: ' . mysqli_error($con);
        }
    }
}

3. 仅在POST请求时调用更新函数

在表单页面中,不要无条件调用labot_blog(),仅当POST请求时执行:

<?php
// 替换原有直接调用的代码
if($_SERVER['REQUEST_METHOD'] === 'POST'){
    labot_blog();
}
?>

4. 清理无效代码

删除函数文件中这段错误的$_POST初始化代码($_POST永远存在,该判断无效):

// 删掉这段代码
if(!isset($_POST)){
    $_POST['virsraksts']='';
    $_POST['autors']='';
    $_POST['saturs']='';
    $_POST['aktivs']='';
    $_POST['publisks']='';
    $virs_raksts='';
    $autors='';
    $saturs='';
    $statuss='';
    $pub='';
    $result='';
}

额外优化建议

  • 所有输出到HTML的变量都用htmlspecialchars()转义,避免XSS攻击,比如$edit_autors和$edit_saturs:
    <input type="text" name="autors" id="author" required="required" value="<?php echo htmlspecialchars($edit_autors); ?>">
    <textarea name="saturs" id="content" required="required"><?php echo htmlspecialchars($edit_saturs); ?></textarea>
    
  • 后续务必处理SQL注入问题,使用mysqli预处理语句(prepare() + bind_param())替代直接拼接SQL字符串
  • 数据库labots(修改日期)字段可设置为自动更新,或在更新语句中添加labots = NOW()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 02:08:09