2014-01-07 28 views
0

我有一個選擇對象的窗體。選項是使用mySQL DB中的PHP生成的。我也有一個'新'選項可用。如果用戶選擇「新建」,我正在使用jQuery - replaceWith函數將選擇對象更改爲輸入類型=「文本」對象。jQuery替換INPUT對象後PHP表單不工作

這一切都很好,除了在提交表單後PHP $ _POST ['description'] [0]爲空。爲什麼會這樣呢?下面我複製了一個選擇對象和jQuery的快照。

的jQuery:

$(function() { 
    $('select#description').change(function() { 
     if ($(this).val() == 'new') 
     var x = $(this).attr('name'); 
     $(this).replaceWith('<input type="text" name="description" id="description">'); 
     $('input#description').attr('name', x); 
     $('input#description').attr('id', x); 
    }); 
}); 

HTML/PHP:

<td> 
    <select id='description' name='description[$i]'> 
         <option value=''></option> 
         <option name='[$i]' value='new'>new</option>"; 
         echo $list = $this->desc_list(); 
echo "  </select> 
</td> 

這就是我要找的輸出:

<select id='description' name='description[0]'> 
<option value></option> 
<option value='new'>new</option> 
<option value='1'></option> 
</select> 

當值= '1'沒有描述,因爲當PHP保存最後一個條目時它是空的。一旦用戶選擇「新」的代碼更改選擇對象是:

<input type='text' name='description[0]' id='description[0]'> 

下一頁代碼可以是簡單的像

echo $_POST['description'][0] 

但它不會迴應什麼是在文本框中鍵入。爲什麼最後一項是空的?

+0

如果HTML/PHP能顯示輸出嗎?你給的是代碼本身.. – thedjaney

+1

var_export($ _ POST)是什麼意思?那裏有什麼與'description'相關的東西? – Oswald

+0

對不起,我不知道如何使用'var_export($ _ POST)'我只知道,一旦我點擊提交併要求PHP回顯$ _POST它顯示爲空,可能這是因爲PHP無法識別輸入,因爲它是由jQuery取代? – user3168144

回答

0

的答案被錄取:下面介紹的解決方案是不正確的。這個答案的評論中的對應似乎導致瞭解決方案。

你的問題似乎是試圖呼應後可變的方式: echo $_POST['description'][0]絕不會提供您輸入文字的值,因爲該字段的名稱是「描述[0]」,因此你會需要撥打echo $_POST['description[0]']

如果這不能解決您的問題,並且您不熟悉var_export:請嘗試在page2.php中的while循環的上方/下方放置print_r($_POST);,並讓我們知道輸出。

+0

感謝您的指導。我改變了我的代碼以另一種方式工作,但我仍然想知道我的代碼有什麼問題。 print_r($ _ POST);給出: Array([project_no] => 2 [pin] => n_projects [contracting_no] => 1 [lines] => 3 [asset_no] => Array([0] => 1 [1] => 1 [1] => 1) [quantity] => Array([0] => 1 [1] => 3 [2] => 5) [unit_price] => Array([0] => 2 [1 ] => 4 [2] => 6) [保存] =>保存) 我需要在列表中看到以下內容,但它不存在。 [description] => Array([0] => apples [1] => pear [2] =>桔子) – user3168144

+0

我認爲是因爲jQuery替換頁面加載後的輸入,它不再被視爲表單的一部分這可能嗎? – user3168144

+0

其實我只是證明自己錯了,顯然表單提交實際上將「['description [0]']」轉換爲「['description'] ['0']」,我似乎仍然需要學習自己。 我拿了phpfiddle的代碼,並在本地進行了測試 - 它的工作原理。我的輸出(包括print_r): Array([description] => Array([0] => test1 [1] => test2 [2] => test3)[submit] => submit)test1test2test3。你有沒有在任何時候通過jQuery改變表單提交? –

1

,因爲你已經取代「描述[$ i]」與「說明」

+0

var x = description [$ i]然後我用$('input#description')。attr('name',x);將名稱更改爲說明[$ i] – user3168144