2012-05-25 2 views
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 이상이있는 경우POST에서 동일한 필드를 얻는 방법

$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 (이제) 또는 form.php에서 30

내가 있나요? 사용하고 싶습니다 foreach,하지만 어떻게? 어떻게 입력을 생성하거나이 데이터를 얻을 수 있습니까? 당신처럼 HTML으로 변경 될 가능성이있는 경우에

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(); 
} 

을 :하지만

답변

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

물론이 솔루션의 번호는 연속/인접해야합니다.

0

당신은 루프에 대해 사용할 수 있습니다

<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(); 
} 
+0

* 3 (지금) 또는 30 일 수 있습니다. * – Esailija

+0

@Esailija 예, 3 일 것이라고 알고 있거나 자신의 HTML을 변경하면 더 좋을 것입니다. – xdazz

+0

원래 질문이 가변 금액 (예 : 3을 초과하는 경우)을 처리하려고 할 때 3 세트의 값으로 하드 코드 된 초기 게시물에 주석을 달았습니다. – Esailija

0

여러분은 각각 'name 카운터로 $ i를 사용하는 _. $ i '

1

name[], city[]country[]을 입력 이름으로 사용하십시오. 그런 다음 그들은 PHP로 foreach으로 반복 할 수있는 배열로 올 것입니다. 당신이 입력 요소의 이름을 변경할 수있는 경우

관련 문제