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

Posted

技术标签:

【中文标题】如何在自动生成的for循环中从html表单中获取唯一值【英文标题】:How to get a unique value from the html form in a auto generating for loop 【发布时间】:2018-07-15 10:51:27 【问题描述】:

我在一个循环中有一个 html 表单。因此,当我的 php 脚本从我的数据库中获取一行时,每一行都附加了一个相同的 html 表单。然后我将这些表单值传递给一个 ajax 脚本,然后调用一个 php 文件,然后将这些值更新到 DB 中。问题是当我更新这些值时,表格会更新所有行中的每一列。(下面附上的示例图像。在将更新值存储在 Db 中后,我的关键性和优先级列具有相同的值)

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

这就是我的循环

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

【问题讨论】:

你的WHERE 子句在哪里? 我不知道在我的 sql 查询中将哪些参数放在 where 子句中。感谢您的回复。 您的 HTML/AJAX 需要将主键(或唯一标识行的东西)传递给 PHP。您将使用它来更新特定行。前任。 &lt;td&gt;'.$data['Id'].'&lt;/td&gt;。然后将其传递给您的 WHERE 子句。此外,您需要阅读准备好的语句。 phpdelusions.net/pdo。阅读不错的 AJAX/PHP/mysql 教程 - programmerblog.net/php-pdo-ajax-tutorial-example。请注意,它们在 HTML 表单中包含主键。 哦,太好了,非常感谢。 【参考方案1】:

问题在于你的 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 脚本可以将其传递给 MySQL 以更新正确的行。

【讨论】:

这是一个问题,我很难找到一种方法来在我的 ajax 调用中包含行 ID,然后我的 php 脚本可以将其传递给我的 sql 以更新正确的行。谢谢回复。 很难从您的示例中弄清楚每个表格行如何与其对应的表格相关联。您可以在每个表格行中包含一个链接以打开表单,并以这种方式传递 ID。 是的,我认为这是我让它发挥作用的最后一个选择。谢谢你的时间。【参考方案2】:

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

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

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

@tombeynon 先到了哈哈

【讨论】:

这是一个问题,我很难找到一种方法来在我的 ajax 调用中包含行 ID,然后我的 php 脚本可以将其传递给我的 sql 以更新正确的行。谢谢回复。 在您的 foreach 循环中,将 tr 元素 id 属性设置为 $data['id"]。这应该将 id 设置为行的主键(记得在查询中选择它) 我试图这样做,即 '.$data['NO'].' 。其中 NO 是我每行的 ID 列。但问题是在ajax调用中传递这个,然后使用php用where子句更新sql。 我不得不说,根据你的例子很难找到一种方法来做到这一点。正如@tombeynon 建议的那样,您可能必须将 id 作为链接中的参数传递

以上是关于如何在自动生成的for循环中从html表单中获取唯一值的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中从 For 循环中存储多个矩阵

无法在 for 循环中从公共数据库中获取多个 CKReference 记录

在循环中从一到x获取数字?

在基于范围的 for 循环中从 std::vector<Object> 获取指向 Object 的指针

如何在 django 模板中从 for 循环中转义一行

如何在 Javascript 中从 Spring 获取 JSON 响应