2012-05-25 45 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(像現在一樣)或30如何在POST中獲取相同的字段

在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,但是怎麼樣?我怎樣才能生成輸入或獲取這些數據?

回答

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

當然,與該溶液中的號碼必須是連續的/相鄰。

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

*可以是3(現在)或30。* – Esailija

+0

@Esailija是的,如果他知道會是3,或者改變他的html會更好。 – xdazz

+0

我在評論你的初始帖子,它已經硬編碼爲3組值,當原始問題想要處理可變數量的情況時,例如超過3. – Esailija

0

你可以使用你的每個與時間建成的字符串,如'名稱_。$ i',以$ i作爲計數器

1

使用name[],city[]country[]作爲輸入名稱。然後他們會以數組的形式訪問PHP,您可以使用foreach進行迭代。

相關問題