UN SIMPLE QCM EN LIGNE

kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015 - 4 juil. 2006 à 15:54
cirkooo Messages postés 35 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 26 décembre 2012 - 18 mars 2010 à 03:17
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/38432-un-simple-qcm-en-ligne

cirkooo Messages postés 35 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 26 décembre 2012
18 mars 2010 à 03:17
en fait cet appel, ne renvoie rien: matiere.php?id=8 . le problème est surement dans le primary key de l'id? non?
cirkooo Messages postés 35 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 26 décembre 2012
18 mars 2010 à 03:11
je voulais dire dans phpmyadmin, les requetes.
cirkooo Messages postés 35 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 26 décembre 2012
18 mars 2010 à 03:10
les matières s'affichent bien, mais aucune question n'apparait? la base de données est rempli, si ce n'est les deux dernières requetes: les alter add constraint, ne sont pas passés dans mon wamp, erreur quelconque. avec ie pareil. pourquoi, ces requetes ne passent pas dans wamp?:
ALTER TABLE `question`
ADD CONSTRAINT `testquestion` FOREIGN KEY (`idtest`) REFERENCES `test` (`idtest`);
ALTER TABLE `test`
ADD CONSTRAINT `matieretest` FOREIGN KEY (`idmatiere`) REFERENCES `matiere` (`idmatiere`);
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
12 avril 2007 à 00:01
Il faut faire attention avec les fonctions de bufferisation. Le temps que tu gagnes avec la virgule, tu le perd lors de la mise en tampon.
Mieux vaut s'en tenir eloigne sauf si necessaire (envoi d'un cookie apres du code html ou un echo).
Et l'envoi de donnees vers le flux de sortie ne dure pas 3 sec non plus, il faut relativiser. La bande passante y est pour beaucoup, aussi mieux vaut tabler sur un minimum de calcul de la part du serveur et faire travailler la bande passante que l'inverse, question de choix surement :-)
spidermario Messages postés 121 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 14 mars 2009 1
4 avril 2007 à 17:07
En fait, la virgule pour les echo n'est pas toujours plus rapide que le point dans la mesure où elle doit écrire plusieurs fois sur le flux de sortie, ce qui est long.

Toutefois, en mettant

ob_start();

au début du code et

ob_end_flush();

à la fin, echo n'écrira pas directement sur le flux de sortie mais sur un tampon qui sera vidé à l'appel de ob_end_flush, ce qui fait que la virgule devient plus performante. On peut d'ailleurs à tout moment appeler la fonction ob_get_content pour récupérer le contenu actuel du tampon.
ewlad Messages postés 1 Date d'inscription vendredi 26 mai 2006 Statut Membre Dernière intervention 22 août 2006
22 août 2006 à 01:05
Je trouve vos remarques très utile et le code devient plus robuste

Merci pour tous le deux !
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
17 juil. 2006 à 20:43
2/3 trucs :

- utilise les ' plutot que les " (surtout dans une requete de type SELECT * FROM !!)
- dans connect.php
-> $cnx = mysql_connect($mysqlServerDB,$userDB,$passwdDB) or
die("Echec de la connection");
mysql_select_db($dataBaseNameDB) or die("Echec de la connection");

Ton mysql_select_db() doit etre de la frome : mysql_sql_db($dataBaseNameDB, $cnx);

Evite les echo en boucle :
echo '<tr height="25"><td bgcolor="#CCFFCC">';
echo '[matiere.php?id='.$id.' '.$mat.']';
echo '</td><td bgcolor="#CCFFCC">';
echo $niv;
echo'</td><td bgcolor="#CCFFCC">';
echo $fil;
echo'</td></tr>';

Utilise de preference le '.' =>
Moi perso je fais sa :
$Affichage = '';
$Affichage .= '<tr height="25"><td bgcolor="#CCFFCC">';
$Affichage .= [matiere.php?id='.$id.' '.$mat.']';
$Affichage .= </td><td bgcolor="#CCFFCC">';
$Affichage .= $niv;
$Affichage .= </td><td bgcolor="#CCFFCC">';
$Affichage .= $fil;
$Affichage .= </td></tr>';
echo $Affichage;
fais le en debut de page et tu verras sa sera mieux et plus digeste (a mon sens evidement)

<?php
$score=0;
//conection à la base
require ("connect.php");
$choice = $_POST['choice'];
//compter le nombre des questions
$nbq=count($choice);
?>
<?php [...]
Si tu doit encore utiliser php, pourquoi referme la balise pour la re-ouvrir ??

Sinon pour la suite, je dirais que c'est sympa comme code malgre les quelques erreurs (on est la pour apprendre), et te souhaite de continuer comme sa (par contre essaye de faire un truc un peu plus fun comme code parce que les qcm ... lol... :p)

@+
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
6 juil. 2006 à 03:12
Exacte mais seulement pour les echo... après bon si c'est pour 3 echo c'est pas bien grave à partir du moment ou les variables sont concaténées et que les string sont entre simples quotes... ... .. .


@ tchaOo°
Taka_s_tiger Messages postés 32 Date d'inscription samedi 31 janvier 2004 Statut Membre Dernière intervention 5 juillet 2006
5 juil. 2006 à 13:38
il me semble avoir déja lu sur ce site que la virgule est à préférer plutot que l'opérateur de concaténation . (point) dans le cadre d'un echo...pour des raisons d'optimisation

quelqu'un peut confirmer ?
stepibou Messages postés 112 Date d'inscription jeudi 11 mars 2004 Statut Membre Dernière intervention 11 octobre 2006
5 juil. 2006 à 11:30
Daccord avec ces 2 commentaires...
Je rajouterai que ton doctype n'est pas en accord avec ton code...
pour mysql : "select * from" , ca c bof! y faut que tu selectionne ce dont tu a besoin..
Pour le php : pas faire des echo à la suite, privilegier le . (point)

bye
TheSin Messages postés 331 Date d'inscription mardi 12 novembre 2002 Statut Membre Dernière intervention 10 février 2009
5 juil. 2006 à 10:22
$mat=$qcm['matiere'];
$fil=$qcm['filiere'];
$niv=$qcm['niveau'];
pour faire juste après :
echo $mat;
echo $fil;
echo $niv;
(en enlevant l'html entre)
pourquoi pas un simple ...
echo $qcm['matiere'];
echo $qcm['filiere'];
echo $qcm['niveau'];
pas la peine de surcharger la mémoire inutilement ;)

De plus :
$id=$_GET['id'];
$idmat=$_GET['idmat'];
$ntest=$_GET['ntest'];
$mat=$_GET['mat'];
$fil=$_GET['fil'];
$niv=$_GET['niv'];
Tu met tout ca dans une requete mysql sans les vérifier, donc mysql injection très facile à faire ;)

Encore une petite chose ... je crois que le niveau initié est un peu exagéré ;)
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
4 juil. 2006 à 15:54
C'est qui qui note comme ça sans mettre de commentaire... pffffffffff... .. .

@ tchaOo°
Rejoignez-nous