Yeni soru: tablo php jeneratör oluşturmak için

4 Cevap php

I'm pretty sure there is a solution for this but I'm not sure about how to phrase it correctly. I have a form that needs to be saved in a database, pretty simple done in php and stored in a mysql table. But maintenance is pretty tedious, so I'm wondering if there is (or I should write my own) a solution to write the form's questions and possible values in a mysql table and write a php script to generate the form from the table. What should I look for: a framework? a standard script/class?.... Or should I do it myself?

Thanks a lot

Bobobobo cevabı cevaben açıklama eklemek için Düzenlendi

Ben ayrı bir tabloda soruları saklamak, benim soru: sorular tablosundan formunu oluşturmak için nasıl?

4 Cevap

Short term: Kod kendi .... sizin meta dayalı bir "form jeneratör" yapmak (yani form düzeni, soru metni, cevap-seçimler) vaktim varsayarak sonra kaydedip kullanıcı girdi bir veri tablosunda ayrı verileri.

Long term: bir çerçeve için ... Bak ben düzgün bu kavramı soyutlayan ve uygun özelleştirmek / configure derinliği sağlayan bir iyi açık kaynak çerçeve / bulmak zorunda.

Burada biraz meta gidecek: Bu en kurumsal web uygulamalarının nasıl olduğunu; her biri (yani, SugarCRM veritabanında meta bazı kodlar, ve. düz dosyaları php diziler diğer parçalar) bunu yapmanın farklı bir yol kullanır ... Smarty gibi bazı kullanım çiftleşmiş motorları, diğerleri için form meta ihtiyaç duyarken (daha sezgisel, yani daha az tekrar) daha az soyutlanmış olacak.

Eğer bütün bir

tasarruf gibi geliyor MySQL tabloda! Bu iyi bir fikir değil.

Birkaç MySQL tabloları oluşturmak ve anında formu oluşturmak gerekir

Gibi bir şey:


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


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

Yani sorular bir tabloda saklanır ve cevapları başka saklanır ve geri questionId_fk alana göre uygun soruya geri / linki ilişkili olan.

Örnek veri:


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  |

Aşağıdaki MySQL tablo varsayarsak:

sütunlar q_id table-name 'sorular' ile, 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>

Bu gerçekten böyle bir şey kötü-oluşturmak berbat ettik-varsayarak olmalıdır:

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

Bu aynı zamanda id niteliklerini koyarak değer olabilir, ancak temelleri ilk işe olmadığını görebilirsiniz.

Bir etmenler olarak, bu sadece düz <label> / <input> çiftleri uygulayacak; radyo düğmeleri veya onay kutularını kullanmak gerekiyorsa, o zaman gerekli form elemanı tipleri ayırt bazı yolu gerekir. Neredeyse kesinlikle bu soru için form eleman türüne soru metni bağlamak için ikinci bir (farklı "radyo" için, "kontrol", "metin", "dosya", vb) tablo ve bir arama tablosu içerecektir Hangi.

Ayrıca, fazlalaştı ki mysqli veya pdo iyi sonuçlar sunuyor, ya da uygulama kolaylığı olabilir kullanarak. Bir hobisi olarak, ben henüz güvenilir, öğrenmek için onlarla çalışmak için zaman bulamadı ettik. Benim utanç fazla.

Try this solution. It store question phrase, question type ( whether input element for question is a text, checkboxes, radiobuttons, etc), and possible answers ( separated each answer by ;| character combination. Table for storing 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`)
)

Kod bu gibi görünecektir.

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