1
<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

4 回答 4

1

使用name[],city[]country[]作为您的输入名称。然后它们将作为数组传入 PHP,您可以使用foreach.

于 2012-05-25T10:36:44.110 回答
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最好是 id 而不是名称)

foreach ($_POST['name'] as $index => $name) {
  $data = new Data();
  $data->name = $name;
  $data->city = $_POST['city'][$index];
  $data->country = $_POST['country'][$index];
  $data->save();
}
于 2012-05-25T10:34:28.573 回答
0

您可以将 for each 与“name_.$i”等按时构建的字符串一起使用,并将 $i 作为计数器

于 2012-05-25T10:34:43.113 回答
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-data 转换为您的数据模型,则如下所示:

$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;
}

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

于 2012-05-25T10:45:34.097 回答