Poster les bonnes et mauvaises réponses d'un test par mail

Petit nouveau ! | 3 Messages

20 août 2010, 11:45

Bonjour, je travaille sur un test en ligne. Lorsque la personne à rempli le test, et le formulaire avec ses coordonnées (sur une deuxième page), un mail automatique est envoyé au formateur, mais il ne reçoit que la comptabilisation des points dans chaque catégorie (grammaire, verbes etc...). Le formateur souhaiterait pouvoir voir où la personne a fait des erreurs...

Je reprends le travail de quelqu'un qui n'est pas vraiment disponible...comment je peux faire, sachant que je peux afficher les bonnes et mauvaises réponses mais seulement sur la deuxième page juste avant le formulaire, le but étant de ne pas donner les réponses à la personne qui fait le test. Voilà les écritures où il y a les réponses :
	if(isset($_POST['suivant'])){
	// Si on arrive de la page precedente, alors les données POST du test sont presente, donc on peut faire la boucle.
	// Une fois la boucle faite, les donnees sont enregistrées en sessions.
		foreach($_POST['ans'] as $cle => $valeur) {
			if (trim(strtolower($_POST['ans'][$cle])) == $good[$cle]){
				$question_courante = substr($cle, 1, 2);
				//Affichage des bonnes reponses
				//echo '<li>'.$cle.' : <span style ="'.$ansUser.'">'.$_POST["ans"][$cle].'</span> => <span style="'.$ansGood.'">BON</span></li>';
				if ($question_courante <= 30){
					$pts = $pts + 1; // Les questions de 1 a 30 donnent 1 point
				} else {
					$pts = $pts + 2; // Les questions de 31 a 60 comptent double
				}
				
				// Comptage des bonnes réponses plus précis (rajouté le 13/10/09)
				if ((0 <= $question_courante) && ($question_courante <= 20)){
					$rep_grammar = $rep_grammar + 1; // Réponses de 1 à 20 = GRAMMAR
				} elseif ((21 <= $question_courante) && ($question_courante <= 30)) {
					$rep_prep = $rep_prep + 1; // Réponses de 21 à 30 = PREPOSITIONS
				} elseif ((31 <= $question_courante) && ($question_courante <= 45)) {
				  $rep_verbs = $rep_verbs + 1; // Réponses de 31 à 45 = VERBS
				} else {
				  $rep_vocab = $rep_vocab + 1; // Réponses de 46 à 60 = VOCAB
				}
				
				
				
				$bonne_reponse = $bonne_reponse + 1;
			} else {
				//Affichage des mauvaises reponses
				//echo '<li>'.$cle.' : <span style ="'.$ansUser.'">'.$_POST["ans"][$cle].'</span> => <span style="'.$ansWrong.'">FAUX</span> La reponse correcte etait : '.$good[$cle].'</li>';
			}
		} 
	$_SESSION['bonne_rep'] = $bonne_reponse;
	$_SESSION['total_score'] = $pts;
	$_SESSION['pts_grammar'] = $rep_grammar;
	$_SESSION['pts_prepositions'] = $rep_prep;
	$_SESSION['pts_verbs'] = $rep_verbs*2;
	$_SESSION['pts_vocabulaire'] = $rep_vocab*2;
	}
Et voilà une partie du mail envoyé au formateur :
			// Contenu du mail
			$acb_msg  = "--$mime_boundary\n";
			$acb_msg .= "Content-Type: text/html; charset=utf-8\n";
			$acb_msg .= "Content-Transfer-Encoding: 8bit\n\n";
			$acb_msg .= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'."\r";
			$acb_msg .= '<html xmlns="http://www.w3.org/1999/xhtml">'."\r";
			$acb_msg .= '<head>'."\r";
			$acb_msg .= '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />'."\r";
			$acb_msg .= '<title>Detail du test</title>'."\r";
			$acb_msg .= '<style type="text/css">'."\r";
			$acb_msg .= 'table {font-family: Verdana, Arial, Helvetica, sans-serif; font-size:11px; text-align:left;}'."\r";
			$acb_msg .= 'hr {color: #ddd; background-color: #ddd; height: 1px; border: 0;}'."\r";
			$acb_msg .= '</style>'."\r";
			$acb_msg .= '</head>'."\r";
			$acb_msg .= '<body>'."\r";
			$acb_msg .= '<div style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size:12px;">'."\r";
			$acb_msg .= 'Bonjour,<br /><br />'.$fUserCiv.' '.$fUserName.' '.$fUserFirstname.' vient de soumettre le test : '.constant(strtoupper($_SESSION['lang_test'])).'<br /><br />'."\r";
			$acb_msg .= '<h3 style="color:#069;">D&eacute;tail du test :</h3>'."\r";
			$acb_msg .= '<table width="350" border="0" cellspacing="2" cellpadding="0">'."\r";
			$acb_msg .= '<tr>'."\r";
			$acb_msg .= '<th scope="row" style="color:#069;">Langue du test</th>'."\r";
			$acb_msg .= '<td>'.constant(strtoupper($_SESSION['lang_test'])).'</td>'."\r";
			$acb_msg .= '</tr>'."\r";
			$acb_msg .= '<tr>'."\r";
			$acb_msg .= '<th scope="row" style="color:#069;">Heure</th>'."\r";
			$acb_msg .= '<td>'.date("H:i").'</td>'."\r";
			$acb_msg .= '</tr>'."\r";
			$acb_msg .= '<tr>'."\r";
			$acb_msg .= '<th scope="row" style="color:#069;">Grammar</th>'."\r";
			$acb_msg .= '<td>'.$_SESSION['pts_grammar'].' / 20</td>'."\r";
	
Comment je peux faire ???? Et comment je l'écris surtout ?? Si vous avez une idée.... merci d'avance

ViPHP
xTG
ViPHP | 7331 Messages

20 août 2010, 11:51

Tu peux reprendre les corrections ainsi :
//Affichage des mauvaises reponses
$correction[] = '<li>'.$cle.' : <span style ="'.$ansUser.'">'.$_POST["ans"][$cle].'</span> => <span style="'.$ansWrong.'">FAUX</span> La reponse correcte etait : '.$good[$cle].'</li>';
Cela remplira un array avec pour chaque nouvel index une correction.

Ensuite si tu veux la garder tu peux faire ainsi (cf la fin de ton script) :
$_SESSION['correction'] = serialize($correction); // On transforme le tableau en une chaîne de caractère pour la sauvegarde

// Comment récupérer la chaîne sur une autre page ?
// $correction = unserialize($_SESSION['correction']); // $correction redeviendra un array

Petit nouveau ! | 3 Messages

20 août 2010, 14:25

Voilà ce que je reçois en faisant ce que tu m'as dit

# a:1:{i:0;s:165:"
: => BON
# ";}a:1:{i:0;s:195:"
: => FAUX La reponse correcte etait :
";}

Petit nouveau ! | 3 Messages

20 août 2010, 17:01

C'est bon j'ai réussi, j'avais oublié un truc ! Merci