Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
新手问题:php中表单生成器的表_Php_Mysql_Forms_Generator - Fatal编程技术网

新手问题:php中表单生成器的表

新手问题:php中表单生成器的表,php,mysql,forms,generator,Php,Mysql,Forms,Generator,我很确定有解决办法,但我不确定如何正确表达。 我有一个表单需要保存在数据库中,非常简单,用php完成并存储在mysql表中。但是维护是相当繁琐的,所以我想知道是否有(或者我应该自己写)一个解决方案来将表单的问题和可能的值写到mysql表中,并编写一个php脚本来从该表生成表单。 我应该寻找什么:一个框架?标准脚本/类?。。。。还是我应该自己做 非常感谢 编辑以添加对Bobo回答的澄清 我将问题存储在一个单独的表中,我的问题是:如何从问题表生成表单 听起来像是在MySQL表中保存一个完整的数据库!

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

非常感谢

编辑以添加对Bobo回答的澄清


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

听起来像是在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,我需要澄清我的问题,我将问题存储在一个单独的表中,我的问题是如何从问题表生成表单?