如何将许多文本输入保存为PHP字符串?

时间:2013-08-16 03:15:37

标签: php jquery

基本上,我需要在HTML文本输入上构建一个大字符串。

首先,这些文本输入是通过按钮动态创建的,因此,可以根据用户的需要提供任意数量的输入。

以下是每个动态创建的文字输入的格式:

[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和其他在线资源中已有的代码构建的。

非常感谢所有帮助

2 个答案:

答案 0 :(得分:3)

使用array_chunk()$_POST['items']转换为嵌套数组,以便每个元素都是一组问答。循环遍历此数组,使用implode()以逗号连接子数组的元素,并构造包含这些字符串的新数组。然后在这个新数组上使用implode()将它们与换行符连接起来。

你说你不是要求任何人为你做这件事,所以我不在这里包括代码。阅读这些函数的文档,它应该非常简单。

答案 1 :(得分:1)

作为array_chunk的一个可能更灵活的替代方法(因为您将来可能会有更多“错误答案”并且需要不断更新array_chunk大小参数),您可以使用以下内容:

在您填充DOM元素的javascript片段中,您可以将name属性填充为多维数组(为了概念目的,我将项目重命名为问题):

$('<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的帖子),你可以使用implode:

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