2013-08-16 55 views
0

基本上,我需要在HTML文本輸入中構建一大串。如何將許多文本輸入保存爲PHP字符串?

首先,這些文本輸入是由一個按鈕動態創建的,因此,可以根據用戶需要輸入任意數量的輸入。

這裏是每個單獨的動態創建的文本輸入的格式:

[question] [incorrect-answer1] 
      [incorrect-answer2] 
      [incorrect-answer3] 
      [correct-answer] 
      Remove 

用[]包圍的每個項目是文本輸入,具有「刪除」是一個按鈕,刪除了當前問題沿。

這是創建的每個動態問題,我的整個jQuery函數:

function dynamicForm() { 

//set a counter 
var i = $('.dynamic-input#form-step2').length + 1; 
//alert(i); 
//add input 
$('a#add').click(function() { 
    $('<table><tr><td><p><span class="left"><input type="text" class="dynamic-input" name="items[]" id="' + i + '" placeholder="Question" /></span>' + 
     '<span class="right"><input type="text" class="dynamic-input" name="items[]" id="' + i + '" placeholder="Distraction 1" /><br /><input type="text" class="dynamic-input" name="items[]" id="' + i + '" placeholder="Distraction 2" /><br /><input type="text" class="dynamic-input" name="items[]" id="' + i + '" placeholder="Distraction 3" /><br /><input type="text" class="dynamic-input" name="items[]" id="' + i + '" placeholder="Correct Answer" /><br /><a href="#">Remove</a></span></p></td></tr></table>').fadeIn("slow").appendTo('#extender'); 
    i++; 

    $("a:contains('Remove')").click(function() { 
      $(this).parent().parent().remove(); 
    }); 

    return false; 
}); 


//fadeout selected item and remove 
$("#form-step2.dynamic-input").on('click', 'a', function() { 
    $(this).parent().fadeOut(300, function() { 
     $(this).empty(); 
     return false; 
    }); 
}); 
} 

這是一個簡單的小按鈕用於創建每個問題:

<a id="add" href="#">Add Question</a> 

我需要實現:

一旦按下按鈕,我需要以某種方式收集所有問題元素,並將它們保存到一個字符串中。這是每個問題必須保存的格式:

question1,incorrect-answer1,incorrect-answer2,incorrect-answer3,correct-answer 
question1,incorrect-answer1,incorrect-answer2,incorrect-answer3,correct-answer 
question2,incorrect-answer1,incorrect-answer2,incorrect-answer3,correct-answer 

正如你在上面看到的,總共有3個問題。每個問題都必須用換行符分隔,即'\ n'。順序必須是問題,3個不正確的答案,然後是正確答案;全部用逗號分隔。

當然,我並沒有要求任何人爲我做這件事。我只需要一些指導和支持,因爲我仍然是PHP和jQuery的新手(學習PHP 8周,jQuery 2周)。我的大部分代碼都是由來自Stack Overflow的現有代碼和其他在線資源構建的。

所有幫助是極大的讚賞

+1

換行符'\ N'不是'/ N'。 – Barmar

+0

謝謝。我做了一個編輯來改變它。 – Fizzix

回答

1

這樣或許更靈活的選擇array_chunk(因爲你可能會在未來有更多的「不正確的答案」,而將需要不斷更新的array_chunk大小參數),您可以通過以下去:

在你的JavaScript代碼,你在哪裏填充DOM元素,你可以填充你的名字屬性作爲多維數組(我是從項目改名爲概念目的題):

$('<table><tr><td><p><span class="left"><input type="text" class="dynamic-input" name="questions[' +i +'][]" id="' + i + '" placeholder="Question" /></span>' + 
     '<span class="right"><input type="text" class="dynamic-input" name="questions[' +i +'][]" id="' + i + '" placeholder="Distraction 1" /><br /><input type="text" class="dynamic-input" name="questions[' +i +'][]" id="' + i + '" placeholder="Distraction 2" /><br /><input type="text" class="dynamic-input" name="questions[' +i +'][]" id="' + i + '" placeholder="Distraction 3" /><br /><input type="text" class="dynamic-input" name="questions[' +i +'][]" id="' + i + '" placeholder="Correct Answer" /><br /><a href="#">Remove</a></span></p></td></tr></table>').fadeIn("slow").appendTo('#extender'); 

所以這將是問題的一個數組的數組。

在PHP端(類似於array_chunk後),您可以使用破滅這樣:

if(!empty($_POST['questions'])) { 
    foreach($_POST['questions'] as $question) { 
     echo implode(',',$question) ."\n"; 
    } 
} 
+0

謝謝你的幫助。我決定使用你的方法,因爲我認爲它很好,並且可以對我將來可能需要做的任何改變開放(例如添加更多答案,如你所說的)。雖然,換行似乎不起作用,當它迴響於頁面。有什麼建議爲什麼發生這種情況? – Fizzix

+1

Yeap - 「\ n」不會反映在HTML中。對於HTML,你應該使用「
」 – jexx2345

+0

我把它保存到我的SQL數據庫,並且換行符正常工作。非常感謝您的幫助。我會改變你的答案正確的答案,因爲這幫助我相當多:) – Fizzix

3

使用array_chunk()$_POST['items']轉換成一個嵌套的數組,讓每個元素是一組問題和答案。循環訪問該數組,使用implode()以逗號連接子數組的元素,然後構造包含這些字符串的新數組。然後在這個新陣列上使用implode()將它們與換行符連接起來。

你說你不是要求任何人爲你做,所以我沒有在這裏包括代碼。閱讀這些功能的文檔,它應該是非常簡單的。

+0

這正是我所期待的。我感謝您的幫助。謝謝! – Fizzix

相關問題