如何从自动生成for循环中的html表单中获取唯一值

时间:2018-02-05 14:40:46

标签: php jquery mysql ajax forms

我在循环中有一个Html表单。因此,当我的PHP脚本从我的数据库中获取一行时,每一行都附加了一个相同的html表单。然后我获取这些表单值并将其传递给ajax脚本,然后调用php文件,然后将这些值更新到DB中。问题是当我更新这些值时,所有行中的每一列的更新形式。(下面附带的示例图像。在Db中存储更新值后,我的Criticality和Priority列具有相同的值)enter image description here < / p>

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

这就是我的循环

          <?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();

2 个答案:

答案 0 :(得分:1)

问题在于您的SQL代码:

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

这要求您的数据库更新表'评级',并将'criticality'和'priority'设置为$c$p中存储的值。注意它是如何告诉数据库更新哪个行,因此它在所有行上运行更新。

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

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

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

答案 1 :(得分:1)

您需要在UPDATE语句中设置WHERE子句。

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

这只会更新与您传递的ID匹配的行。

@tombeynon先到达哈哈