Php 通过按钮一次更新一行MYSQL表
我目前在表格的每一行旁边都有一个删除和更新按钮。“删除”按钮通过从表中删除该行来工作,但“更新”按钮仅适用于表中的最后一行。如果我尝试更改一行中的某个字段,然后按update-它将更新为最后一行的值。。。我该如何解决这个问题?(这样每一行都可以单独更新)Php 通过按钮一次更新一行MYSQL表,php,html,mysql,Php,Html,Mysql,我目前在表格的每一行旁边都有一个删除和更新按钮。“删除”按钮通过从表中删除该行来工作,但“更新”按钮仅适用于表中的最后一行。如果我尝试更改一行中的某个字段,然后按update-它将更新为最后一行的值。。。我该如何解决这个问题?(这样每一行都可以单独更新) while($row=mysql\u fetch\u assoc($result)) { 回音 " “$row['topic_id']” 更新 删除 "; } 如果(isset($_POST['updateTopic'])){ $updateI
while($row=mysql\u fetch\u assoc($result))
{
回音
"
“$row['topic_id']”
更新
删除
";
}
如果(isset($_POST['updateTopic'])){
$updateID=$_POST['updateTopic'];
$updateTopicName=$\u POST['up\u topic\u name'];
$updateTopicAddress=$\u POST['up\u主题\u地址];
$updateTopic=mysql\u查询(“更新主题集主题名称='$updateTopicName',主题地址='$updateTopicAddress',其中主题id='$updateID')或死亡(mysql\u错误());
回声“;
}
如果(isset($_POST['deleteTopic'])){
$deleteID=$_POST['deleteteTopic'];
$deleteFromTopics=mysql\u查询(“从主题中删除,主题id=$deleteID”)或die(mysql\u error());
$deleteFromUserTopic=mysql\u查询(“从用户\u主题中删除,其中主题\u id=$deleteID”)或死亡(mysql\u error());
回声“;
}
回声“;
这两个按钮都是形式化的,因此它们将始终位于POST
数组中
执行编辑和删除的更快方法是通过$\u GET
请求并将您的链接设置为
http://localhost/project_name/file_name?id=".$row['topic_id']."&operation=delete
编辑:
http://localhost/project_name/file_name?id=".$row['topic_id']."&operation=edit
在服务器端,添加此检查
if(isset($_GET['operation']) && trim($_GET['operation'])=="edit")){
// Edit code
}
else if(isset($_GET['operation']) && trim($_GET['operation'])=="delete")){
// Delete code
}
HTML结构不正确(tr>form>td不好^^^),但这样应该更好。为了获得最佳结构,应该使用div而不是table。 想法是1个动作=1个形式:
<?php
if(isset($_POST['updateTopic'])){
$updateID = $_POST['updateTopic'];
$updateTopicName = $_POST['up_topic_name'];
$updateTopicAddress = $_POST['up_topic_address'];
$updateTopic = mysql_query("UPDATE topics SET topic_name='$updateTopicName', topic_address='$updateTopicAddress' WHERE topic_id='$updateID'") or die(mysql_error());
echo "<meta http-equiv='refresh' content='0'>";
}
if(isset($_POST['deleteTopic'])){
$deleteID = $_POST['deleteTopic'];
$deleteFromTopics = mysql_query("DELETE FROM topics WHERE topic_id = $deleteID ") or die(mysql_error());
$deleteFromUserTopic = mysql_query("DELETE FROM user_topic WHERE topic_id = $deleteID ") or die(mysql_error());
echo "<meta http-equiv='refresh' content='0'>";
}
echo "<table>";
while($row = mysql_fetch_assoc($result))
{
echo "<tr>
<form method='POST' action=''>
<input type='hidden' name='updateTopic' value='".$row['topic_id']."'>
<td style='font-weight: normal;background-color: #ff9999;' class='row-time'>" . $row['topic_id'] . "</td>
<td style='font-weight: normal;background-color: #ff9999;' class='row-amount'><input type='text' name='up_topic_name' value='" . $row['topic_name'] . "'></td>
<td style='font-weight: normal;background-color: #ff9999;' class='row-amount'><input type='text' name='up_topic_address' value='" . $row['topic_address'] . "'></td>
<td><button type='submit'>Update</button></td>
</form>
<form method='POST' action=''>
<input type='hidden' name='deleteTopic' value=".$row['topic_id'].">
<td><button type='submit'>Delete</button></td>
</form>
</tr>";
}
echo "</table>";
问题是因为所有“名称”和“地址”字段都具有相同的输入名称 当您尝试阅读$updateTopicName=$\u POST['up\u topic\u name']时,您想要什么up\u topic\u name?第一排的那个?第二排的那个?提交时,所有名为up\u topic\u name的输入将被最后一个值覆盖 要解决此问题,您必须(仅)将输入命名为up_topic_name和up_topic_address,如下所示:
<input type='text' name='up_topic_name[{$row['topic_id']}]' value='" . $row['topic_name'] . "'>
开头的
标签在哪里?请注意
元素中的
是不允许的。您可以将整个
元素准确地包装在
^中。表单不能是表的子级。非常好的SQL注入顺便说一句。是的,SQL注入和每行相同的输入名称让我很高兴:)
<input type='text' name='up_topic_name[{$row['topic_id']}]' value='" . $row['topic_name'] . "'>
$updateID = $_POST['updateTopic'];
$updateTopicName = $_POST['up_topic_name'][$updateID];