Значение $ _POST из массива входного типа = массив изображений? - PullRequest
2 голосов
/ 17 мая 2011

У меня есть динамический список элементов, извлеченных из базы данных, где список содержит от 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>

Ответы [ 3 ]

3 голосов
/ 17 мая 2011

Попробуйте изменить

name=\"deleteItem[]\"

до

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

При отправке единственным участником deleteItem будет deleteItem [ID]

list($deletedItemID) = array_keys($_POST['deleteItem']);
1 голос
/ 17 мая 2011

Вот более обобщенный ответ на ваш конкретный вопрос:

Если у меня есть такая форма:

<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

Вместо того чтобы иметь все отправляемые изображения в массиве, я бы сгенерировал уникальное имя для каждого из них, либо путем объединения какого-либо известного идентификатора (предпочтительно), либо путем добавления к ним переменной счетчика.Затем вы можете просто выполнить isset($_POST['{button name}']) проверку, например:

<input type = 'image' src = '...' name = 'deleteItem<?php echo($iteml->ID); ?>'/>
1 голос
/ 17 мая 2011

Я думаю, что имя вашего ввода должно быть просто "deleteItem" вместо "deleteItem []". Попытайся. Таким образом, вы получите значение его идентификатора в $ _POST ['deleteItem'].

...