新手问题:php中表单生成器的表
我很确定有解决办法,但我不确定如何正确表达。 我有一个表单需要保存在数据库中,非常简单,用php完成并存储在mysql表中。但是维护是相当繁琐的,所以我想知道是否有(或者我应该自己写)一个解决方案来将表单的问题和可能的值写到mysql表中,并编写一个php脚本来从该表生成表单。 我应该寻找什么:一个框架?标准脚本/类?。。。。还是我应该自己做 非常感谢 编辑以添加对Bobo回答的澄清新手问题:php中表单生成器的表,php,mysql,forms,generator,Php,Mysql,Forms,Generator,我很确定有解决办法,但我不确定如何正确表达。 我有一个表单需要保存在数据库中,非常简单,用php完成并存储在mysql表中。但是维护是相当繁琐的,所以我想知道是否有(或者我应该自己写)一个解决方案来将表单的问题和可能的值写到mysql表中,并编写一个php脚本来从该表生成表单。 我应该寻找什么:一个框架?标准脚本/类?。。。。还是我应该自己做 非常感谢 编辑以添加对Bobo回答的澄清 我将问题存储在一个单独的表中,我的问题是:如何从问题表生成表单 听起来像是在MySQL表中保存一个完整的数据库!
我将问题存储在一个单独的表中,我的问题是:如何从问题表生成表单 听起来像是在MySQL表中保存一个完整的数据库!那不是个好主意 您应该创建几个MySQL表并动态生成表单 比如: questions +------------+--------------+ | questionId | questionText | answers_for_questions +----------+---------------+------------+ | answerId | questionId_fk | answerText |
<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 |问题文本|
问题的答案
+----------+---------------+------------+
|回答ID |问题ID |回答文本|
因此,问题存储在一个表中,答案存储在另一个表中,并通过问题ID_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 |
问题
+------------+--------------+
|问题ID |问题文本|
|1 |你想要多少块泡泡糖|
|2 |你最喜欢的水果是什么|
问题的答案
+----------+---------------+------------+
|回答ID |问题ID |回答文本|
|1 | 1 |件|
|2 | 1 | 2件|
|3 | 1 | 3件|
|4 | 2 |个苹果|
|5 | 2 |个橙子|
|5 | 2 |香蕉|
假设以下MySQL表: 表名'questions',带有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>
试试这个解决方案。它存储问题短语、问题类型(问题的输入元素是否为文本、复选框、单选按钮等)和可能的答案(每个答案由;|字符组合分隔)。
存储问题的表格
+-----+----------------------+----------+------------------------+
| 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);
?>
短期:自己编写代码……假设您有时间根据元数据(即表单布局、问题文本和答案选择)制作“表单生成器”,然后将用户输入的数据单独保存在数据表中
长期:寻找一个框架…我还没有找到一个好的开源框架/能够正确抽象这个概念并允许适当的定制/配置深度
这里要讲一点meta:这是大多数企业web应用程序的工作方式;每个应用程序都使用不同的方式(即,SugarCRM将数据库中的一些元数据编码,而将.php数组中的其他部分编码为平面文件)…一些使用Smarty之类的模板引擎,而另一些则要求表单元数据不太抽象(即,可重用性较低,更直观)。谢谢Bobo,我需要澄清我的问题,我将问题存储在一个单独的表中,我的问题是如何从问题表生成表单?