新手问题:表格在php中形成生成器

时间:2009-12-05 16:03:09

标签: php mysql forms generator

我很确定有一个解决方案,但我不确定如何正确地说出来。 我有一个需要保存在数据库中的表单,在php中非常简单并存储在mysql表中。但维护是相当繁琐的,所以我想知道是否有(或者我应该自己编写)一个解决方案,在mysql表中编写表单的问题和可能的值,并编写一个php脚本来从表中生成表单。 我应该寻找什么:一个框架?一个标准的脚本/类?....或者我应该自己做?

非常感谢

编辑添加澄清以回应bobobobo的回答

我将问题存储在一个单独的表中,我的问题是:如何从问题表中生成表单?

4 个答案:

答案 0 :(得分:2)

短期:自己编码....假设您有时间根据元数据制作“表单生成器”(即表单布局,问题文本和答案选项),然后将用户输入的数据分别保存在数据表中。

长期:寻找框架......我还没有找到一个好的开源框架/正确抽象这个概念并允许适当的自定义/配置深度。

这里有点meta:这就是大多数企业Web应用程序的工作方式;每个人使用不同的方式(即,SugarCRM编码数据库中的一些元数据,以及平面文件中的.php数组中的其他部分)...一些使用模板引擎,如Smarty,而其他人需要您的表单元数据不那么抽象(即,可重用性更低,更直观)。

答案 1 :(得分:0)

听起来你正在保存整个< form>在MySQL表中!这不是一个好主意。

您应该创建一些MySQL表并动态生成表单

类似的东西:


questions
+------------+--------------+
| questionId | questionText |


answers_for_questions
+----------+---------------+------------+
| answerId | questionId_fk | answerText |

所以问题存储在一个表格中,答案存储在另一个表格中,并通过questionId_fk字段回传/链接回适当的问题。

示例数据:


questions
+------------+--------------+
| questionId | questionText |
|     1      | How many pieces of bubble gum do you wish? |
|     2      | What is your favorite fruit? |

answers_for_questions
+----------+---------------+------------+
| answerId | questionId_fk | answerText |
|    1     |       1       |   1 piece  |
|    2     |       1       |   2 pieces  |
|    3     |       1       |   3 pieces  |
|    4     |       2       |   apples  |
|    5     |       2       |   oranges  |
|    5     |       2       |   bananas  |

答案 2 :(得分:0)

假设有以下MySQL表:

表名'问题',列q_id,q_text

<?php

// I'm assuming you've connected to the database server, and the correct database

$query = "SELECT q_id AS num, q_text AS question FROM questions";
$results = mysql_query($query);

$row = mysql_fetch_array($results);

?>

<form enctype="form/multipart" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<fieldset>

<?php

while($row = mysql_fetch_array($results)) {

echo "<label for=\"q" . $row['num'] . "\">" . $row['question'] . "</label>";
echo "<input type=\"text\" name=\"q" $row['num'] . "\" />

}

?>
</fieldset>
</form>

这应该 - 假设我没有搞砸 - 产生类似的东西:

<label for="q1">What is your name?</label><input type="text" name="q1" />
<label for="q2">What is your favourite colour?</label><input type="text" name="q2" />

也可能值得添加id属性,但看看基础是否先工作。

作为附录,这只会实现直接<label> / <input>对;如果您需要使用单选按钮或复选框,那么您需要一些区分所需表单元素类型的方法。几乎肯定会涉及第二个表(针对不同类型的“无线电”,“检查”,“文本”,“文件”等),以及用于将问题文本链接到该问题的表单元素类型的查找表。

此外,值得注意的是,使用mysqlipdo可能会提供更好的结果或易于实施。作为业余爱好者,我还没有时间和他们一起工作,以便可靠地找到答案。很遗憾。

答案 3 :(得分:0)

试试这个解决方案。它存储问题短语,问题类型(问题的输入元素是文本,复选框,单选按钮等),以及可能的答案(将每个答案分开; |字符组合。 存储问题的表格;

+-----+----------------------+----------+------------------------+
| qid | que_phrase           | type     | possible_answers       |
+-----+----------------------+----------+------------------------+
|   1 | What is my birthday? | checkbox | 1986-01-05;|1984-01-05 |

CREATE TABLE `questions` (
  `qid` int(11) NOT NULL auto_increment,
  `que_phrase` mediumtext collate latin1_general_ci NOT NULL,
  `type` varchar(20) collate latin1_general_ci NOT NULL,
  `possible_answers` mediumtext collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`qid`)
)

代码看起来像这样。

<?php
$con = mysql_connect("localhost","root","root");

if (!$con)
{
    die('Could not connect: ' . mysql_error());
}

$db_selected = mysql_select_db("test", $con);

if (!$db_selected)
{
    die ("Can\'t use test : " . mysql_error());
}
print_r($_POST);
$sql = "SELECT * FROM questions";
$result = mysql_query($sql);
echo "<form id='qform' name='qform' method='post'>";
echo "<table>";
while($row = mysql_fetch_array($result))
{
    $q_id       = $row['qid'];
    $q_phrase = $row['que_phrase'];
    $q_type = $row['type'];
    $q_pos_answers = $row['possible_answers'];
    echo "<tr>";
    echo "<td>{$q_id}.</td>";
    echo "<td>{$q_phrase}</td>";
    if ('text' == $q_type){
        echo "<td><input type='text' name='{$q_id}' id='{$q_id}' value='{$q_pos_answers}'/></td>";
    }
    else if ('checkbox' == $q_type){
        $answers = preg_split('/;\|/', $q_pos_answers);
        echo "<td>";
        foreach ($answers as $num => $ans) {
            echo "<input type='checkbox' name='{$q_id}[]' id='{$q_id}[]' value='{$ans}'/>";
            echo "{$ans}<br/>";
        }
        echo "</td>";
    }
    // Code for other types
    echo "</tr>";
}
echo "<tr><td colspan=3 align='center'><input type='submit' value='Submit' id='btnsub' name='btnsub'/></td></tr>";
echo "</form>";
echo "</table>";
mysql_close($con);
?>