pbsurvey mit anonymer Auswertung
| Autor | Nachricht |
|---|---|
|
Verfasst am: 19. 08. 2008 [10:59]
|
|
|
udohmen
Themenersteller
Dabei seit: 19.08.2008
Beiträge: 2
|
Hallo, nachdem ich nun schon einige Dinge aus diesem Forum nutzen konnte, will ich auch selber etwas hergeben. Ich habe ein Projekt realisiert, bei dem es darum ging, dass man einen Prüfbogen online ausfüllen kann, der von der Funktion ähnlich einem Führerscheinprüfbogen ist - der einzige Unterschied: es gibt ausschließlich multiple Choice Fragen. Zunächst hatte ich überlegt, was eigenes in PHP zu schreiben, nach ein wenig Recherche bin ich aber auf pbsurvey gestossen, dass ich dann sofort auch nutzte. Das Erstellen und Ausfüllen der Fragen ging relativ problemlos. Nachdem (fast) alles fertig war, fiel uns aber auf, dass wir gar keine richtige Auswertung hatten. Man konnte zwar per Scoring auf entsprechende Seiten umleiten, aber man konnte nicht angeben, ob der Nutzer eine Frage (und vor allem WELCHE) falsch beantwortet hat oder nicht. Und zusätzlich sollten dann noch die richtigen Antworten ausgegeben werden. Dank dem Thread von nicokaiser: http://www.typo3.net/forum/list/list_post//52798/ hatte ich zumindest schon mal eine Idee, wie ich das anpacken konnte. Seine Realisierung funktioniert aber nur mit echten Frontend-Usern (und bei mir aus irgendeinem Grund noch nicht mal damit). Wie auch immer, ich habe dann folgendes PHP-Skript geschrieben und in eine Seite eingebunden, die ich als Auswertungs-Seite (Abschluss-Aktion: Weiterleitung zur Seite) im entsprechenden pbsurvey-plugin angegeben habe. Nun zeigt er mir nach dem Abschließen des Prüfbogens an, wieviele Punkte man hat und welche Fragen falsch beantwortet wurden. Hier der Code: PHP <?php //Question container $qpid = $_GET['qpid']; //question startname $qpids = $_GET['qpids']; $this->arrSessionData = $GLOBALS['TSFE']->fe_user->getKey('ses','surveyData'); $userid = $this->arrSessionData['rid']; $falsche = 0; $buffer = ""; $m = 0; echo "<div><span class="bodytext">"; if(!isset($userid)){ $buffer .= "Sitzung abgelaufen, bitte Fragebogen neu starten!</span>"; echo $buffer; } else { $conn=mysql_connect("localhost","<user>","<password>"<img src="typo3conf/ext/mm_forum//res/smilies/icon_wink.gif" alt="icon_wink.gif" /> OR die("Kann SQL-Server nicht erreichen"<img src="typo3conf/ext/mm_forum//res/smilies/icon_wink.gif" alt="icon_wink.gif" />; mysql_select_db("<typo3-db>"<img src="typo3conf/ext/mm_forum//res/smilies/icon_wink.gif" alt="icon_wink.gif" /> OR die("DB nicht erreichbar"<img src="typo3conf/ext/mm_forum//res/smilies/icon_wink.gif" alt="icon_wink.gif" />; $sql0 = "select * from tx_pbsurvey_item where pid = $qpid AND question_type='1' order by sorting ASC"; $result0 = mysql_query($sql0); $anz0 = mysql_num_rows($result0); $punkte = $anz0; while($row0=mysql_fetch_assoc($result0)){ $m++; $teile = explode(" ", $row0['answers']); $anzahlAntw = count($teile); for($i=0;$i<=$anzahlAntw;$i++){ $Erg[$i]=substr(strstr($teile[$i], "|"<img src="typo3conf/ext/mm_forum//res/smilies/icon_wink.gif" alt="icon_wink.gif" />, 1); $Antwort[$i]=str_replace("|".$Erg[$i], "", $teile[$i]); if($Erg[$i] == '1'){ $num = $i+1; $query1 = "select * from tx_pbsurvey_answers where result ='$userid' AND pid ='$qpid' AND question =".$row0['uid']." AND answer ='$num'"; $result1 = mysql_query($query1); $anz1 = mysql_num_rows($result1); if($anz1 == 0){ if($m > $k){ $buffer .= "<b>Frage ".$m." </b>:"; $falsche++; } $buffer .= "Die Antwort <b>'".$Antwort[$i]."'</b> fehlt!"; $punkte--; $k = $m; } else { // Antwort korrekt beantwortet } } else { $num = $i+1; $query1 = "select * from tx_pbsurvey_answers where result = ".$userid." AND pid =".$qpid." AND question =".$row0['uid']." AND answer ='$num'"; $result1 = mysql_query($query1); $anz1 = mysql_num_rows($result1); if($anz1 == 1){ if($m > $k){ $buffer .= "<b>Frage ".$m." </b>:"; $falsche++; } $buffer .= "Die Antwort <b>'".$Antwort[$i]."'</b> ist falsch!"; $punkte--; $k = $m; } else { // Antwort korrekt beantwortet } } } } $fehlerpunkte = $anz0 - $punkte; echo "<span style="font-family: Arial, Helvetica, sans-serif; font-weight: bold; color: #2B5580; font-size: 11pt;">Auswertung</span>"; if($punkte < 19){ $AuswertungBuff = "Du hast <b>".$falsche." Fragen</b> falsch beantwortet. Wenn Du wirklich Interesse an dem Beruf hast, informier Dich weiter und absolvier am besten ein Praktikum.<b>Fehler: $fehlerpunkte </b>"; } elseif($punkte > 19 AND $punkte < 23){ $AuswertungBuff = "Du hast <b>".$falsche." Fragen</b> falsch beantwortet. Mittelprächtig. Ein wenig solltest Du Dich schon noch vorbereiten, falls es wirklich Dein Favorit ist. Der Beruf hat sehr viel mehr zu bieten, als Du momentan vielleicht denkst.<b>Fehler: $fehlerpunkte </b>"; } elseif($punkte > 23 AND $punkte < 2<img src="typo3conf/ext/mm_forum//res/smilies/icon_cool.gif" alt="icon_cool.gif" />{ $AuswertungBuff = "Gut gemacht. Nur <b>".$falsche." Fragen </b> falsch beantwortet. Du hast Dich bereits informiert und weißt, was Dich in der Ausbildung erwartet. Die letzten Unsicherheiten bekommst Du am besten in den Griff indem Du Dich mit Berufsvertretern unterhältst und Dir dafür ein paar konkrete Fragen überlegst.<b>Fehler: $fehlerpunkte </b>"; } else { $AuswertungBuff = "Glückwunsch, Du weißt eine Menge über den Beruf und was Dich in der Ausbildung erwartet. Eine gute Ausgangsbasis für eine Bewerbung. Alles Gute - die bisherige Vorbereitung hat gepasst.<b>Fehler: $fehlerpunkte </b>"; } echo $AuswertungBuff."_______"; echo $buffer."</span></div>"; } ?> Vielleicht kann ja jemand was damit anfangen. Hier übrigens der Link zum fertigen Projekt: [url]www.handwerksführerschein.de[/url] gruß Uli |
|
Verfasst am: 01. 08. 2011 [20:46]
|
|
|
klonkiponk
Dabei seit: 01.08.2011
Beiträge: 5
|
Hallo udohmen... erst mal vielen dank für Code. ich habe jedoch noch eine Frage. wie hast du denn die übergabe der qid... etc. realisiert? im pbsurvey rumgeschrieben, oder? mfg kevin |
|
Verfasst am: 02. 08. 2011 [08:23]
|
|
|
udohmen
Themenersteller
Dabei seit: 19.08.2008
Beiträge: 2
|
Hi, da das schon was länger her ist, kann ich mich nicht mehr ganz dran erinnern. Es müsste sich eigentlich beim pbsurvey um folgende Zeilen in der pi1/class.tx_pbsurvey_pi1.php handeln: PHP /**
* Set page header when jumping to other page
*
* @param string String according to configuration to set page link
* @return void
*/
function callHeader($strInput) {
header('Location: '.t3lib_div::locationHeaderUrl($this->pi_getPageLink($this->arrConfig[$strInput])).'&qpid='.$this->arrConfig['pid'].'&qpids='.$GLOBALS['TSFE']->id);
exit;
}Hier werden in dem Aufruf zur Auswertungsseite einfach die entsprechenden IDs per GET mitgegeben. Das Skript auf der Auswertungsseite aus meinem alten Post "empfängt" diese Variablen. Gruß Uli |
|
Verfasst am: 04. 08. 2011 [20:58]
|
|
|
klonkiponk
Dabei seit: 01.08.2011
Beiträge: 5
|
Hallo Uli, vielen Dank für deine Antwort - hat mir meine Suche stark erleichtert mfg [Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 04.08.2011 um 20:59.] |



