PHP post总是返回最后一个值


PHP post always returns the last value

我试图创建一个简单的PHP页面,从数据库检索和显示信息,所以我这样做,这工作得很好:

echo "<form action='#' method='post'>";
if(!empty($result)){
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
        echo "'t<tr>'n";
        echo "<td><input type = 'hidden' name = 'value_id' id = 'value_id' value = '" . $row['id'] . "'/></td>";
        echo "<td><input type = 'text' name = 'name_value' id = 'name_value' value = '" . $row['name'] . "'/></td>'n";
        echo "<td><input type = 'text' name = 'addr_value' id = 'addr_value' value = '" . $row['addr'] . "'/></td>'n";
        echo "<td><INPUT type='submit' name = 'modifyItem' value ='Modify'></td>'n";
        echo "<td><INPUT type='submit' name = 'deleteItem' value ='Delete'></td>'n";
        echo "'t</tr>'n";
    }
}
echo "</form>";

每一行都有一个删除按钮,这将允许用户单独删除每一行,因此我查看删除按钮是否已被单击,并通过获取ID继续删除该行:

if(isset($_POST['deleteItem'])){
    $querydelete = "DELETE FROM address WHERE ID = " . $_POST["value_id"];
    mysql_query($querydelete) or die('Query failed: ' . mysql_error());
}

问题是ID值在post之后总是相同的(这是最后一行的ID值)。如果我事先显示每行的ID,它就是正确的,那么问题一定是它在post中获取的值。我做错了什么?

这是因为您在表单中创建了许多具有相同名称的字段。您可以为每条记录创建单独的表单:

if(!empty($result)){
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    echo "<form action='#' method='post'>"
    echo "'t<tr>'n";
    echo "<td><input type = 'hidden' name = 'value_id' id = 'value_id' value = '" . $row['id'] . "'/></td>";
    echo "<td><input type = 'text' name = 'name_value' id = 'name_value' value = '" . $row['name'] . "'/></td>'n";
    echo "<td><input type = 'text' name = 'addr_value' id = 'addr_value' value = '" . $row['addr'] . "'/></td>'n";
    echo "<td><INPUT type='submit' name = 'modifyItem' value ='Modify'></td>'n";
    echo "<td><INPUT type='submit' name = 'deleteItem' value ='Delete'></td>'n";
    echo "'t</tr>'n";
    echo "</form>";
    }
}

您有多个名称为value_id的输入。只有最后一次出现的情况才会被传送。

你想要的是分裂成多个形式。每个条目一个。但这不会在您的示例中产生有效的html代码。有很多方法,但这是另一个问题

您正在为所有字段集使用SAME字段名。由于您没有使用PHP特定的[]数组扩展/提示名称,PHP将只处理提交的LAST字段名称集。

<input type="text" name="foo" value="a" />
<input type="text" name="foo" value="b" />
<input type="text" name="foo" value="c" />
var_dump($_POST);
Array(1) {
   'foo' => 'c'
}
<input type="text" name="foo[]" value="a" />  <--note the [] here
<input type="text" name="foo[]" value="b" />  <--note the [] here
<input type="text" name="foo[]" value="c" />  <--note the [] here
var_dump($_POST);
Array(1) {
   'foo' => array(
       0 => 'a'
       1 => 'b'
       3 => 'c'
   )
}

try:

if(!empty($result)){
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    echo "'t<tr>'n";
    echo "<form action='#' method='post'><td><input type = 'hidden' name = 'value_id' id = 'value_id' value = '" . $row['id'] . "'/></td>";
    echo "<td><input type = 'text' name = 'name_value' id = 'name_value' value = '" . $row['name'] . "'/></td>'n";
    echo "<td><input type = 'text' name = 'addr_value' id = 'addr_value' value = '" . $row['addr'] . "'/></td>'n";
    echo "<td><INPUT type='submit' name = 'modifyItem' value ='Modify'></td>'n";
    echo "<td><INPUT type='submit' name = 'deleteItem' value ='Delete'></td>'n";
    echo "'t</form></tr>'n";
    }
}

我已经对JS和PHP做了同样的事情:

HTML: [index]

echo "<td> <button name='"$row['id']'" type='"clear'" >Clear</button>  </td>";

JavaScript: [index]

<script>
$(document).ready(function(){
     $('[type="clear"]').on('click', function(){ 
         document.location.href = "./php/yourScript.php?param=" + $(this).attr("name");
     })
});
</script>

PHP: [./PHP/yourScript.php]

<?php
$querydelete = "DELETE FROM address WHERE ID = " . $_GET["param"];
    mysql_query($querydelete)
?>

我希望这对你有帮助。

如果您想将所有控件放在一个表单中,请像这样更改代码。

echo "<form action='#' method='post'>";
if(!empty($result)){
 while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    echo "'t<tr>'n";
    echo "<td><input type = 'hidden' name = 'field[" . $row['id'] . "][value_id]' id = 'value_id-" . $row['id'] . "' value = '" . $row['id'] . "'/></td>";
    echo "<td><input type = 'text' name = 'field[" . $row['id'] . "][name_value]' id = 'name_value-" . $row['id'] . "' value = '" . $row['name'] . "'/></td>'n";
    echo "<td><input type = 'text' name = 'field[" . $row['id'] . "][addr_value]' id = 'addr_value-" . $row['id'] . "' value = '" . $row['addr'] . "'/></td>'n";
    echo "<td><INPUT type='submit' name = 'field[" . $row['id'] . "][modifyItem]' value ='Modify'></td>'n";
    echo "<td><INPUT type='submit' name = 'field[" . $row['id'] . "][deleteItem]' value ='Delete'></td>'n";
    echo "'t</tr>'n";
 }
}
echo "</form>";

您有一个具有多个name=value_id元素的表单。当您提交表单时,在$_POST中是最后一个(有第一个,被第二个覆盖,等等)。

为每一行使用新的形式,或者在你的名字中使用数组,例如。name="value[]" .

要解决这个问题,您需要将每个表单包装成单独的表单…

while(rows_available){
     echo "<form action='#' method='post'>"
     echo "<td><input type = 'hidden' name = 'value_id' id = 'value_id' value = '" . $row['id'] . "'/></td>";
        echo "<td><input type = 'text' name = 'name_value' id = 'name_value' value = '" . $row['name'] . "'/></td>'n";
        echo "<td><input type = 'text' name = 'addr_value' id = 'addr_value' value = '" . $row['addr'] . "'/></td>'n";
        echo "<td><INPUT type='submit' name = 'modifyItem' value ='Modify'></td>'n";
        echo "<td><INPUT type='submit' name = 'deleteItem' value ='Delete'></td>'n";
        echo "'t</tr>'n";
        echo "</form>";
}//end of while loop