Enquête systeem
Ik heb een probleem. Ik heb op dit moment een klant. De klant wilt een enquête systeem. Met daarin de mogelijkheid om enquetes te maken, en dan 5 verschillende soorten vraag types namelijk:
ja/nee
Multiple Choise
eens/oneens
beantwoorden op schaal 1 2 3 4 5
Open ruimte
Hoe kan ik dit het beste aanpakken/maken? Want ze willen meerdere enquêtes maken, en telkens een ander soort vraag typen. Ik zit al een paar dagen te brain stormen. maar heb geen idee hoe ik dit het beste kan aanpakken.
Ik hoop dat jullie mij begrijpen en misschien een goede oplossing weten.
Toevoeging op 24/02/2015 08:31:41:
Dit is een voorbeeld van hoe ze het bijvoorbeeld willen:
http://gyazo.com/9519a4a5b57654d0f33a7269839900ae
Database :
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
enquetes
- equeteId (PK)
- enqueteName
- enqueteDiscription
enqueteQuestions
- questionId (PK)
- enqueteId (FK)
- question
- questionType (JA_NEE , MULTIPLE , AGREE_DISAGREE , ONE_TO_FIVE , TEXT)
enquetePossibleAnswers
- possibleAnswerId (PK)
- questionId (FK)
- possibleAnswer
- possibleAnswerOrder
enqueteAnswers
- answerId (PK)
- questionId (FK)
- answer
- userId (indien van toepassing)
- equeteId (PK)
- enqueteName
- enqueteDiscription
enqueteQuestions
- questionId (PK)
- enqueteId (FK)
- question
- questionType (JA_NEE , MULTIPLE , AGREE_DISAGREE , ONE_TO_FIVE , TEXT)
enquetePossibleAnswers
- possibleAnswerId (PK)
- questionId (FK)
- possibleAnswer
- possibleAnswerOrder
enqueteAnswers
- answerId (PK)
- questionId (FK)
- answer
- userId (indien van toepassing)
En een stukje basiscode voor het bouwen van de pagina :
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/* assuming http://www.url.tld?enquete=1 */
<table>
<?php
$link = mysqli_connect("host" , "username" , "password" , "database");
$questionSql = "SELECT * FROM enqueteQuestions WHERE equeteId-=''.$_GET["enqueteId"].'" ;
$result = mysqli_query($questionSql , $link) ;
while($row = mysqli_fetch_assoc($result)) {
echo "<tr><td>".$row["question"]."</td>" ;
switch($row["questionType"]) {
case "TEXT" :
{
echo '<td><textarea></textarea></td></tr>';
}
break;
case "JA_NEE" :
{
echo '<td>
<input type="radio">Ja <br />
<input type="radio">Nee
</td></tr>';
}
break;
case "AGREE_DISAGREE" :
{
echo '<td>
<input type="radio">Eens <br />
<input type="radio">Oneens
</td></tr>';
}
break;
case "ONE_TO_FIVE" :
{
echo '<td>
<input type="radio">1 <br />
<input type="radio">2 <br />
<input type="radio">3 <br />
<input type="radio">4 <br />
<input type="radio">5
</td></tr>';
}
break;
case "MULTIPLE" :
{
echo '<td>' ;
$sqlAnswers = "SELECT * FROM enquetePossibleAnswers WHERE questionId=" . $row["questionId"] ." ORDER by possibleAnswerOrder ASC";
$resultAnswers = mysqli_query($sqlAnswers , $link) ;
while($rowAnswers = mysqli_fetch_assoc($resultAnswers)) {
echo '
<input type="checkbox">'.$rowAnswers["possibleAnswer"].' <br />
';
}
echo '</td></tr>' ;
}
}
}
?>
</table>
<table>
<?php
$link = mysqli_connect("host" , "username" , "password" , "database");
$questionSql = "SELECT * FROM enqueteQuestions WHERE equeteId-=''.$_GET["enqueteId"].'" ;
$result = mysqli_query($questionSql , $link) ;
while($row = mysqli_fetch_assoc($result)) {
echo "<tr><td>".$row["question"]."</td>" ;
switch($row["questionType"]) {
case "TEXT" :
{
echo '<td><textarea></textarea></td></tr>';
}
break;
case "JA_NEE" :
{
echo '<td>
<input type="radio">Ja <br />
<input type="radio">Nee
</td></tr>';
}
break;
case "AGREE_DISAGREE" :
{
echo '<td>
<input type="radio">Eens <br />
<input type="radio">Oneens
</td></tr>';
}
break;
case "ONE_TO_FIVE" :
{
echo '<td>
<input type="radio">1 <br />
<input type="radio">2 <br />
<input type="radio">3 <br />
<input type="radio">4 <br />
<input type="radio">5
</td></tr>';
}
break;
case "MULTIPLE" :
{
echo '<td>' ;
$sqlAnswers = "SELECT * FROM enquetePossibleAnswers WHERE questionId=" . $row["questionId"] ." ORDER by possibleAnswerOrder ASC";
$resultAnswers = mysqli_query($sqlAnswers , $link) ;
while($rowAnswers = mysqli_fetch_assoc($resultAnswers)) {
echo '
<input type="checkbox">'.$rowAnswers["possibleAnswer"].' <br />
';
}
echo '</td></tr>' ;
}
}
}
?>
</table>
Even snel uit mn hoofd geklopt dus kan een foutje hier en daar in zitten, maar dit zou je een goed idee moeten geven van hoe en wat :).
Jacco
PS: code is niet geschikt om 1 op 1 te publiceren daar er geen enkele security check of verificatie in zit
Gewijzigd op 24/02/2015 10:23:20 door Jacco Engel
Bedankt voor je reactie het ziet er aardig goed uit.
Zelf heb ik nooit gewerkt met switch en case.
maar zodra je dit maakt. hoe kan je dan beste maken met het maken van zo'n enquete?
Zou je de vraag kunnen herformuleren zodat deze wel duidelijk is :)?
De code die je stuurt ziet er goed uit. Zelf heb ik nog nooit gewerkt met het principe van switch en case, dus dat moet ik sowieso nog leren maar het ziet er goed uit.
De code die jij liet zien is voor de output van de enquête aan de bezoekers.
Maar hoe zou ik het het beste kunnen aanpakken bij het systeem waarbij we het gaan opzetten. Dus de pagina waar we daadwerkelijk de enquête maken.
Want als ze bijvoorbeeld bij vraag 1 een multiple chooise willen doen, moeten ze iets anders krijgen als bij een ja nee vraag.
Stel ze willen bij vraag 2 een textarea doen. hoeven ze geen multiple chooise dingen in te vullen. als voorbeeld.
Hopelijk snap je nu wat ik bedoel?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<script type="text/javascript">
function checkQuestionType() {
var questionType = document.getElementById("question_type") ;
var multipleAnswers = document.getElementById("multiple_answers") ;
if(questionType.value == "MULTIPLE") {
multipleAnswers.style.display = "";
} else {
multipleAnswers.style.display = "none";
}
}
</script>
<table>
<tr>
<td>Question</td>
<td><input type="text"></td>
</tr>
<tr>
<td>
Question type
</td>
<td>
<select id="question_type">
<option value="JA_NEE">Ja / Nee</option>
<option value="MULTIPLE">Multiple Choice</option>
<option value="AGREE_DISAGREE">Eens / Oneens</option>
<option value="ONE_TO_FIVE">Range (1 tot 5)</option>
<option value="TEXT">Open vraag</option>
</select>
</td>
</tr>
<tr id="multiple_answers" style="display : none">
<td>Antwoorden (1 antwoord) per regel</td>
<td><textarea></textarea></td>
</tr>
</table>
function checkQuestionType() {
var questionType = document.getElementById("question_type") ;
var multipleAnswers = document.getElementById("multiple_answers") ;
if(questionType.value == "MULTIPLE") {
multipleAnswers.style.display = "";
} else {
multipleAnswers.style.display = "none";
}
}
</script>
<table>
<tr>
<td>Question</td>
<td><input type="text"></td>
</tr>
<tr>
<td>
Question type
</td>
<td>
<select id="question_type">
<option value="JA_NEE">Ja / Nee</option>
<option value="MULTIPLE">Multiple Choice</option>
<option value="AGREE_DISAGREE">Eens / Oneens</option>
<option value="ONE_TO_FIVE">Range (1 tot 5)</option>
<option value="TEXT">Open vraag</option>
</select>
</td>
</tr>
<tr id="multiple_answers" style="display : none">
<td>Antwoorden (1 antwoord) per regel</td>
<td><textarea></textarea></td>
</tr>
</table>
Volgende gaat lullig klinken maar is niet zo bedoeld :
Als ik het nog verder voor je uit moet schrijven kun je je klant beter naar mij toe sturen, ik ga namelijk niet een systeem voor je uitkloppen wat jij kunt factureren :)
Gewijzigd op 24/02/2015 10:43:56 door Jacco Engel
Ik zal eerlijk zijn, ik verdien niks. Dit is mijn eerste klant, dus doe Het Gratis. Enquête is een klein ding van het hele opdracht. Ze wilde informatie winnende systemen. Dus een poll en enquête, de poll heb ik al gemaakt maar ik had geen idee hoe ik moest beginnen met enquête. Maar er zitten al veel meer systemen die ik al wel gemaakt heb. Alleen enquêtes had ik problemen. Dus enorm bedankt
Geen enkel probleem :)
Heb eigenlijk probleempje en ik gok dat ik inner join / left join moet gebruiken.
Ik wil namelijk dat mensen maar 1x een enquete kunnen invullen.
Dus bijvoorbeeld:
De enquetes 1 2 3 5 staan online
enquete 4 staat offline.
Pietje heeft enquete 1 al ingevuld, die staat in een aparte table.
Pietje moet dan enquete 2 3 of 5 krijgen
(Online/offline word aangegeven in de DB met een 0 of 1)
Mijn vraag is hoe kan ik dit het beste doen?
Even een kleine database opbouw:
Tabel: enquete_questions
Hier staan alle vragen in en wat voor typen het is
Table: enquete_answers
Hier staan alle antwoorden in + het ID van de enquete
Wat ik graag zou willen:
Als iemand de enquete heeft ingevuld staat dat bij enquete_answers, daar staat ook ID van enquete_questions.
Dus ik zou graag willen een PHP script dat een andere enquete pakt (Die online staat (Kijk bericht hierboven)), wat nog niet is ingevuld. Dus wat niet bij enquete_answers staat
En als je het e-mailadres niet hebt, laat iemand dan een activatie-code aanvragen via zijn/haar e-mailadres.
("nummertje trekken")
Dat laatste weerhoudt iemand er niet van om meerdere keren dezelfde enquete aan te vragen via verschillende e-mailadressen, dus als je een vast adressenbestand hebt (als je er (wat meer) verzekerd van wilt zijn dat alle enquetes maar 1x worden ingevuld door iemand) dan zou dat beter zijn.
Tenzij iemand hier al dubbel geregistreerd stond... :)
Het is een systeem waar mensen inloggen. Dus naam en alles zit al vast, zodra je ingelogd bent kan je bestanden downloaden. Ik werk met credits dus als credits op zijn kan je niks downloaden.
Om extra credits te krijgen wil ik dat mensen een enquête invullen.
Maar ik wil dat die mensen maar 1x een enquête kunnen invullen en dus niet meerdere keren.
Dat lijkt mij een kwestie van bijhouden of iemand een enquete volledige heeft ingevuld, dus een soort van koppeltabel tussen gebruikers en enquetes met een veldje "ingevuld" ja/nee.
SELECT * FROM enquetes WHERE enqueteId NOT IN (
SELECT aq.enqueteId FROM enqueteAnswers ea
JOIN enqueteQuestions eq on eq.questionId = ea.questionId);
even snel een query die je alle enquetes terug geeft die de bezoeker nog niet heeft ingevuld