【问题标题】:"Issue with updating a record using a button”“使用按钮更新记录的问题”
【发布时间】:2019-10-15 15:48:59
【问题描述】:

当我点击更新按钮时,SQL 查询会更新最后一条记录,而不是想要的记录

当显示几门课程时,我想给用户确认其中一门课程的权利,当我点击更新按钮时,它会更新最后一条记录

<?php
$cc = mysqli_query($mysqli, "SELECT * from course WHERE c_email ='$emailu' AND course_situation='pending'");
while($ccc = mysqli_fetch_array($cc)) {
    $idcourse = $ccc['idcourse'];
    $city = $ccc['idville'];
    $pickup = $ccc['course_depart'];
    ?>
    <tr>
        <td><?= $idcourse ?></td>
        <td><?= $pickup ?></td>
        <td><?php echo $ccc['course_date'] ?>, <?php echo
            $ccc['course_heure'] ?></td>
        <td>
            <?php
            if($ccc['course_situation'] == "pending") { ?>
                <span class="badge badge-danger">Pending</span>
            <?php } else { ?>
                <span class="badge badge-success">Confirmed</span>
            <?php } ?>
        </td>
        <td><?php echo $ccc['c_phone'] ?></td>
        <td><?php echo $ccc['c_phone'] ?></td>
        <td><?php echo $ccc['idclient'] ?></td>
        <td>
            <button type="submit" name="cancelcourse" class="btn btn-danger btn-xs"><i class="icon md-check" aria-hidden="true"></i> Update</button>
    </tr>
<?php }

if(isset($_POST["cancelcourse"])) {
    $query = "UPDATE course SET id='$idu' AND course_situation='confirmed' WHERE idcourse='$idcourse' ";

    if(mysqli_query($mysqli, $query)) {
        echo "<div class='  alert alert-success' style='padding-left:150px'>
<strong>Success!</strong> Event page updated.</a>.
</div>";
        echo '<META HTTP-EQUIV="Refresh" Content="0; URL=index.php">';
    } else {
        echo "<div class='alert alert-danger'>
<strong>ERROR!</strong> We invite you to try Again Later.
</div> " . mysqli_error($mysqli);
    }
}

【问题讨论】:

  • 我什至没有看到这里的表格。
  • UPDATE 语法不正确。
  • 您没有从假定的表单(不存在)中获取任何值。您正在遍历值以输出表,然后使用您在循环中使用的值运行更新查询,因此这些变量被设置为表中最后一行的值。在这里重新考虑您的设计。
  • 老实说,您最好回到基础知识并查看一些有关 HTML 表单的指南/教程以及如何使用 PHP 处理它们并将数据安全地保存到数据库中。跨度>
  • 你的代码很容易受到sql注入。

标签: php mysql


【解决方案1】:

您为每门课程生成按钮,但所有按钮都是相同的,它们不包含有关您要更新哪个课程的任何信息。您使用变量$idcourse,但它是在生成表的while循环内分配的-对于显示的每一行,此变量都会更改,因此在显示整个表后它将包含最后一行的id。

请记住,每次重新加载您的页面时(例如单击按钮后),整个脚本都会从头开始执行,并且不会存储任何变量,除非您自己传递它。

最简单的解决方案:

1.给按钮添加id

<button type="submit" name="cancelcourse" class="btn btn-danger btn-xs" value="<?=htmlspecialchars($idcourse)?>">

2.更改查询

$idcourseToRemove = mysqli_real_escape_string($mysqli, $_POST["cancelcourse"]);
$query = "UPDATE course SET id='$idu' AND course_situation='confirmed' WHERE idcourse='$idcourseToRemove' ";

最后一个建议:了解 SQL 注入以及如何避免它(例如通过 mysqli_real_escape_string 函数)

【讨论】:

    【解决方案2】:

    UPDATE course SET id='$idu',course_situation='confirmed' WHERE idcourse='$idcourse'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      • 2023-03-11
      • 1970-01-01
      相关资源
      最近更新 更多