我试图将HTML表格作为mySQL数据库的前端。表格显示正常,我可以输入我想对表格的每一行进行的编辑,但是当我按下提交按钮时,实际上没有进行更改。谁能看到我出错的地方?
<?php
include("db.php");
$sql = "SELECT * FROM `artist`";
$result = mysqli_query($conn, $sql);
if (isset($_POST['update'])){
$artID = $_POST['artID'];
$artName = $_POST['artName'];
$key = $_POST['hidden'];
$UpdateQuery = "UPDATE `artist` SET `artID` = '$artID', `artName` = '$artName' WHERE `artist`.`artID` = '$key'";
mysqli_query($conn,$UpdateQuery);
header("Location: {$_SERVER['HTTP_REFERER']}");
exit;
};
echo "<table border='1'>";
echo "<tr>";
echo "<th>ID</th>";
echo "<th>Name</th>";
echo "</tr>";
if ($result->num_rows > 0) {
echo "<form id ='artisttable' action ='getartiststable.php' method ='post'>";
// output data of each row
while($row = mysqli_fetch_array($result)) {
echo "<tr>";
echo "<td>" ."<input type='text' name ='artID' value ='" . $row['artID'] . "' </td>";
echo "<td>" . "<input type='text' name ='artName' value ='" . $row["artName"] . "' </td>";
echo "<td>" . "<input type = 'hidden' name ='hidden' value='" . $row['artID'] . "' </td>";
echo "<td>" . "<input type='submit' name ='update'" . " </td>";
echo "</tr>";
}
echo "</form>";
echo "</table>";
} else {
echo "0 results";
}
$conn->close();
?>
db.php
文件只包含到mySQL数据库的连接信息,我100%确定它没有任何问题,因为它正确地检索了表格它不是没有更新
答案 0 :(得分:0)
您的require
正在使用多个具有相同名称的元素构建。当您提交表单时,它使用最后一个元素作为值,因此无论您想要更新哪个记录,都会更新最后一条记录(或因字符串封装而引发错误)。您也应该使用参数化查询。
所以而不是:
form
使用:
if ($result->num_rows > 0) {
echo "<form id ='artisttable' action ='getartiststable.php' method ='post'>";
// output data of each row
while($row = mysqli_fetch_array($result)) {
echo "<tr>";
echo "<td>" ."<input type='text' name ='artID' value ='" . $row['artID'] . "' </td>";
echo "<td>" . "<input type='text' name ='artName' value ='" . $row["artName"] . "' </td>";
echo "<td>" . "<input type = 'hidden' name ='hidden' value='" . $row['artID'] . "' </td>";
echo "<td>" . "<input type='submit' name ='update'" . " </td>";
echo "</tr>";
}
echo "</form>";
echo "</table>";
因此,您为每个数据集获得if ($result->num_rows > 0) {
// output data of each row
while($row = mysqli_fetch_array($result)) {?>
<form class='artisttable' action ='getartiststable.php' method ='post'>
<tr>
<td><input type='text' name ='artID' value ='<?php echo $row['artID'];?>' /></td>
<td><input type='text' name ='artName' value ='<?php echo $row["artName"];?>' /></td>
<td><input type = 'hidden' name ='hidden' value='<?php echo $row['artID'];?>' /></td>
<td><input type='submit' name ='update'" . " </td>
</tr>
</form>
<?php } ?>
</table>
。这是使用mysqli:http://php.net/manual/en/mysqli.quickstart.prepared-statements.php准备好的语句的链接。您还应该更新您的标记。用于格式化的form
不是最好的方法。您的Table
也未关闭input
。
这也将>
从artisttable
更改为id
,因为会有倍数。相应地更新CSS / JS。
答案 1 :(得分:0)
您将表单标记放在tr中,不允许使用td 所以你必须从那里删除那个tr。
您必须使用jquery,或者您可以使用其他网格结构替换该表,以使其看起来相同,并且表单也可以放在那里
还有一个建议不要将php和html混合在一起将它们分开以获得干净的代码
如果你做了所有这些,你的代码将是这样的