我在循环中有一个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();
最佳答案
问题出在您的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以更新正确的行。