Php 通过按钮一次更新一行MYSQL表

Php 通过按钮一次更新一行MYSQL表,php,html,mysql,Php,Html,Mysql,我目前在表格的每一行旁边都有一个删除和更新按钮。“删除”按钮通过从表中删除该行来工作,但“更新”按钮仅适用于表中的最后一行。如果我尝试更改一行中的某个字段,然后按update-它将更新为最后一行的值。。。我该如何解决这个问题?(这样每一行都可以单独更新) while($row=mysql\u fetch\u assoc($result)) { 回音 " “$row['topic_id']” 更新 删除 "; } 如果(isset($_POST['updateTopic'])){ $updateI

我目前在表格的每一行旁边都有一个删除和更新按钮。“删除”按钮通过从表中删除该行来工作,但“更新”按钮仅适用于表中的最后一行。如果我尝试更改一行中的某个字段,然后按update-它将更新为最后一行的值。。。我该如何解决这个问题?(这样每一行都可以单独更新)

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];