如何在POST中获取相同的字段

时间:2012-05-25 10:31:52

标签: php

<form action="form.php" id="form">
<input type="text" name="name_1"><input type="text" name="city_1"><input type="text" name="country_1">
<input type="text" name="name_2"><input type="text" name="city_2"><input type="text" name="country_2">
<input type="text" name="name_3"><input type="text" name="city_3"><input type="text" name="country_3">

    <input type="submit">
</form>

如何在form.php文件中获取此数据的最佳方法?这是用jQuery生成的。可以是3(现在)或30。

在form.php中我有:

$data = new Data();
$data->name = $_POST['name_1'];
$data->city = $_POST['city_1'];
$data->country = $_POST['country_1'];
$data->save();
$data = new Data();
$data->name = $_POST['name_2'];
$data->city = $_POST['city_2'];
$data->country = $_POST['country_2'];
$data->save();
$data = new Data();
$data->name = $_POST['name_3'];
$data->city = $_POST['city_3'];
$data->country = $_POST['country_3'];
$data->save();

但如果超过3?我想用 foreach ,但是怎么样?我如何生成输入或获取此数据?

4 个答案:

答案 0 :(得分:1)

使用name[]city[]country[]作为输入名称。然后他们将作为数组进入PHP,您可以使用foreach进行迭代。

答案 1 :(得分:0)

您可以使用for循环:

for ($i = 1; $i <= 3; $i++) {
  $data = new Data();
  $data->name = $_POST['name_'.$i];
  $data->city = $_POST['city_'.$i];
  $data->country = $_POST['country_'.$i];
  $data->save();
}

但是如果你可以改变你的html:

<input type="text" name="name[]"><input type="text" name="city[]"><input type="text" name="country[]">
<input type="text" name="name[]"><input type="text" name="city[]"><input type="text" name="country[]">
<input type="text" name="name[]"><input type="text" name="city[]"><input type="text" name="country[]">

你不需要知道计数。(name_1,name_2最好是身份但不是名字)

foreach ($_POST['name'] as $index => $name) {
  $data = new Data();
  $data->name = $name;
  $data->city = $_POST['city'][$index];
  $data->country = $_POST['country'][$index];
  $data->save();
}

答案 2 :(得分:0)

你可以使用你的每一个按时构建的字符串,例如&#39; name _。$ i&#39;,$ i作为计数器

答案 3 :(得分:0)

如果您可以更改输入元素的名称,可以这样做:

<input type="text" name="items[1][name]"><input type="text" name="items[1][city]"><input type="text" name="items[1][country]">
<input type="text" name="items[2][name]"><input type="text" name="items[2][city]"><input type="text" name="items[2][country]">
<input type="text" name="items[3][name]"><input type="text" name="items[3][city]"><input type="text" name="items[3][country]">

数字不必相邻,但必须是唯一的。要将$_POST - 数据转换为您的数据模型,将会是这样的:

$items = $_POST['items'];

$dataList = array();
foreach($items as $item) {
    $data = new Data();
    $data->name = $item['name'];
    $data->city = $item['city'];
    $data->country = $item['country'];
    $dataList[] = $data;
}

当然,您可以根据需要添加任意数量的项目。

如果您无法更改输入元素的名称,则可以使用其他解决方案之一。我只会修改它们,以便元素的数量不像以下那样硬编码:

$dataList = array()
for($i = 1; isset($_POST["name_$i"]); ++$i) {
    $data = new Data();
    $data->name = $_POST["name_$i"];
    // ... and so on
    $dataList[] = $data;
}

当然,使用该解决方案,数字必须是连续的/相邻的。