如何在自动生成的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。您将使用它来更新特定行。前任。 <td>'.$data['Id'].'</td>
。然后将其传递给您的 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 设置为行的主键(记得在查询中选择它) 我试图这样做,即以上是关于如何在自动生成的for循环中从html表单中获取唯一值的主要内容,如果未能解决你的问题,请参考以下文章
无法在 for 循环中从公共数据库中获取多个 CKReference 记录