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

PHP CRUD Update功能异常:无报错但数据未修改求助

PHP CRUD系统更新功能异常排查与修复

我的PHP CRUD系统中,除Update(更新)功能外其余功能均正常。点击更新按钮后无报错,页面跳转至首页并提示“Ticket modifie”,但数据库工单数据未变更。相关代码如下:

前端表单代码

<?php
  session_start();
  include 'connection.php';
?>

<!doctype html>
<html lang="en">
 <head>

<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">

<title>Ticket Edit</title>
</head>
<body>
  
    <div class="container mt-5">

        <?php include('msg.php'); ?>

        <div class="row">
            <div class="col-md-12">
                <div class="card">
                    <div class="card-header">
                        <h4>Ticket Edit 
                            <a href="homepage.php" class="btn btn-danger float-end">BACK</a>
                        </h4>
                    </div>
                    <div class="card-body">

                        <?php
                        if(isset($_GET['id']))
                        {
                            $ticket_id = mysqli_real_escape_string($conn, $_GET['id']);
                            $query = "SELECT * FROM tickets WHERE id='$ticket_id' ";
                            $query_run = mysqli_query($conn, $query);

                            if(mysqli_num_rows($query_run) > 0)
                            {
                                $ticket = mysqli_fetch_array($query_run);
                                ?>
                                <form action="crud.php" method="POST">
                                    <input type="hidden" name="ticket_id" value="<?= $ticket['id']; ?>">

                                    <div class="mb-3">
                                        <label>Username</label>
                                        <input type="text" name="username" value="<?=$ticket['username'];?>" class="form-control">
                                    </div>
                                    <div class="mb-3">
                                        <label>Titre</label>
                                        <input type="text" name="titre" value="<?=$ticket['titre'];?>" class="form-control">
                                    </div>
                                    <div class="mb-3">
                                        <label>Probleme</label>
                                        <input type="text" name="probleme" value="<?=$ticket['probleme'];?>" class="form-control">
                                    </div>
                                    <div class="mb-3">
                                        <label>Etat</label>
            
                                        <input type="radio" name="ouvert" value="<?=$ticket['etat'];?>"><label for="">Ouvert</label><br>
                                        <input type="radio" name="ferme" value="<?=$ticket['etat'];?>"><label for="">Ferme</label><br>
                                        <input type="radio" name="resolu" value="<?=$ticket['etat'];?>"><label for="">Resolu</label><br>

                                    </div>
                                    <div class="mb-3">
                                        <button type="submit" name="update" class="btn btn-primary">
                                            Update Ticket
                                        </button>
                                    </div>

                                </form>
                                <?php
                            }
                            else
                            {
                                echo "<h4>No Such Id Found</h4>";
                            }
                        }
                        ?>
                    </div>
                </div>
            </div>
        </div>
    </div>

</body>
</html>

更新处理代码(crud.php中)

if(isset($_POST['update'])){

$ticket_id = mysqli_real_escape_string($conn,$_POST['id']);

$username=mysqli_real_escape_string($conn,$_POST['username']);
$titre=mysqli_real_escape_string($conn,$_POST['titre']);
$probleme=mysqli_real_escape_string($conn,$_POST['probleme']);
$etat=mysqli_real_escape_string($conn,$_POST['etat']);

$query="UPDATE tickets SET username='$username', titre='$titre' , probleme='$probleme', etat='$etat' WHERE id='$ticket_id' ";
$query_run=mysqli_query($conn,$query);

if($query_run){
    $_SESSION['msg']="Ticket modifie";
    header("location: homepage.php");
    exit(0);
}else{
    $_SESSION['msg']="Ticket n'est pas modifie";
    header("location: affichage.php");
    exit(0);
}
}
?>

问题原因与修复方案

1. 隐藏字段名称不匹配

前端表单中隐藏字段的name是ticket_id,但后端处理代码中试图获取$_POST['id'],导致$ticket_id为空值。数据库执行UPDATE语句时,WHERE id=''匹配不到任何记录,所以数据没变更,但mysqli_query会返回true(语法无错误),因此跳转到首页并显示成功提示。

修复:
修改后端代码中的字段获取名称:

$ticket_id = mysqli_real_escape_string($conn,$_POST['ticket_id']);

2. 状态单选框配置错误

前端三个单选框使用了不同的name属性(ouvert、ferme、resolu),不属于同一组单选框,用户可同时选中多个,且后端无法通过$_POST['etat']获取值(无对应name的表单元素)。同时所有单选框的value都设为数据库旧值,用户选择后提交的还是原状态,无法更新。

修复:
统一单选框name为etat,设置对应value并根据当前状态默认选中:

<div class="mb-3">
    <label>Etat</label>
    <input type="radio" name="etat" value="Ouvert" <?= $ticket['etat'] == 'Ouvert' ? 'checked' : '' ?>><label for="">Ouvert</label><br>
    <input type="radio" name="etat" value="Ferme" <?= $ticket['etat'] == 'Ferme' ? 'checked' : '' ?>><label for="">Ferme</label><br>
    <input type="radio" name="etat" value="Resolu" <?= $ticket['etat'] == 'Resolu' ? 'checked' : '' ?>><label for="">Resolu</label><br>
</div>

3. 可选优化:添加更新有效性校验

为避免语法正确但无数据更新的误判,可检查受影响行数:

$query_run=mysqli_query($conn,$query);
if($query_run && mysqli_affected_rows($conn) > 0){
    $_SESSION['msg']="Ticket modifie";
    header("location: homepage.php");
    exit(0);
}else{
    $_SESSION['msg']="Ticket n'est pas modifie";
    header("location: affichage.php");
    exit(0);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:36:15