【发布时间】:2015-08-17 15:46:58
【问题描述】:
下午好 StackOverflowers,
我有一个非常简单的问题。 (我猜:))
每次我提交包含许多其他输入字段的表单时,它都会使用输入字段的最后一个值。
一个月前我遇到了类似的问题,但我以某种方式解决了它..我无法解决这个问题..
您可以在下面看到我的 HTML 表单。 (没有标记,我知道)
<?php
include_once("database.php");
$sql = "SELECT * FROM statements";
$stmt = $db->prepare($sql);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($rows as $row){
echo "<b>";
echo $row['question'];
echo "<br/></b>";
$sqlA = "SELECT * FROM question_answer WHERE question_id =" . $row['id'];
$stmtA = $db->prepare($sqlA);
$stmtA->execute();
$rowsA = $stmtA->fetchAll(PDO::FETCH_ASSOC);
echo "<form id='modify' name='modify' action='modify.php' method='POST'>
<div id='answers'>";
foreach($rowsA as $rowa){
if($rowa['correct_answer'] == 1){
$rowAnswer = $rowa['answer'];
$rowId = $rowa['question_id'];
echo "<input type='text' checked value='" . $rowAnswer . "' name='" . $rowId."' style='background:lightgreen;'><br/>";
echo "</div>";
}
else{
$rowFalseId = $rowa['question_id'];
echo "<input type='text' value='" . $rowAnswer . "' name='" . $rowFalseId."'><br/>";
}
}
}
?>
<input type='submit' name='modify_answers' value="Modify Answers">
</form>
您可以在下面看到我的更新查询;
<?php
include_once("database.php");
// foreach($_POST as $val){
// print_r($val);
// }
$sql = "SELECT * FROM statements";
$stmt = $db->prepare($sql);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($rows as $row){
$sqlA = "SELECT * FROM question_answer where question_id =" . $row['id'];
$stmtA = $db->prepare($sqlA);
$stmtA->execute();
$rowsA = $stmtA->fetchAll(PDO::FETCH_ASSOC);
foreach($rowsA as $rowa){
foreach($_POST as $id => $value){
$update = "UPDATE question_answer SET answer = '".$value."' WHERE question_id ='". $id."'";
$stmt = $db->prepare($update);
$stmt->execute();
}
}
}
?>
每次提交到 modify.php 文件时,它都会更新输入字段的最后一个值。
例如,如果我有 16 个输入字段,则它采用输入字段的第 4、第 8、第 12 和第 16 个值。
所以问题可能出在输入字段的名称上,但也可能是 modify.php..
如有任何帮助,敬请期待!我正在为这个简单的问题苦苦挣扎:(
提前谢谢大家!!
【问题讨论】:
-
只打印查询而不是执行,你自己就能解决问题
-
试过很多次都没有运气:(我很挣扎,但这似乎是一个简单的问题..但它仍然没有解决:(
-
远离循环更新。而不是循环更新check out multiple updates in one query。这可能会解决你当前的问题。此外,您很容易受到 sql 注入的攻击。
-
@andrew 谢谢!这真的很有帮助,比做单个查询更好:)