2009-12-05 58 views
2

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

非常感谢

编辑补充响应的澄清bobobobo的回答

我的问题存储在一个单独的表,我的问题是:如何从问题表的形式?

回答

0

听起来好像你在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 | 
+0

感谢bobobobo,我要澄清我的问题,我存储在一个单独的表的问题,我的问题是如何产生的问题表的形式? – Pompon 2009-12-05 16:21:27

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> 

这应该 - 假设我有不搞砸了真正badly-产生类似:

<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可能提供更好的结果,或易于实现。作为一名业余爱好者,我还没有找到与他们合作的时间,可靠地找出答案。非常令我遗憾。

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); 
?> 
2

短期:代码自己....假设你有时间根据您的元数据“表格生成”(即形式布局,问题文本,并回答-选择),然后保存用户输入的数据分开放在数据表中。

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

走出去这里有点元:这是怎么了大多数企业的Web应用程序;每一个用做不同的方式(即,SugarCRM的一些编码数据库中的元数据,并在平面文件.PHP阵列其他部分)......一些使用模板引擎诸如Smarty,而有些则需要你的元数据的形式来抽象程度较低(即可重用性较差,更直观)。