Check out the LimeSurvey source code on GitHub!

QCM d'évaluation

More
5 years 11 months ago #57781 by Aurelienazerty
Bonjour,

Je cherche à faire un questionnaire d'évaluation sous forme de QCM avec un système de notation par groupe de question.
Le but est de pouvoir avoir une note.
J'ai vu qu'il était possible de faire des évaluations sur ce tutoriel cependant, dans mon cas je cherche du binaire (1 ou plusieurs réponses justes, le reste c'est 0 point).
Y a t'il possibilité de répondre à ce besoin.

Par avance merci,

Aurélien

Please Log in to join the conversation.

More
5 years 11 months ago #57784 by DenisChenu
Réponse multiple ?

Certaines réponses sont bonnes et d'autres fausse ?

Dans ce cas, le changement de base de la version 1.90 à entrainer une dégradation. Tu peux utiliser la version 1.87 qui permettais cette possibilité :)

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand (or search sondages pro).

Please Log in to join the conversation.

More
5 years 11 months ago #57795 by Aurelienazerty
C'est ça :
- Réponses multiples
- Des réponses justes et des réponses fausses
- Avoir un cumul des "points" "marqués" par groupe de questions.

Please Log in to join the conversation.

More
5 years 11 months ago #57801 by DenisChenu

Aurelienazerty wrote: C'est ça :
- Réponses multiples
- Des réponses justes et des réponses fausses
- Avoir un cumul des "points" "marqués" par groupe de questions.

OK,

Il faut donc utiliser la version 1.87 : sourceforge.net/projects/limesurvey/file...rvey_stable/1.87%2B/

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand (or search sondages pro).
The following user(s) said Thank You: Aurelienazerty

Please Log in to join the conversation.

More
5 years 11 months ago #57816 by Aurelienazerty
Oui en effet, ça a l'air d'être bon. Merci !
Je n'ai pas encore trouvé le moyen de voir le cumul des points marqués par le candidat (et par groupe de question) mais je cherche en attendant que la documentation soit de nouveau en ligne.

Please Log in to join the conversation.

More
5 years 11 months ago #57830 by Aurelienazerty
J'ai beau fouiller, je ne trouve pas cette fonctionnalité.
Existe-t-elle oui faut il le faire à la main en tapant dans la Bdd ?

Please Log in to join the conversation.

More
5 years 11 months ago - 5 years 11 months ago #57832 by Nickko
En effet, il ne doit y avoir que l'utilisateur qui voit ces points.

Nickko
Ergonome / Usability expert
Last Edit: 5 years 11 months ago by Nickko.
The following user(s) said Thank You: Aurelienazerty

Please Log in to join the conversation.

More
5 years 11 months ago #57843 by Aurelienazerty
Ok merci, je vais donc faire une page à part. En espérant que le modèle de données ne soit pas trop complexe à comprendre.

Please Log in to join the conversation.

More
5 years 11 months ago #57907 by Aurelienazerty
Voilà si ça intéresse QQ1, voilà le script que j'ai fais pour avoir le résultat. C'est sale et fais sans utiliser le framework, mais le principe y est :
<?php 
//Code à la sale
//Param : id_questionnaire, id_candidat
if (isset($_POST['id_questionnaire'])) {
	$id_questionnaire = $_POST['id_questionnaire'];
} else {
	$id_questionnaire = -1;
}
if (isset($_POST['id_candidat'])) {
	$id_candidat = $_POST['id_candidat'];
} else {
	$id_candidat = -1;
}
 
$db = mysql_connect('localhost', 'root', ''); 
mysql_select_db('limesurvey',$db); 
 
 
$sql = "SELECT * from lime_surveys_languagesettings"; 
$req = mysql_query($sql, $db) or die('Erreur SQL !<br>' . $sql . '<br>'.mysql_error()); 
 
$options_questionnaires = '';
while($data = mysql_fetch_array($req))  {
	if ($data['surveyls_survey_id'] == $id_questionnaire) {
		$selected = ' selected="selected" ';
	} else {
		$selected = '';
	}
	$options_questionnaires .= '<option value="' . $data['surveyls_survey_id'] . '" ' . $selected . '>' . $data['surveyls_title'] . '</option>';
}
 
if ($id_questionnaire != -1) {
	$sql = "SELECT * from lime_tokens_" . $id_questionnaire; 
	$req = mysql_query($sql) or die('Erreur SQL !<br>' . $sql . '<br>'.mysql_error()); 
 
	$options_candidat = '';
	while($data = mysql_fetch_array($req))  {
		if ($data['tid'] == $id_candidat) {
			$selected = ' selected="selected" ';
		} else {
			$selected = '';
		}
		$options_candidat .= '<option value="' . $data['tid'] . '" ' . $selected . '>' . $data['firstname'] . ' ' . $data['lastname'] . '</option>';
	}
}
 
//mysql_close();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
	<head>
		<title>Résultats aux questionnaires</title>
		<meta http-equiv="content-Type" content="text/html;CHARSET=UTF-8" />
		<meta http-equiv="content-language" content="fr" />
	</head>
	<body>
		<form method="post">
			Selectionnez le questionnaire :
			<select name='id_questionnaire'>
				<option value='-1'></option>
				<?php echo $options_questionnaires; ?>
			</select>
			<br />
			<?php if ($id_questionnaire != -1) : ?>
			Selectionnez le candidat :
			<select name='id_candidat'>
				<option value='-1'></option>
				<?php echo $options_candidat; ?>
			</select>
			<br />
			<?php endif; ?>
			<input type="submit" value="Voir">
		</form>
		<br />
		<?php 
		if ($id_questionnaire != -1 && $id_candidat != -1) {
			$sql = 'SELECT * FROM `lime_groups` where sid = ' . $id_questionnaire;
			$req = mysql_query($sql, $db) or die('Erreur SQL !<br>' . $sql . '<br>'.mysql_error());
 
			$totalGeneral = 0;
			$totalGeneralCandidat = 0;
 
			while($data = mysql_fetch_array($req))  {
				$id_group = $data['gid'];
 
				$sql = '
					SELECT sum(assessment_value) pointquestion
					FROM lime_questions q
					JOIN lime_answers a
						ON a.qid = q.qid
					WHERE q.sid = ' . $id_questionnaire . ' 
					AND q.gid = ' . $id_group . '
				';
				$req2 = mysql_query($sql, $db) or die('Erreur SQL !<br>' . $sql . '<br>'.mysql_error());
				$total = 0;
				while($data2 = mysql_fetch_array($req2))  {
					$total += $data2['pointquestion'];
				}
				//Les résultats de la personne Sont stock dans une table à part
				//dans des colonnes de type n°QuestionnaireXn°GroupeXn°questionXn°code_question
				//Pour faire court, on filtre qu'avec les "bonnes réponses"
				$sql = '
					SELECT q.qid, a.code, a.assessment_value
					FROM lime_questions q
					JOIN lime_answers a
						ON a.qid = q.qid
					WHERE q.sid = ' . $id_questionnaire . ' 
					AND q.gid = ' . $id_group . ' 
					AND a.assessment_value <> 0 
				';
				$req2 = mysql_query($sql, $db) or die('Erreur SQL !<br>' . $sql . '<br>'.mysql_error());
				$totalCandidat = 0;
				while($data2 = mysql_fetch_array($req2))  {
					$id_question = $data2['qid'];
					$code_reponse = $data2['code'];
					$coef = $data2['assessment_value'];
					$totalGeneral += $coef;
					$code = $id_questionnaire . 'X' . $id_group . 'X' . $id_question . $code_reponse;
					$sql = '
						SELECT ' . $code . '
						FROM lime_survey_' . $id_questionnaire . ' s
						INNER JOIN lime_tokens_' . $id_questionnaire . ' t
							ON t.token = s.token 
						WHERE tid = ' . $id_candidat . ' 
						AND  ' . $code . ' LIKE "Y"
					';
					//die($sql);
					$req3 = mysql_query($sql, $db) or die('Erreur SQL !<br>' . $sql . '<br>'.mysql_error());
					while($data3 = mysql_fetch_array($req3))  {
						$totalCandidat += $coef;
						$totalGeneralCandidat += $coef;
					}
				}
 
				echo '<b>' .  $data['group_name'] . '</b> : ' . $totalCandidat . ' / ' . $total . '<br />';
			}
			echo '<br /><b>Total</b> : ' . $totalGeneralCandidat . ' / ' . $totalGeneral . '<br />';
		}
		?>
	</body>
</html>

Please Log in to join the conversation.

More
5 years 11 months ago #57908 by DenisChenu
Salut,

Un grand merci pour le retour , :)

Juste une remarque importante, il faut que tu filtre tes identifiants, sinon il y a un sacré risque de sécurité.
<?php
if (isset($_POST['id_questionnaire'])) {
	$id_questionnaire = intval($_POST['id_questionnaire']);
} else {
	$id_questionnaire = -1;
}
if (isset($_POST['id_candidat'])) {
	$id_candidat = intval($_POST['id_candidat']);
} else {
	$id_candidat = -1;
}

Comme les identifiant sont obligatoirement des integer, on les force directement :)

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand (or search sondages pro).
The following user(s) said Thank You: Aurelienazerty

Please Log in to join the conversation.

Moderators: Nickko
Imprint                   Privacy policy         General Terms & Conditions         Revocation information and revocation form