【问题标题】:$_POST value from array of input type="image" array?输入类型 =“图像”数组的数组中的 $_POST 值?
【发布时间】:2011-05-17 16:10:07
【问题描述】:

我有一个从数据库中提取的项目的动态列表,其中列表包含 0 到 N 个项目。每个项目都列在 HTML 表中的一行中,并带有一个提交按钮。我需要知道这些按钮中的哪一个,具体来说,是在 $_POST 上单击并获取该项目的值。

我目前的方法是使用数组。但是,$_POST 值返回数组中的所有项目,而不仅仅是被单击的项目。更重要的是,数组值与从数据库中提取的值不相关。同一个图片提交按钮可能会被重复点击并产生不同的值。

<?php
else if (isset($_POST["deleteItem"]))
{   
    foreach ($_POST["deleteItem"] as $value) :
        WishList::Delete($value);
    endforeach; 
}
?>

<form method="post" action="">
    <table id="WishListTable">
<?php
    $wishlist = WishList::GetAllByID($userID);
    foreach ($wishlist as $item)
    {
    echo "<tr><td>" . $item->Description . "</td>";
    echo "<td>";
    if ($item->InStock)
    {
        $primaryEmailAlreadyUsed = true;
        echo "In Stock";
    }
    else {
        echo "Out of Stock";
    }
    echo "</td>";
    echo "<td style=\"text-align:center;\"><input type=\"image\" src=\"/images/deleteX.gif\" border=\"0\" alt=\"Delete\" id='" . $iteml->ID . "' name=\"deleteItem[]\" value=\"" . $item->ID . "\" ></td>";
    echo "</tr>";
}
?>
</table>
</form>

【问题讨论】:

  • 按下按钮时 $_POST["deleteItem"] 的输出是什么?
  • “数组值与从数据库中提取的值不相关” 不应该先解决这个问题吗?这是为什么呢?
  • 必须是按钮吗?可能只是一个链接吗? IE。 thisscript.php?deleteid=10
  • @gmadd:提醒一下,不应该使用GET 来更改数据。查看en.wikipedia.org/w/…
  • 感谢所有 cmets。以下是一些答案:1)示例输出:单击的项目从数据库中的愿望清单中删除,页面重新加载(没有删除的项目。2)值不相关:这让我感到困惑。我知道所显示项目的唯一 ID。相反,我的数组返回不同的个位数值。如果我注释掉函数调用并且只打印_r()数组,如果我反复单击它,我可以接收相同输入项的不同值 3)图像按钮无疑是装饰性的,但我知道有一种正确的方法可以做到这一点,我只是还没找到。

标签: php arrays post dynamic-data


【解决方案1】:

尝试改变

name=\"deleteItem[]\"

到

name=\"deleteItem[" . $item->ID . "]\"

提交时,deleteItem 的唯一成员将是 deleteItem[ID]

list($deletedItemID) = array_keys($_POST['deleteItem']);

【讨论】:

  • 这被证明是有效的,回想起来,这是非常明显的。非常感谢,乔!
  • 注意:$deletedItemID = key($_POST['deleteItem']); 也是一个选项。 (我发现list() 在源代码中很难阅读,但这绝对是个人意见。)
【解决方案2】:

我认为您输入的名称应该只是“deleteItem”而不是“deleteItem[]”。尝试一下。这样,您将在 $_POST[ 'deleteItem' ] 中获取其 id 的值。

【讨论】:

  • 请记住,Internet Explorer 不会 POST 回类型图像输入的值。你会得到一个 $_POST['deleteItem_x'] 和 $_POST['deleteItem_y']。最好为每个项目使用包含 id 的隐藏输入的单独表单
  • @Peter,谢谢...每个浏览器的优点都在做他们想做的事.. :) 我在 chrome 中测试了它,我得到了这两个字段以及正常的 deleteItem.. 感谢指出出来了。
【解决方案3】:

以下是对您的具体问题的更笼统的回答:

如果我有这样的表格:

<form method = 'post' action = 'action.php'>
    <input type = 'submit' name = 'submit1' value = 'Submit 1'/>
    <input type = 'submit' name = 'submit2' value = 'Submit 2'/>
</form>

在action.php 我有:

<?php
    foreach($_POST as $k => $v)
        echo($k . ": " . $v . "<br/>")
?>

然后如果我点击submit1 按钮,action.php 中的输出将是:

submit1: Submit 1

如果我点击submit2 按钮,输出将是:

submit2: Submit 2

我不会将所有提交的图像都放在一个数组中,而是通过组合某种已知的 ID(首选)或向它们附加一个计数器变量来为每个图像生成一个唯一的名称。然后,您可以做一个简单的isset($_POST['{button name}']) 检查,例如:

<input type = 'image' src = '...' name = 'deleteItem<?php echo($iteml->ID); ?>'/>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 2019-08-29
    • 2016-05-14
    • 2016-12-18
    • 1970-01-01
    相关资源
    最近更新 更多