【问题标题】:Data in my DataBase doesn't get updated MySql我的数据库中的数据没有得到更新 MySql
【发布时间】:2022-01-12 13:10:04
【问题描述】:

由于某种奇怪的原因,数据库没有更新,我可以获得正确的数据(我检查过),但是当我单击提交时数据库没有更新。有没有人可以看看有没有遗漏? 注意:“----”只是出于安全原因!

<?php
$host = "sql308.-----.com";
$dbUsername = "----_3041----";
$dbPassword = "-----------";
$dbName = "----_3041----_phpmysqli";

$conn = mysqli_connect($host, $dbUsername, $dbPassword, $dbName);

// Check connection
if ($conn-> connect_error) {
    die("Connection échouée!".$conn-> connect_error);
}

$rn = $_GET['rn'];
$dt = $_GET['dt'];
$to = $_GET['to'];
$rk = $_GET['rk'];
    
if(isset($_POST['edit'])) {
    $rn = $_POST['rn'];
    $dt = $_POST['date'];
    $to = $_POST["total"];
    $rk = $_POST['remarques'];

    $sql = "UPDATE `datab1` SET 
    `date` = '$dt',
    `total` = '$to',
    `remarques` = '$rk' 
    WHERE `datab1`.`id` = '$rn'";
    
    $result = mysqli_query($conn, $sql);
    
    if($result == 1) {
        header('location:table.php');
    } 
    else {
        die(mysqli_error($conn));
    }
}

?>

【问题讨论】:

  • 你不需要指定datab1.id 只需使用id即可。
  • 请学习如何准备 statment,您可以使用 sql 注入。
  • 为什么你尝试使用 GET 然后使用 POST 创建变量?
  • (可能)旁注:不要使用字符串插值或连接将值获取到 SQL 查询中。这很容易出错,并且可能使您的程序容易受到 SQL 注入攻击。使用参数化查询。见"How to include a PHP variable inside a MySQL statement""How can I prevent SQL injection in PHP?"
  • 你得到的是骰子还是标题,还是什么都没有?您可能需要在您的 if(isset($_POST['edit'])) { 中添加一个 else,以防它根本不在该块中。

标签: php mysql sql sql-update


【解决方案1】:

很可能在执行 update 时未找到 where 条件的匹配项。

就在之前

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

在第 18 行添加以下代码

echo "<p>GET: "; var_dump($_GET); echo "<p>POST: "; var_dump($_POST); echo "<p>"; 

并检查值。

之前也是

$result = mysqli_query($conn, $sql);

请在第 30 行添加

echo "<br>$sql<br>"; exit();

如果您在查看两个输出后无法解决,请在此处发布相同的内容。

【讨论】:

    【解决方案2】:

    感谢@Natarajan N Napoleon 提供的有用技巧,GET 和 POST 中的输出都是正确的,如下所示:

    GET: array(9) { ["rn"]=> string(2) "21" ["dt"]=> string(10) "07-12-2021"  ["rk"]=> string(5) "walou" ["to"]=> string(4) "1250" }
    
    POST: array(9) { ["date"]=> string(10) "07-12-2021" ["total"]=> string(4) "1800" ["remarques"]=> string(5) "done" ["edit"]=> string(8) "Modifier" }
    

    SQL 查询是个麻烦事,这就是我得到的:

    UPDATE `datab1` SET `date` = '07-12-2021', `total` = '1800', `remarques` = 'done' WHERE id = ''
    

    我为我的“rn”分配了一个空值,这导致了这个错误,我不得不将“rn”的值直接传递给我的查询而不做任何修改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-17
      • 1970-01-01
      • 1970-01-01
      • 2019-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多