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

入力要素の名前を変更できる場合は、次のようにできます。

<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 に答える
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

$i をカウンターとして、「name_.$i」のような時間通りに構築された文字列で for each を使用できます

于 2012-05-25T10:34:43.113 に答える