我正在尝试更新包含几行mysql数据的php表单。我在每一行旁边都有一个按钮,当我点击它时我想要更新该行。我在下面的问题是ID仅被设置为最后一行。如何将ID推送到按钮?所以基本上无论按什么按钮我总是得到相同的ID,这是最后一个加载。
if($result){
while($row = mysqli_fetch_array($result)){
$id = $row["ID"];
$beername = $row["BeerName"];
$beertype = $row["BeerType"];
$beerpercent = $row["BeerPercent"];
$beerdescription = $row["BeerDescription"];
$nowpouring = $row["NowPouring"] =='0' ? '' : 'checked=\"checked\"';
$glutenreduced = $row["GlutenReduced"] =='0' ? '' : 'checked=\"checked\"';
$beertogo = $row["BeerToGo"] =='0' ? '' : 'checked=\"checked\"';
echo "<form action='' method='POST'>";
echo "<tr><td><h6><input type=\"text\" size=\"5\" name=\"id\" value=\"$id\"></h6></td>";
echo "<td><h6><input type=\"text\" size=\"30\" name=\"BeerName\" value=\"$beername\"></h6></td>";
echo "<td><h6><input type=\"text\" size=\"30\" name=\"BeerType\" value=\"$beertype\"></h6></td>";
echo "<td><h6><textarea size=\"90\" style=\"width:250px;height:150px;\" name=\"BeerDescription\" value=\"\">$beerdescription</textarea></h6></td>";
echo "<td><h6><input type=\"text\" size=\"5\" name=\"Percent\" value=\"$beerpercent\"></h6></td>";
echo "<td><h6><input type=\"checkbox\" name=\"NowPouring\" value=\"true\" $nowpouring></h6></td>";
echo "<td><h6><input type=\"checkbox\" name=\"GlutenReduced\" value=\"true\" $glutenreduced></h6></td>";
echo "<td><h6><input type=\"checkbox\" name=\"BeerToGo\" value=\"true\" $beertogo></h6></td>";
#echo "<td><h6> <a href=\". $_SERVER["PHP_SELF"] .?id=".mysql_result($result,$j,'id')."\" onclick=\"\"></h6></td>";
echo "<td><h6> <button name=\"submit\" type=\"submit\" value=\"$id\">Save</button></h6></td>";
echo "</tr>";
echo "</form>";
}
}
if (isset($_POST['submit'])) {
$user = $_POST['submit'];
echo "<p style=\"color:#ffffff\">$id</p>";
#$delet_query = mysqli_query($mysqli, "UPDATE NowPouring SET NowPouring = '1' WHERE ID = '4'") or die(mysql_error());
if ($delet_query) {
echo '<p style="color:#ffffff">Beer with id '.$id.' is updated. To refresh your page, click ' . ' <a href=' . $_SERVER["PHP_SELF"] . ' > here </a></p>';
}
}
?>
答案 0 :(得分:0)
您的表单标记位于错误的位置。 它应该在:
之内while($row = mysqli_fetch_array($result)){
$id = $row["ID"];
//....
//....
echo "<form action='' method='POST'>";
echo"<tr>";
echo "<td>" . $id . "</td>";
//....
//....
echo "<td><button type='submit' name='submit'>Save</button></td>";
echo"</tr>";
echo "</form>";
}
答案 1 :(得分:0)
您看到这个结果是因为每个输入的“名称”是相同的,所以基本上您有一个包含一堆具有相同名称的元素的表单。您需要为每个名称添加动态方面。
例如,您可以将输出更新为以下内容:
echo "<tr><td><h6><input type=\"text\" size=\"5\" name=\"id_$id\" value=\"$id\"></h6></td>";
每行添加当前id。然后,当您检索表单数据时,可以将提交的ID附加到要更新的字段。
您是否考虑过使用AJAX方法,以便只提交相关行,而不必每次都重新加载页面并返回整个数据集?
答案 2 :(得分:0)
为每个提交按钮设置<form>
。在<form>
中添加while()
:
if($result){
while($row = mysqli_fetch_array($result)){
echo "<form action='' method='POST'>";
//...
echo "</form>";
}
}
答案 3 :(得分:0)
我在这里看到的主要问题是代码的while循环为输入生成了相同的名称......
你所有的&#34; <button name=\"submit\" type=\"submit\" value=\"$id\">Save</button>
&#34;将具有相同的名称,这就是为什么它总是将最后一个id作为值。
也许你应该尝试一些诸如......
<button name=\"$id_submit\" type=\"submit\" value=\"$id\">Save</button>
或者如果你想要,你可以将它存储在数组中..
<button name=\"submit[]\" type=\"submit\" value=\"$id\">Save</button>