Вопрос новичка: таблица для формирования генератора в php - PullRequest
2 голосов
/ 05 декабря 2009

Я почти уверен, что есть решение для этого, но я не уверен, как правильно его сформулировать. У меня есть форма, которую нужно сохранить в базе данных, довольно просто сделать в php и сохранить в таблице MySQL. Но обслуживание довольно утомительно, поэтому мне интересно, есть ли (или я должен написать свое) решение, чтобы записать вопросы формы и возможные значения в таблицу mysql и написать скрипт php для генерации формы из таблицы. Что я должен искать: рамки? стандартный сценарий / класс? .... Или я должен сделать это сам?

Большое спасибо

Отредактировано, чтобы добавить пояснение в ответ на ответ Бобобо

Я храню вопросы в отдельной таблице, мой вопрос: как создать форму из таблицы вопросов?

Ответы [ 4 ]

2 голосов
/ 07 декабря 2009

Краткосрочный : создайте свой собственный код .... при условии, что у вас есть время на создание "генератора форм" на основе ваших метаданных (т. Е. Макета формы, текста вопроса и вариантов ответа), затем сохраните введенные пользователем данные отдельно в таблицу данных.

Долгосрочный : Ищите платформу ... Мне еще предстоит найти хороший фреймворк с открытым исходным кодом /, который должным образом абстрагирует эту концепцию и допускает соответствующую глубину настройки / настройки.

Поговорим здесь немного мета: так работает большинство корпоративных веб-приложений; каждый использует свой способ (т. е. SugarCRM кодирует некоторые метаданные в базе данных, а другие части в массивах .php в плоских файлах) ... некоторые используют движки шаблонов, такие как Smarty, в то время как другие требуют, чтобы метаданные вашей формы быть менее отвлеченным (т.е. менее пригодным для повторного использования, более интуитивным).

0 голосов
/ 05 декабря 2009

Предполагая следующую таблицу 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 может обеспечить лучшие результаты или простоту реализации. Как любитель, я еще не нашел время поработать с ними, чтобы выяснить, надежно. К моему большому стыду.

0 голосов
/ 06 декабря 2009

Попробуйте это решение. В нем хранятся фраза вопроса, тип вопроса (является ли элемент ввода для вопроса текстом, флажками, радиокнопками и т. Д.) И возможные ответы (разделенные каждым ответом с помощью | | комбинации символов. Таблица для хранения вопросов;

+-----+----------------------+----------+------------------------+
| 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);
?>
0 голосов
/ 05 декабря 2009

Похоже, вы сохраняете все в таблице 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  |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...