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