我在循环中有一个HTML表单。因此,当我的PHP脚本从数据库中获取一行时,每一行都附有相同的html表单。然后,我将这些形式的值传递给ajax脚本,然后再调用一个php文件,然后将这些值更新到DB中。问题是当我更新这些值时,将更新所有行中的每一列。(下面的示例图像。在将更新值存储在Db中后,“我的关键度和优先级”列具有相同的值)php - 如何在自动生成的for循环中从html表单获取唯一值-LMLPHP

**是的,我在两个表中都有一个自动生成的主键**

多数民众赞成在我的循环

          <?php
      foreach($results as $data){

          echo '<tbody>
              <tr class="dropDown">
              <td>1</td>
              <td>'.$data['Title'].'</td>
              <td>'.$data['criticality'].'</td>
              <td>'.$data['Priority'].'</td>
              <td>'.$data['Description'].'</td>
              <td>'.$data['Date_Submitted'].'</td>
              <td></td>
          </tr>
          </tbody>';

      }

    ?>


那是我的网络表格:

        <form action="/action_page.php">
      <fieldset>
        <label>XYZ Questions </label><br>
          <label class="radio-inline">
            <input type="radio" name="optradio">
            <label>YES</label>
        </label>
          <label class="radio-inline left">
            <input type="radio" name="optradio">
            <label>NO</label>
        </label>
      </fieldset>
      <fieldset>
        <label>XYZ Questions </label><br>
          <label class="radio-inline">
            <input type="radio" name="optradio1">
            <label>YES</label>
        </label>
          <label class="radio-inline left">
            <input type="radio" name="optradio1">
            <label>NO</label>
        </label>
      </fieldset>
      <div class="checkbox">
        <label><input type="checkbox"> Remember me</label>
      </div>
      <button type="submit" class="btn btn-default">Submit</button>
    </form>


那是我的ajax脚本来获取值

      var launchAjax = function () { // event handler for button click
      $.get(
     "php/inbetween.php/",
     {
         question: $("[name=optradio]:checked").val(),
         question1: $("[name=optradio1]:checked").val(),

     }
   );
  }

  $("#no").click(launchAjax);


这就是如何转换这些值并将数字保存到bd中的方法

    function getMark($answer, $mark = 1){
    $result = 0;
    if($answer == 'YES'){
        $result = $mark;
    }
    return $result;
}
    $p = 0;
    $p += getMark($question, 1); // provide the answer and the mark
    $p += getMark($question1, .5);

    $c = 0;
    $c += getMark($question, 0.5); // provide the answer and the mark
    $c += getMark($question1, 1);


那是我的Php脚本,用于更新表中的表单值

 $command1 = "UPDATE rating SET criticality = '$c' , Priority = '$p'";

   // prepare and executing
$stmt1 = $dbh->prepare($command1);
$result1 = $stmt1->execute();

最佳答案

问题出在您的SQL代码中:

UPDATE rating SET criticality = '$c' , Priority = '$p';


这是在要求数据库更新表“ rating”,并将“ criticality”和“ priority”设置为存储在$c$p中的值。请注意,它没有告诉数据库要更新的行,而是在所有行上运行更新。

您的每个数据库行都应具有一个主键,该键通常是一个递增的整数。通常,这是进行这种更新的方式:

UPDATE rating SET criticality = '$c' , Priority = '$p' WHERE id = '$id';


您需要找到一种在Ajax调用中包括行ID的方法,然后您的PHP脚本可以将该行ID传递给MySQL以更新正确的行。

10-05 20:37
查看更多