2013-08-16 2 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

Я сохранил его в моей базе данных My SQL, и разрывы строк работают отлично. Большое спасибо за Вашу помощь. Я буду менять ваш ответ на правильный ответ, так как это помогло мне довольно много :) – Fizzix

3

array_chunk() Использование для преобразования $_POST['items'] в гнездовой массив, так что каждый элемент является один набор вопросов и ответов. Прокрутите этот массив, используя implode(), чтобы объединить элементы подмассивов с запятыми и построить новый массив, содержащий эти строки. Затем используйте implode() в этом новом массиве, чтобы связать их с символами новой строки.

Вы сказали, что не просите кого-либо сделать это за вас, поэтому я не включаю здесь код. Прочтите документацию по этим функциям, и это должно быть довольно просто.

+0

Это именно то, что я искал. Я ценю вашу помощь. Благодаря! – Fizzix

Смежные вопросы