Vous n'êtes pas identifié(e).
Pages :: 1
salut à tous
j'ai besoin d'aide sur une application php que je suis entrain de concevoir ces derniers temps. Au fait je suis entrain de mettre en oeuvre un examen en ligne(qcm) sur mon site web. Je dispose de 3 questions reparties dans 3 formulaires qui au final doivent envoyer les informations dans une seule table et créer un seul enregistrement dans ma table. Le problème à partir du deuxième formulaire il créé un nouveau en enregistrement. Que dois-je faire
Hors ligne
Voici le code mis dans chaque formulaire
<?php
if(isset($_POST['q1'])) $q1=$_POST['q1'];
else $q1="";
if(isset($_POST['nom'])) $nom=$_POST['nom'];
else $nom="";
if(!empty($q1))
{
$cx=mysql_connect('localhost','root','');
mysql_select_db('concours',$cx);
$req="INSERT INTO jeux (nom,q1) VALUES('$nom','$q1')";
mysql_query($req);
header('Location:qcm_2sciences.php');
mysql_close();
}
else
{
echo "Vos champs sont vise !";
}
?>
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans nom</title>
<link href="styles_qcm/styles.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="page" class="bloc">
<div class="chrono"><p><span id="Minutes">00</span> : <span id="Secondes">30</span></p></div>
<h2>EXAMEN : Test</h2>
<form method="post" action="qcm_1sciences.php" id="quizz">
<div class="qcm">
<p class="qcm_q">Une semaine ouvrable comporte :</p>
<p class="qcm_q"> </p>
<p>
<label>
<input type="radio" name="q1" value="pain" />
Pain</label>
<br />
<label>
<input type="radio" name="q1" value="maman" />
Maman</label>
<br />
</p>
<p class="qcm_q"> <br />
</p>
</div>
<div class="qcm">
<p class="qcm_q">Quel est votre nom?</p>
<input name="nom" type="text" />
</div>
<div class="qcm">
<p class="qcm_q">Quelle est la couleur du cheval blanc de Napoléon ?</p>
</div>
<input type="submit" value="Valider" />
</form>
<script type="text/javascript">
//<![CDATA[
window.setTimeout('compteARebours()', 1000);
//]]>
function compteARebours()
{
// RECUPERATION DES VALEURS DU COMPTE A REBOURS
var minutes = document.getElementById('Minutes').innerHTML;
var secondes = document.getElementById('Secondes').innerHTML;
// CONVERSION DES CHAINES DE CARACTERES EN VARIABLES NUMERIQUES
minutes = parseFloat(minutes);
secondes = parseFloat(secondes);
// MODIFICATION DES VALEURS DU COMPTE A REBOURS
if(secondes == 0)
{
if(minutes == 0)
{
document.getElementById('quizz').submit();
}
else
{
secondes = 59;
minutes = minutes - 1;
}
}
else
{
secondes = secondes - 1;
}
// CONVERSION DES VARIABES NUMERIQUES EN CHAINES DE CARACTERES
minutes = minutes.toString();
secondes = secondes.toString();
// METTRE DES ZEROS INITIAUX POUR L'ESTHETIQUE
if(minutes.length == 1)
{
minutes = '0' + minutes;
}
if(secondes.length == 1)
{
secondes = '0' + secondes;
}
// REMPLACER LES VALEURS DANS LE COMPTE A REBOURS
document.getElementById('Minutes').innerHTML = minutes;
document.getElementById('Secondes').innerHTML = secondes;
// RELANCER LA FONCTION APRES 1 SECONDE DE DELAI
window.setTimeout(compteARebours, 1000);
}
</script>
</body>
</html>
Hors ligne
Bonjour,
Soit vous stockez côté php les réponses de vos 3 formulaires et vous envoyez une seule requête INSERT pour créer votre enregistrement en BD, soit vous validez en BD à chaque soumission de votre formulaire avec un INSERT puis un UPDATE pour chaque autre formulaire. La différence est importante si vous êtes en transactionnel côté BD.
De plus votre gestion du timer est plus que largement insuffisante pour être efficace et jouer son rôle pleinement.
A ce titre je vous rappelle qu'en cas de contrôle des temps de réponses, ce sont les temps enregistrés en BD qui font foi en cas de litige éventuel. Par conséquent, le timer affiché côté client doit correspondre exactement à celui persisté en BD pour chaque réponse. Il faut de plus convenir d'une règle en cas d'indisponibilité réseau ou serveur si l'utilisateur réponds dans la dernière seconde également. Soit l'opération est validée côté serveur même s'il reçoit l'information 3s plus tard soit elle est rejetée et notifiée au client.
Cordialement,
Jc.
Dernière modification par Jc (19-06-2013 07:47:13)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
merci JC pour ta réponse ça marche. Un deuxième problème pour enregistrer les données j'utilise le nom donc l'internaute est obliger de saisir plusieurs fois son nom pour pour que l'or de l'envoi que les informations soient stockées sur la même ligne mais j'aimerai stocker ce nom et le stocker puis le faire appel pour les enregistrements afin que l'utilisateur n'est pas à saisir plusieurs fois son nom que dois-je faire?
Hors ligne
Bonjour,
On travaille avec l'ID de l'utilisateur jamais son nom. Il faut être en mesure de gérer sa connexion à l'application et son authentification via les sessions + BD et son ID.
Je vous conseille de lire des tutos concernant les différentes méthodes pour y parvenir, ensuite à vous de choisir ce qui vous conviendra le mieux.
Cordialement,
Jc
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
merci beaucoup et est il possible que tu me donne un tuto sur ce que tu m'a suggérer?
Hors ligne
Pages :: 1