PHP Как получить переменные формы для нескольких элементов? - PullRequest
0 голосов
/ 19 февраля 2012

Мне нужно собрать элементы формы корзины. Предметы в нескольких магазинах. Я хочу собрать их как сессию или просто использовать Array - думаю, что Array будет лучше?

Как я могу собрать эту информацию в process.php?

Надеюсь, я дал понять.

Код такой для каждого предмета:

<div class="product" id="pId_'.$id.'">

<input type="hidden" name="productID" value="'.$id.'" />
<input type="hidden" name="productURL" value="'.$url.'" />
<input type="hidden" name="productQty" value="'.$qty.'" />
<input type="hidden" name="productPrice" value="'.$price.'" />

</div>

Таким образом, корзина может иметь:

<div class="product" id="pId_2">
<input type="hidden" name="productID" value="2" />
<input type="hidden" name="productURL" value="site.com" />
<input type="hidden" name="productQty" value="1" />
<input type="hidden" name="productPrice" value="750" />
</div>
<div class="product" id="pId_45">
<input type="hidden" name="productID" value="45" />
<input type="hidden" name="productURL" value="example.co.uk" />
<input type="hidden" name="productQty" value="2" />
<input type="hidden" name="productPrice" value="100" />
</div>

Эти данные отправляются в форму .. но как я могу получить информацию, когда productID вызывается дважды или более?

Ответы [ 6 ]

1 голос
/ 19 февраля 2012

Если вам просто нужно собрать элементы для последующей обработки, другой способ сделать это - перебрать все переменные POST. PHP соберет всю информацию, переданную в зарезервированную переменную $ _POST.

Оттуда вы можете использовать foreach для циклического прохождения собранной информации следующим образом:

foreach ($_POST as $key => $value)
{
    echo "$key = $value";
}

Где $ key будет вашим someitem_, а $ value будет содержать фактическое переданное значение.

Это будет работать легче, если у вас не будет никаких других входных данных в вашей форме, кроме тех, которые указаны в элементах корзины покупок, в противном случае вам придется выполнить некоторую логику, чтобы определить, какие записи были связаны с элементами корзины. .

На заметку, если возможно объединить 3 связанных входных значения в 1, со значениями, разделенными определенным вами символом (возможно, что-то вроде <item>|<name>|<url>), это может облегчить вашу жизнь при попытке получить все 3 значения, которые связаны с идентификатором.

В этом случае ваш код просто получит строковое значение для определенного идентификатора и выполнит split () для '|' разбить его на 3 значения.

0 голосов
/ 19 февраля 2012

Если вы добавите квадратные скобки к вашим именам ввода

<input type="hidden" name="productID[]" value="' . $id . '" />
<input type="hidden" name="productURL[]" value="' . $url . '" />
<input type="hidden" name="productQty[]" value="' . $qty . '" />
<input type="hidden" name="productPrice[]" value="' . $price . '" />

затем вы можете собирать и использовать все данные формы, добавив следующий код PHP в файл process.php

foreach ($_POST['productID'] as $key => $getid) {
    $getqty   = $_POST['productQty'][$key];
    $getprice = $_POST['productPrice'][$key];
    $geturl   = $_POST['productURL'][$key];

    // Example MySQL Query
    mysql_query("INSERT INTO orders (id, url, quantity, price) VALUES ('" . $getid . "', '" . $geturl . "', '" . $getqty . "', '" . $getprice . "')");
}

Что он делает, так это то, что он автоматически создает массивы для данных формы, так что вы можете, используя приведенный выше код PHP, собирать правильные данные из каждой строки, используя номер индекса через переменную $key.

0 голосов
/ 19 февраля 2012

Я верю, что в вашей форме process.php вы можете просто хранить их в массиве, когда извлекаете данные поста.Вам также нужно будет передать наибольшее значение $ id в качестве значения, чтобы вы могли перебирать соответствующее количество элементов.

Верх вашего process.php может выглядеть как

  <?php

    $processArray = array();
    $id = $_POST["id"];
    $i = 0;

    while ($i <= $id) {

    $processArray = ('item' => $_POST["someitem"_.$i], 'name' => $_POST["somename"_.$i], 'url' => $_POST["someurl"_.$i]):

    //Now you can do what you want with each value. Display it somewhere, store it somewhere, etc.

$i++;

    }

Я сделал это из головы, но это то, что приходит на ум, когда я смотрю на ваши проблемы.

0 голосов
/ 19 февраля 2012

Использование:

<input type="hidden" name="someitem[]" value="1" size="1" maxlength="1" />

И тогда в PHP $_GET["someitem"] будет массив

РЕДАКТИРОВАТЬ : Используйте $_POST["someitem"].Я предполагал, что вам нужен GET, из-за названия вопроса.

0 голосов
/ 19 февраля 2012

Я не совсем уверен в том, что вы спрашиваете. Но вы можете извлечь array s из $_POST, если к именам полей добавляется [].

<input name="myArray[1]" value="foo" />
<input name="myArray[37]" value="bar" />

даст вам

array(
    1 => 'foo',
    37 => 'bar'
)
0 голосов
/ 19 февраля 2012
<form action="process.php" method="post">
These elements are looped pending on cart items
<input type="hidden" name="someitem['.$id.']" value="1" size="1" maxlength="1" />
<input type="hidden" name="somename['.$id.']" value="1" size="1" maxlength="1" />
<input type="hidden" name="someurl['.$id.']" value="1" size="1" maxlength="1" />
</form>
...