2009-12-05 4 views
2

Je suis assez sûr qu'il existe une solution pour cela, mais je ne suis pas sûr de la façon de l'exprimer correctement. J'ai un formulaire qui doit être enregistré dans une base de données, assez simple en php et stocké dans une table mysql. Mais la maintenance est assez fastidieuse, donc je me demande s'il existe (ou je devrais écrire la mienne) une solution pour écrire les questions et les valeurs possibles du formulaire dans une table mysql et écrire un script php pour générer le formulaire à partir de la table. Que dois-je rechercher: un cadre? un script/classe standard? .... Ou devrais-je le faire moi-même?Newbie question: table pour former un générateur en php

Merci beaucoup

modifié pour ajouter les précisions en réponse à de bobobobo répondre

je stocke les questions d'une table séparée, ma question est: comment générer la forme de la table des questions?

Répondre

0

Il semble que vous sauvegardiez un formulaire <entier> dans la table MySQL! Ce n'est pas une bonne idée.

Vous devez créer quelques tables MySQL et de générer la forme à la volée

Quelque chose comme:

 

questions 
+------------+--------------+ 
| questionId | questionText | 


answers_for_questions 
+----------+---------------+------------+ 
| answerId | questionId_fk | answerText | 

Ainsi, les questions sont stockées dans une table, et les réponses sont stockées dans un autre et se rapportent retour/lien vers leur question appropriée par le champ questionId_fk.

données Exemple:

 

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

Merci bobobobo, je dois clarifier ma question, je stocke les questions dans un tableau séparé, ma question est de savoir comment générer le formulaire à partir du tableau des questions? – Pompon

0

En supposant que la table MySQL suivante:

table-name 'questions,' avec des colonnes 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> 

Cela devrait -assuming j'ai pas vraiment mal - générer quelque chose comme:

<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" /> 

Il peut également être utile de mettre des attributs id, mais voyez si les bases fonctionnent en premier.

En tant qu'addenda, ceci implémentera uniquement des paires droites <label>/<input>; Si vous avez besoin d'utiliser des boutons radio ou des cases à cocher, vous aurez besoin d'un moyen de différencier les types d'éléments de formulaire requis. Ce qui impliquera certainement une seconde table (pour différents types "radio", "vérification", "texte", "fichier", etc), et une table de recherche pour lier le texte de la question au type d'élément de formulaire pour cette question.

En outre, il est à noter que l'utilisation de mysqli ou pdo pourrait offrir de meilleurs résultats, ou une facilité d'implémentation. En tant qu'amateur, je n'ai pas encore trouvé le temps de travailler avec eux pour le découvrir, de manière fiable. À ma grande honte.

0

Essayez cette solution. Il syntagme question de magasin, type de question (si l'élément d'entrée pour la question est un texte, cases à cocher, boutons radio, etc.), et les réponses possibles (séparées chaque réponse; |. Combinaison de caractères Table pour stocker des questions;

+-----+----------------------+----------+------------------------+ 
| 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`) 
) 

Le code ressemblera à ceci.

<?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

court terme: Code votre propre .... en supposant que vous avez le temps de faire un « générateur de forme » en fonction de vos métadonnées (formulaire mise en page, texte de la question, et répondre-choix) puis enregistrez les données entrées par l'utilisateur séparément dans une table de données.

Long terme: Rechercher un cadre ... Je n'ai pas encore trouvé un bon framework open-source/qui résume correctement ce concept et permet de personnaliser/configurer la profondeur.

Aller un peu ici: c'est ainsi que fonctionnent la plupart des applications web d'entreprise; chacun utilise une manière différente de le faire (ie, SugarCRM encode certaines métadonnées dans la base de données, et d'autres parties dans des tableaux .php dans des fichiers plats) ... certains utilisent des moteurs de templates comme Smarty, d'autres nécessitent des métadonnées de formulaire être moins abstrait (c'est-à-dire moins réutilisable, plus intuitif).