php5:通过Form传递对象?能做到吗?

时间:2011-05-09 20:39:26

标签: php oop design-patterns http-post

我对测试应用程序有这个小问题。

目前看:

<form>
<span>1:Question goes here </span>
<input type=hidden name=true_1 value=10>
<input type=hidden name=false_1 value=20>
<input type=hidden name=target_1 value=color>
<select name=answer_1[]><option>blah</option><option>etc</option></select>

<span>2:Question goes here </span>
<input type=hidden name=true_2 value=40>
<input type=hidden name=false_2 value=20>
<input type=hidden name=target_2 value=size>
<select name=answer_2[]><option>blah</option><option>etc</option></select>
</form>

目前我使用的是一个爆炸的脚本(“_”,$ get);所以我可以用自己的属性处理每个问题。

目前的做法
1.从数据库中获取问题。 (问题,目标,真,假,答案)
2.浏览它们并创建一个类似于我上面写的所有问题的形式 3.当我发布时我会爆炸以单独获取每个问题属性 4.通过它们来评估答案是正确还是错误并给出分数

我想要做的就是把它变成oop
1.为每个问题创建一个对象并分配自己的属性(问题,真,假,目标,答案)foreach($ question)$ q [1] = new question();

2.使用$ q []供用户回答。

3.用户回答后接收$ q [],然后$ _POST。

希望我能说明这一点。但是对我来说,保持动态的所有事情非常重要,所以我需要包含隐藏的字段。 它可行吗?

1 个答案:

答案 0 :(得分:2)

您可以将json数据类型用于此类任务(假设您的对象只存储数据,而不是方法,也不需要__sleep,__ wakeup等)。

<input name="fooBar" value="<?php echo json_encode(/*some_array_with_data*/);?>">

表单POST后,您可以执行类似

的操作
$_POST['fooBar'] = json_decode($_POST['fooBar']);

并开始迭代生成的数组。

NB。因为json_encode导致字符串包含像这样的字符,所以你也应该使用base64_encode,url_encode或类似的东西。