我有一个表单需要保存在数据库中,用 PHP 完成非常简单并存储在 MySQL 表中。但维护非常繁琐,所以我想知道是否有(或者我应该编写自己的)解决方案来在 MySQL 表中写入表单的问题和可能的值,并编写 PHP 脚本从表生成表单。 我应该寻找什么:框架?标准脚本/类?...或者我应该自己做?
我将问题存储在单独的表中,我的问题是:如何从问题表生成表单?
短期:编写自己的代码......假设您有时间根据元数据(即表单布局、问题文本和答案选择)制作“表单生成器”,然后单独保存用户输入的数据在数据表中。
长期:寻找一个框架...我还没有找到一个好的开源框架/可以正确抽象这个概念并允许适当的定制/配置深度。
这里要稍微介绍一下:这是大多数企业 Web 应用程序的工作方式;每个都使用不同的方式来执行此操作(即 SugarCRM 对数据库中的一些元数据进行编码,而其他部分则在平面文件中的 .php 数组中进行编码)...有些使用 Smarty 等模板引擎,而另一些则需要您的表单元数据更少抽象(即,更少可重用,更直观)。
尝试这个解决方案。它存储问题短语、问题类型(问题的输入元素是否是文本、复选框、单选按钮等)和可能的答案(用 ;| 字符组合分隔每个答案。 存储问题的表;
+-----+----------------------+----------+------------------------+
| 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);
?>
听起来您正在将整个
假设有以下 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>
对;如果您需要使用单选按钮或复选框,那么您将需要某种方法来区分所需的表单元素类型。这几乎肯定会涉及第二个表(对于不同类型的“radio”、“check”、“text”、“file”等)和一个查找表,用于将问题文本链接到该问题的表单元素类型。
此外,值得注意的是,使用
mysqli
或 pdo
可能会提供更好的结果或易于实施。作为一名业余爱好者,我还没有时间与他们一起可靠地找出答案。太让我羞愧了。