Php 为什么MYSQLi没有更新DB记录,而是给出成功消息

Php 为什么MYSQLi没有更新DB记录,而是给出成功消息,php,mysqli,Php,Mysqli,我已经清理了我的代码,将以下内容作为我的表单。但是我在从new update.php发送数据和更新时遇到了问题。表单在检索数据并显示数据时正常工作。但在提交时,我收到了ok更新消息,但数据库中的记录没有任何更改。 index.php <?php include 'connectdb.php'; // include 'query.php'; $sql = "SELECT id, WeightorMeasure FROM weightsmeasures"; $result

我已经清理了我的代码,将以下内容作为我的表单。但是我在从new update.php发送数据和更新时遇到了问题。表单在检索数据并显示数据时正常工作。但在提交时,我收到了ok更新消息,但数据库中的记录没有任何更改。 index.php

<?php
  include 'connectdb.php';
  // include 'query.php';

  $sql = "SELECT id, WeightorMeasure FROM weightsmeasures";
  $result = $conn->query($sql)       
  if ($result->num_rows > 0) {

    // output data of each row
    while($row = $result->fetch_assoc()) {
    echo "<form action=\"update.php\"method=\"post\">";
    echo "<input type=\"text\" name=\"id\" value = ".$row["id"].">";
    echo "<input type=\"text\" name=\"WeightorMeasure\" value = ".$row["WeightorMeasure"] .">";
    echo "<input type=\"submit\" value=\" Submit \" name=\"Update\">";
    }
        echo "</form>";
    } else {
        echo "0 results";
    }  
       $conn->close();
?>
<?php
   include 'connectdb.php';
   // include 'query.php';

   $sql = "SELECT id, WeightorMeasure FROM weightsmeasures WHERE id=11";
       $result = $conn->query($sql);

          if ($result->num_rows > 0) {

           // output data of each row
      while($row = $result->fetch_assoc()) {
          echo "<form action=\"update.php\"method=\"post\">";
          echo "<input type=\"text\" name=\"id\" value = ".$row["id"].">";
          echo "<input type=\"text\" name=\"WeightorMeasure\" value = ".$row["WeightorMeasure"].">";
          echo "<input type=\"submit\" value=\" Submit \" name=\"Update\">";
           }         
              echo "</form>";
             } else {
              echo "0 results";
             }  
       $conn->close();
 ?>
也许你拿错了D

 $wm = $_POST['WeightorMeasure'];
 $id = $_POST['id'];

您的查询是使用VLUN到MySQL注入的方式,请考虑使用准备好的语句

< P>您意识到在您的$POST数据中的变量赋值中转换了ID和权重度量吗?
这会导致更新查询无法找到ID,但不会出现问题。因此,告诉您操作成功了

我发现您的代码中可能存在以下问题

mysqli_query($conn, $sql); //should be $conn->query($sql); 
这条线呢

 $wm = $_POST['id']; //$_POST['WeightorMeasure'];
  $id = $_POST['WeightorMeasure'];//$_POST['id'];

顺序不对。我希望您已经在dpconnect.php文件中创建了$conn对象

Ok发现问题是上述因素的混合,有$u POST[WeightorMeasure];和$_POST[id];混合但最重要的因素是,我发布的表包含多行,并且在_postto update.php上,它不知道如何处理所有不同的行,因为SQL只处理一行。一旦我通过邮件发送了单行,它就工作得很好。现在学习并添加建议的准备好的语句

update.php

<?php
  include 'connectdb.php';
  $wm = $_POST['id'];
  $id = $_POST['WeightorMeasure'];
  $sql = "UPDATE weightsmeasures SET WeightorMeasure='$wm' WHERE id='$id'";

    if (mysqli_query($conn, $sql)) {
        echo "Record updated successfully";
    } else {
        echo "Error updating record: " . mysqli_error($conn);
    }

    $conn->close();
?>
 <?php
       include 'connectdb.php';
       $wm = $_POST["WeightorMeasure"];
       $id = $_POST["id"];

        echo $wm . "<br>";
        echo $id . "<br"; 

        $sql = "UPDATE weightsmeasures SET WeightorMeasure=\"$wm\", id= 
         $idWHERE id= $id";

        if (mysqli_query($conn, $sql)) {
            echo "Record updated successfully";
        } else {
            echo "Error updating record: " . mysqli_error($conn);
        }
        $conn->close();
    ?>
手动单输入。 index.php

<?php
  include 'connectdb.php';
  // include 'query.php';

  $sql = "SELECT id, WeightorMeasure FROM weightsmeasures";
  $result = $conn->query($sql)       
  if ($result->num_rows > 0) {

    // output data of each row
    while($row = $result->fetch_assoc()) {
    echo "<form action=\"update.php\"method=\"post\">";
    echo "<input type=\"text\" name=\"id\" value = ".$row["id"].">";
    echo "<input type=\"text\" name=\"WeightorMeasure\" value = ".$row["WeightorMeasure"] .">";
    echo "<input type=\"submit\" value=\" Submit \" name=\"Update\">";
    }
        echo "</form>";
    } else {
        echo "0 results";
    }  
       $conn->close();
?>
<?php
   include 'connectdb.php';
   // include 'query.php';

   $sql = "SELECT id, WeightorMeasure FROM weightsmeasures WHERE id=11";
       $result = $conn->query($sql);

          if ($result->num_rows > 0) {

           // output data of each row
      while($row = $result->fetch_assoc()) {
          echo "<form action=\"update.php\"method=\"post\">";
          echo "<input type=\"text\" name=\"id\" value = ".$row["id"].">";
          echo "<input type=\"text\" name=\"WeightorMeasure\" value = ".$row["WeightorMeasure"].">";
          echo "<input type=\"submit\" value=\" Submit \" name=\"Update\">";
           }         
              echo "</form>";
             } else {
              echo "0 results";
             }  
       $conn->close();
 ?>

值属性应该用单引号或双引号括起来。因为值为,所以字符串之间没有空格。如果字符串之间有任何空间,字符串的第一部分只考虑其他字符串或忽略的值,那么MySQL查询是正确的用法。他使用的是过程而不是对象。你是对的,他使用$conn对象获取数据表单数据库,并在update.php文件中包含相同的连接文件。我认为他应该使用对象。@WillParky93这里没有什么好发现的。他可以随心所欲地使用任何风格,这一点都没有问题。PHP以大量的疯狂迷信而闻名,这个答案基于其中一个迷信。不要阻止它进一步传播,记下它可能是一个好的开始