8798 sujets

Développement web côté serveur, CMS

Bonjour,

Cette page me permet d'afficher successivement dans un tableau les résultats du TESTEUR et du VERIFICATEUR puis une phrase de commentaire pour chaque résultat:

On choisis de 1 à 30 themes et on choisis la phrase correspondante parmis 5 choix.

J'arrive à afficher les resultats du TESTEUR correctement par contre là ou ça coince c'est pour le VERIFICATEUR, il ne m'affiche que le premier résultat autant de fois que de themes selectionnés. (Ex: si on choisis de faire le TEST sur 3 themes alors il m'affiche 3x le même resultat, le premier)

echo "<div id='formtest'>
<table border=1 align='center'>
	
	<tr>
	  <td align='center'>TESTEUR</td>
	  <td align='center'>VERIFICATEUR</td>
	  <td align='center'>ECARTS</td>
	  <td align='center'>THEMES</td>
	</tr>
	
	<tr>
	  <td align='center'>".$nomdutesteur."</td>
	  <td align='center'>".$nomduverificateur."</td>
	  <td colspan=2 align='center'></td>
	</tr>";
	
//Requete pour récupérer les choix du TESTEUR.
$requetechoixt = mysql_query("SELECT * FROM reponses WHERE idtest=".$idtest." AND idutil=".$iddutesteur."");
while($reschoixt = mysql_fetch_assoc($requetechoixt)){	
		
		//Requete pour récupérer les idaff dans AFFIRMATIONS en vue de récupérer l'idtheme de la table THEMES.
		$requeteidtheme = mysql_query("SELECT idtheme, point FROM affirmations WHERE idaff=".$reschoixt['idaff']."");
		while($restheme = mysql_fetch_assoc($requeteidtheme)){
			
				//Déclaration de de l'écart
				if ($restheme['point'] == $restheme['point']){
					$restheme_ecart = "=";
				}
				elseif ($restheme['point'] > $restheme['point']){
					$restheme_ecart = "-";
				}
				else {
						$restheme_ecart = "+";
				}
			
		//Requete pour récupérer les noms des themes avec le $restheme['idtheme'] récupérer juste au-dessus.
		$requetenomtheme = mysql_query("SELECT intitule FROM themes WHERE idtheme=".$restheme['idtheme']."");

			//Requete pour récupérer les choix du TESTEUR.
			$requetechoixv = mysql_query("SELECT * FROM reponses WHERE idtest=".$idtest." AND idutil=".$idduverificateur."");
			while($reschoixv = mysql_fetch_assoc($requetechoixv)){

				while($resnomtheme = mysql_fetch_assoc($requetenomtheme)){
					echo "
				<tr>
					<td align='center'>".$reschoixt['idaff']."(".$restheme['point']." pts)</td>
					<td align='center'>".$reschoixv['idaff']."(".$restheme['point']." pts)</td>
					<td align='center'>".$restheme_ecart."</td>
					<td align='center'>".$resnomtheme['intitule']."</td>
				</tr>";
				}
			}
		}

		echo "
		<tr>
			<td colspan='4' align='center'><span class='res_phrase'>";
		  printf(ESTIME_SUR_EST,'111','toto','titi');
		echo "
			</span></td>
		</tr>";
}
echo "
	</table>
	</div>";
?>


Certainement ma boucle WHILE qui est mal positionnée.

Si quelqu'un à une astuce ...

D'avance merci.
Salut,

il faut que tu réinitialises les résultats de ta requête imbriquée (donc remettre le pointeur sur le premier) :
mysql_data_seek($requetenomtheme, 0);
while($resnomtheme = mysql_fetch_assoc($requetenomtheme)){

Au passage on pourrait traduire
//Déclaration de de l'écart
if ($restheme['point'] == $restheme['point']){
	$restheme_ecart = "=";
}
elseif ($restheme['point'] > $restheme['point']){
	$restheme_ecart = "-";
}
else {
	$restheme_ecart = "+";
}
par
//Déclaration de de l'écart
if ($a == $a){
	$restheme_ecart = "=";
}
elseif ($a > $a){
	$restheme_ecart = "-";
}
else {
	$restheme_ecart = "+";
}
donc le résultat sera toujours "=" Smiley murf
Ok pour:
mysql_data_seek($requetenomtheme, 0);

while($resnomtheme = mysql_fetch_assoc($requetenomtheme)){


J'AI FAIT UN TEST SUR 3 THEMES pour limiter l'exercice.

Ca fonctionne mieux par contre pour la "Déclaration de l'écart", maintenant que tu m'en parles il est vrai que ça ne fonctionne pas comme ca devrait mais j'avais laissé cette partis là de côté ...

Sinon AVANT la modif, j'avais le score du TESTEUR (les 3 bons choix apparaissaient) celui du VERIFICATEUR (un seul choix le premier se répétait).

APRES la modif, le score du TESTEUR n'est plus bon (il m'affiche 3 lignes avec le 1° choix, ensuite 3 lignes avec le 2° choix et enfin 3 lignes avec le 3° choix) MAIS les choix du VERIFICATEUR s'affichent correctement dans les 3x3 lignes du TESTEUR ......
Modifié par Jackisback (19 May 2009 - 15:48)
Jackisback a écrit :
APRES la modif, le score du TESTEUR n'est plus bon (il m'affiche 3 lignes avec le 1° choix, ensuite 3 lignes avec le 2° choix et enfin 3 lignes avec le 3° choix) MAIS les choix du VERIFICATEUR s'affichent correctement dans les 3x3 lignes du TESTEUR ......
Ben c'est qu'il ne faut pas imbriquer ton while dans un autre... Ne connaissant pas les structures de tes tables difficile d'en dire plus...
Voilà le code de la table ...

-- phpMyAdmin SQL Dump
-- version 3.1.1
--  http://www.phpmyadmin.net
 
--
-- Serveur: localhost
-- Généré le : Mar 19 Mai 2009 à 14:25
-- Version du serveur: 5.1.30
-- Version de PHP: 5.2.8

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Base de données: `titi`
--

-- --------------------------------------------------------

--
-- Structure de la table `affirmations`
--

CREATE TABLE IF NOT EXISTS `affirmations` (
  `idaff` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `idtheme` int(10) NOT NULL,
  `valeur` varchar(255) NOT NULL,
  `point` smallint(11) NOT NULL,
  PRIMARY KEY (`idaff`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;

--
-- Contenu de la table `affirmations`
--

INSERT INTO `affirmations` (`idaff`, `idtheme`, `valeur`, `point`) VALUES
(1, 1, 'Je suis content', 1),
(2, 1, 'Je ne suis jamais content', 2),
(3, 1, 'Je suis rarement content', 3),
(4, 1, 'J''ai toujours peur', 4),
(5, 1, 'J''ai mal au ventre', 5),
(6, 2, 'Je suis discret et reservé', 1),
(7, 2, 'Je n''ose pas souvent exprimer mon avis', 2),
(8, 2, 'J''émets une opinion si on me le demande', 3),
(9, 2, 'Je n''hésite pas à émettre mes opinions', 4),
(10, 2, 'Mon point de vue passe bien', 5);

-- --------------------------------------------------------

--
-- Structure de la table `connexion`
--

CREATE TABLE IF NOT EXISTS `connexion` (
  `id` smallint(6) NOT NULL AUTO_INCREMENT,
  `login` varchar(25) NOT NULL,
  `mdp` varchar(41) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

--
-- Contenu de la table `connexion`
--

INSERT INTO `connexion` (`id`, `login`, `mdp`) VALUES
(1, 'toto', '*59566802E6B1616DCEC08935FC0036EE04229EA8');

-- --------------------------------------------------------

--
-- Structure de la table `membre`
--

CREATE TABLE IF NOT EXISTS `membre` (
  `id` smallint(6) NOT NULL AUTO_INCREMENT,
  `nom` varchar(50) NOT NULL,
  `prenom` varchar(50) NOT NULL,
  `agence` varchar(50) NOT NULL,
  `email` varchar(100) NOT NULL,
  `qualite` varchar(50) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

--
-- Contenu de la table `membre`
--

INSERT INTO `membre` (`id`, `nom`, `prenom`, `agence`, `email`, `qualite`) VALUES
(1, 'Test', 'lulu', 'france', 'adresse@mail.fr', 'webmestre');

-- --------------------------------------------------------

--
-- Structure de la table `reponses`
--

CREATE TABLE IF NOT EXISTS `reponses` (
  `idtest` int(10) unsigned NOT NULL,
  `idutil` int(10) NOT NULL,
  `idaff` int(10) NOT NULL
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

--
-- Contenu de la table `reponses`
--

INSERT INTO `reponses` (`idtest`, `idutil`, `idaff`) VALUES
(1, 222, 1),
(1, 222, 8),
(1, 221, 2),
(1, 221, 5);

-- --------------------------------------------------------

--
-- Structure de la table `tests`
--

CREATE TABLE IF NOT EXISTS `tests` (
  `idtest` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `idtester` int(10) NOT NULL,
  `idverificateur` int(10) NOT NULL,
  `date` int(11) NOT NULL,
  PRIMARY KEY (`idtest`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

--
-- Contenu de la table `tests`
--

INSERT INTO `tests` (`idtest`, `idtester`, `idverificateur`, `date`) VALUES
(1, 221, 222, 1242648879);

-- --------------------------------------------------------

--
-- Structure de la table `themes`
--

CREATE TABLE IF NOT EXISTS `themes` (
  `idtheme` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `intitule` varchar(255) NOT NULL,
  PRIMARY KEY (`idtheme`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=33 ;

--
-- Contenu de la table `themes`
--

INSERT INTO `themes` (`idtheme`, `intitule`) VALUES
(1, 'Theme1'),
(2, 'Theme2');

-- --------------------------------------------------------

--
-- Structure de la table `utilisateurs`
--

CREATE TABLE IF NOT EXISTS `utilisateurs` (
  `idutil` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `nom` varchar(50) NOT NULL,
  PRIMARY KEY (`idutil`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

--
-- Contenu de la table `utilisateurs`
--

INSERT INTO `utilisateurs` (`idutil`, `nom`) VALUES
(222, 'Jeremy'),
(221, 'Toto');


Et voici le code de la page que je viens de modifier ....

<?php
//On enregistre dans des variables les données^$_POST pour faire les requete pour afficher les resultats.
$idtest = $_REQUEST['idtest'];
$nomdutesteur = $_REQUEST['nomt'];
$iddutesteur = $_REQUEST['idt'];
$nomduverificateur = $_REQUEST['nomv'];
$idduverificateur = $_REQUEST['idv'];

echo "<div id='formtest'>
<table border=1 align='center'>
	
	<tr>
	  <td align='center'>TESTEUR</td>
	  <td align='center'>VERIFICATEUR</td>
	  <td align='center'>ECARTS</td>
	  <td align='center'>THEMES</td>
	</tr>
	
	<tr>
	  <td align='center'>".$nomdutesteur."</td>
	  <td align='center'>".$nomduverificateur."</td>
	  <td colspan=2 align='center'></td>
	</tr>";
	
//Requete pour récupérer les choix du TESTEUR.
$requetechoixt = mysql_query("SELECT * FROM reponses WHERE idtest=".$idtest." AND idutil=".$iddutesteur."");
while($reschoixt = mysql_fetch_assoc($requetechoixt)){	
		
	//Requete pour récupérer les choix du VERIFICATEUR.
	$requetechoixv = mysql_query("SELECT * FROM reponses WHERE idtest=".$idtest." AND idutil=".$idduverificateur."");	
	while($reschoixv = mysql_fetch_assoc($requetechoixv)){		
		
		//Requete pour récupérer les idaff et les points du TESTEUR dans AFFIRMATIONS en vue de récupérer l'idtheme de la table THEMES.
		$requeteidthemet = mysql_query("SELECT idtheme, point FROM affirmations WHERE idaff=".$reschoixt['idaff']."");
		while($resthemet = mysql_fetch_assoc($requeteidthemet)){
			
			//Requete pour récupérer les idaff et les points du VERIFICATEUR dans AFFIRMATIONS en vue de récupérer l'idtheme de la table THEMES.
			$requeteidthemev = mysql_query("SELECT idtheme, point FROM affirmations WHERE idaff=".$reschoixv['idaff']."");
			while($resthemev = mysql_fetch_assoc($requeteidthemev)){
		
				//Déclaration de de l'écart
				if ($resthemet['point'] == $resthemev['point']){
					$restheme_ecart = "=";
				}
				elseif ($resthemet['point'] > $resthemev['point']){
					$restheme_ecart = "-";
				}
				else {
						$restheme_ecart = "+";
				}
			
					//Requete pour récupérer les noms des themes avec le $resthemet['idtheme'] récupérer juste au-dessus.
					$requetenomtheme = mysql_query("SELECT intitule FROM themes WHERE idtheme=".$resthemet['idtheme']."");
					mysql_data_seek($requetenomtheme, 0);
					while($resnomtheme = mysql_fetch_assoc($requetenomtheme)){
						echo "
					<tr>
						<td align='center'>".$reschoixt['idaff']."(".$resthemet['point']." pts)</td>
						<td align='center'>".$reschoixv['idaff']."(".$resthemev['point']." pts)</td>
						<td align='center'>".$restheme_ecart."</td>
						<td align='center'>".$resnomtheme['intitule']."</td>
					</tr>";
					}
			}
		}
		echo "
		<tr>
			<td colspan='4' align='center'>";
		  printf(ESTIME_SUR_EST,'111','toto','titi');
		echo "
			</td>
		</tr>";
	}
}
echo "
	</table>
	</div>";
?>

<?php
	pied();
?>
Re-salut,

bon ben je me répète mais le problème vient surtout de la normalisation de tes tables.

Voici comment je ferais en partant des affirmations suivantes :
* un test correspond à plusieurs thèmes (jeu de test).
* un test est effectué par un ou plusieurs binôme(s).

Du coup pour la restitution je ferais par test / binôme :
* récupération du jeu de test.
* pour chaque thème affichage des choix et points du testeur et du vérificateur (+résultat).

Ce qui donne :
tables :
-- phpMyAdmin SQL Dump
-- version 2.10.1
--  http://www.phpmyadmin.net
 
-- 
-- Serveur: localhost
-- Généré le : Jeu 21 Mai 2009 à 18:19
-- Version du serveur: 5.0.41
-- Version de PHP: 5.2.3

-- 
-- Base de données: `jack`
-- 

-- --------------------------------------------------------

-- 
-- Structure de la table `affirmations`
-- 

DROP TABLE IF EXISTS `affirmations`;
CREATE TABLE `affirmations` (
  `id_aff` int(10) unsigned NOT NULL auto_increment,
  `id_theme` int(10) NOT NULL,
  `valeur` text NOT NULL,
  `point` smallint(6) NOT NULL,
  PRIMARY KEY  (`id_aff`)
) TYPE=MyISAM  AUTO_INCREMENT=16 ;

-- 
-- Contenu de la table `affirmations`
-- 

INSERT INTO `affirmations` (`id_aff`, `id_theme`, `valeur`, `point`) VALUES 
(1, 1, 'Je suis content', 1),
(2, 1, 'Je ne suis jamais content', 2),
(3, 1, 'Je suis rarement content', 3),
(4, 1, 'J''ai toujours peur', 4),
(5, 1, 'J''ai mal au ventre', 5),
(6, 2, 'Je suis discret et reservé', 1),
(7, 2, 'Je n''ose pas souvent exprimer mon avis', 2),
(8, 2, 'J''émets une opinion si on me le demande', 3),
(9, 2, 'Je n''hésite pas à émettre mes opinions', 4),
(10, 2, 'Mon point de vue passe bien', 5),
(11, 3, 'Trop d''la balle', 1),
(12, 3, 'Cool', 2),
(13, 3, 'Pas mal', 3),
(14, 3, 'Bof', 4),
(15, 3, 'Nul', 5);

-- --------------------------------------------------------

-- 
-- Structure de la table `binomes`
-- 

DROP TABLE IF EXISTS `binomes`;
CREATE TABLE `binomes` (
  `id_binome` int(10) unsigned NOT NULL auto_increment,
  `id_tester` int(11) NOT NULL,
  `id_verif` int(11) NOT NULL,
  PRIMARY KEY  (`id_binome`)
) TYPE=InnoDB AUTO_INCREMENT=2 ;

-- 
-- Contenu de la table `binomes`
-- 

INSERT INTO `binomes` (`id_binome`, `id_tester`, `id_verif`) VALUES 
(1, 221, 222);

-- --------------------------------------------------------

-- 
-- Structure de la table `jeux_tests`
-- 

DROP TABLE IF EXISTS `jeux_tests`;
CREATE TABLE `jeux_tests` (
  `id_test` int(10) unsigned NOT NULL,
  `id_theme` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`id_test`,`id_theme`)
) TYPE=InnoDB;

-- 
-- Contenu de la table `jeux_tests`
-- 

INSERT INTO `jeux_tests` (`id_test`, `id_theme`) VALUES 
(1, 1),
(1, 2),
(1, 3);

-- --------------------------------------------------------

-- 
-- Structure de la table `reponses`
-- 

DROP TABLE IF EXISTS `reponses`;
CREATE TABLE `reponses` (
  `id_test` int(10) unsigned NOT NULL,
  `id_theme` int(10) unsigned NOT NULL,
  `id_binome` int(10) unsigned NOT NULL,
  `tester_verif` enum('T','V') NOT NULL,
  `id_aff` int(10) NOT NULL,
  PRIMARY KEY  (`id_test`,`id_theme`,`id_binome`,`tester_verif`)
) TYPE=MyISAM;

-- 
-- Contenu de la table `reponses`
-- 

INSERT INTO `reponses` (`id_test`, `id_theme`, `id_binome`, `tester_verif`, `id_aff`) VALUES 
(1, 1, 1, 'T', 1),
(1, 2, 1, 'T', 8),
(1, 1, 1, 'V', 2),
(1, 2, 1, 'V', 6),
(1, 3, 1, 'T', 12),
(1, 3, 1, 'V', 12);

-- --------------------------------------------------------

-- 
-- Structure de la table `tests`
-- 

DROP TABLE IF EXISTS `tests`;
CREATE TABLE `tests` (
  `id_test` int(10) unsigned NOT NULL auto_increment,
  `libelle` varchar(50) NOT NULL,
  `date_test` date NOT NULL,
  PRIMARY KEY  (`id_test`)
) TYPE=MyISAM  AUTO_INCREMENT=2 ;

-- 
-- Contenu de la table `tests`
-- 

INSERT INTO `tests` (`id_test`, `libelle`, `date_test`) VALUES 
(1, 'Premier test', '2009-05-21');

-- --------------------------------------------------------

-- 
-- Structure de la table `test_binome`
-- 

DROP TABLE IF EXISTS `test_binome`;
CREATE TABLE `test_binome` (
  `id_test` int(10) unsigned NOT NULL,
  `id_binome` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`id_test`,`id_binome`)
) TYPE=InnoDB;

-- 
-- Contenu de la table `test_binome`
-- 

INSERT INTO `test_binome` (`id_test`, `id_binome`) VALUES 
(1, 1);

-- --------------------------------------------------------

-- 
-- Structure de la table `themes`
-- 

DROP TABLE IF EXISTS `themes`;
CREATE TABLE `themes` (
  `id_theme` int(10) unsigned NOT NULL auto_increment,
  `intitule` varchar(255) NOT NULL,
  PRIMARY KEY  (`id_theme`)
) TYPE=MyISAM  AUTO_INCREMENT=4 ;

-- 
-- Contenu de la table `themes`
-- 

INSERT INTO `themes` (`id_theme`, `intitule`) VALUES 
(1, 'Theme1'),
(2, 'Theme2'),
(3, 'Theme3');

-- --------------------------------------------------------

-- 
-- Structure de la table `utilisateurs`
-- 

DROP TABLE IF EXISTS `utilisateurs`;
CREATE TABLE `utilisateurs` (
  `id_util` int(10) unsigned NOT NULL auto_increment,
  `nom` varchar(50) NOT NULL,
  PRIMARY KEY  (`id_util`)
) TYPE=MyISAM  AUTO_INCREMENT=223 ;

-- 
-- Contenu de la table `utilisateurs`
-- 

INSERT INTO `utilisateurs` (`id_util`, `nom`) VALUES 
(222, 'Jeremy'),
(221, 'Toto');

code
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Test</title>
<style type="text/css">
table {
	border-collapse: collapse;
	border: 1px solid #03476F;
	font: 1em Verdana, Arial, Helvetica, sans-serif;
	color: #333333;
	background: #FFCC66;
}
td, th {
	border: 1px solid #663300;
	padding: .4em;
}
th {
	background: #FF9900;
	border: 1px solid #663300;
	padding: .4em;
}
td.emphase {
	text-align: center;
	font-weight: bold;
}
 </style>
</head>
<body>
<?php
require_once('connexion_jack.inc.php');

//$id_test = intval($_REQUEST['idtest']);
$id_test = 1; // le temps du test

// Récupération données du test
$sql = "Select t.libelle, b.id_binome, b.id_tester, b.id_verif, date_format(t.date_test, '%d/%m/%Y') as date_test from tests t, binomes b, test_binome tb where t.id_test = $id_test and t.id_test = tb.id_test and tb.id_binome = b.id_binome order by tb.id_binome";
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0) {
	// Affichage libellé du test
	$row = mysql_fetch_assoc($result);
	echo "<h1>".$row['libelle']." (".$row['date_test'].")</h1>\n";
	$id_binome = $row['id_binome'];
	$id_tester = $row['id_tester'];
	$id_verif = $row['id_verif'];
	// Affichage testeur et vérificateur
	$sql = "Select nom from utilisateurs where id_util = $id_tester";
	$result = mysql_query($sql);
	$nom_tester = mysql_result($result, 0);
	$sql = "Select nom from utilisateurs where id_util = $id_verif";
	$result = mysql_query($sql);
	$nom_verif = mysql_result($result, 0);
	echo '<p>Testeur : <strong>'.$nom_tester.'</strong> / Vérificateur : <strong>'.$nom_verif."</strong></p>\n";

	// Récupération des thèmes du test
	$sql = "Select t.id_theme, t.intitule from jeux_tests j, themes t where id_test = $id_test and j.id_theme = t.id_theme order by t.id_theme";
	$result = mysql_query($sql) or die(mysql_error());
	// pour chaque thème affichage des résultats
	echo "<table>\n";
	echo "\t<tr>\n";
	echo "\t\t<th>Thème</th>\n";
	echo "\t\t<th colspan=\"2\">Testeur</th>\n";
	echo "\t\t<th colspan=\"2\">Vérificateur</th>\n";
	echo "\t\t<th>Résultat</th>\n";
	echo "\t</tr>\n";
	while($row = mysql_fetch_assoc($result)) {
		echo "\t<tr>\n";
		echo "\t\t<td>".$row['intitule']."</td>\n";
		$pts_tester = 0;
		$pts_verif = 0;
		$id_theme = $row['id_theme'];
		$sql2 = "Select a.valeur, a.point from reponses r, affirmations a where r.id_test = $id_test and r.id_theme = $id_theme and r.id_binome = $id_binome and r.id_aff = a.id_aff order by r.id_test, r.id_theme, r.id_binome, r.tester_verif";
		$result2 = mysql_query($sql2) or die(mysql_error());
		while($row2 = mysql_fetch_assoc($result2)) {
			echo "\t\t<td>".$row2['valeur']."</td>\n";
			echo "\t\t<td class=\"emphase\">".$row2['point']."</td>\n";
			if($pts_tester == 0) {
				$pts_tester = $row2['point'];
			} else {
				$pts_verif = $row2['point'];
			}
		}

		if ($pts_tester == $pts_verif){
			$restheme_ecart = "=";
		}
		elseif ($pts_tester > $pts_verif){
			$restheme_ecart = "-";
		}
		else {
			$restheme_ecart = "+";
		}
		echo "\t\t<td class=\"emphase\">".$restheme_ecart."</td>\n";
		echo "\t</tr>\n";
	}
	echo "</table>\n";
} else { // test invalide
	echo "<h1>Le test n° $id_test n'existe pas !</h1>\n";
}
?>
</body>
</html>

Modifié par Heyoan (21 May 2009 - 18:44)
Salut ...

Je viens d'essayer ce que tu m'as fait là et ça me plait bien ....

Je pense que je vais partir sur un truc comme ça ....

Par contre je vais le décortiquer un peu pour voir si je peux l'adapter à mes tables sans y toucher ...

Sinon je ferai comme tu as fait ... ça me paraît très bien ...

En tout cas merci encore je te tiendrai au courant pour dire ou j'en suis ....

Et désolé pour la réponse tardive ...

---------------------EDIT---------------------

Au fait, quand tu Select t.libelle, b.id_binome, pourquoi écris-tu le t. ou le b. avant ???

Bye
Modifié par Jackisback (25 May 2009 - 13:58)
Jackisback a écrit :
Au fait, quand tu Select t.libelle, b.id_binome, pourquoi écris-tu le t. ou le b. avant ???
Parce que les tables tests et binomes contiennent toutes les 2 un champ id_binome et qu'il faut préciser dans la requête auquel tu te réfères.
Pour être plus explicite cela aurait pu donner :
SELECT t.libelle, b.id_binome, b.id_tester, b.id_verif, date_format(t.date_test, '%d/%m/%Y') as date_test 
FROM tests [b]AS t[/b], binomes [b]AS b[/b], test_binome [b]AS tb[/b] 
where t.id_test = $id_test and t.id_test = tb.id_test and tb.id_binome = b.id_binome order by tb.id_binome
Euh .... ouais .... c'est pour le moment encore un peu flou .....

Tu n'aurais pas un autre exemple de base ... car là c'est pas clair ...

Peut etre la faute du soleil ....
OK :

soient les tables
familles_produits
id_famille
libelle
...

produits
id_produit
id_famille
description
...

Ces deux tables ont un champ commun id_famille ce qui est normal puisque dans l'exemple un produit est rattaché à une famille. A noter qu'il "suffirait" de nommer différemment le champ de la table produits pour ne pas se poser de questions (id_fam_prod). Cela favoriserait les requêtes mais ce n'est pas forcément une bonne idée puisque le fait d'avoir un nom commun permet de retrouver facilement les liens entre les tables.

Quoi qu'il en soit il faut bien savoir dans une requête de quel champ on parle et il faut donc préfixer les champs.

Par défaut on peut utiliser le nom de la table :
SELECT id_produit, description FROM produits, familles_produits 
WHERE produits.id_famille = familles_produits.id_famille AND familles_produits.id_famille = 1
Pour simplifier on peut donner un ALIAS aux tables :
SELECT id_produit, description FROM produits AS p, familles_produits AS f 
WHERE p.id_famille = f.id_famille AND f.id_famille = 1
Et on peut supprimer le AS qui est facultatif :
SELECT id_produit, description FROM produits p, familles_produits f 
WHERE p.id_famille = f.id_famille AND f.id_famille = 1

Remarque : il n'est pas nécessaire de préfixer les champs dont le nom ne génère pas d'ambigüité.
Modifié par Heyoan (25 May 2009 - 17:13)
Ok je vais travailler ça de façon à bien l'assimiler ...

Merci pour toutes tes explications c'est gentil d'avoir pris le temps de m'expliquer correctement ...

@ +
Hello,

J'ai refait les requetes SANS TOUCHER A MES TABLES et voici ce que j'ai :

//Requete GLOBALE pour l'affichage du résultat du TESTEUR + DATE + MEMBRE
$requeteglobt = "SELECT rt.idtest, rt.idutil, rt.idaff, at.idaff, at.idtheme, at.valeur, at.point, tht.idtheme, tht.intitule, ut.nom, FROM_UNIXTIME(t.date) as date_test, m.nom, m.prenom
					FROM reponses rt, affirmations at, themes tht, utilisateurs ut, tests t, membre m
					WHERE rt.idtest=".$idtest." AND rt.idutil=".$iddutesteur." AND rt.idaff = at.idaff AND tht.idtheme = at.idtheme AND rt.idutil = ut.idutil";
$resultglobt = mysql_query($requeteglobt);
$assocglobt = mysql_fetch_assoc($resultglobt);
//print_r($assocglobt);

//Requete GLOBALE pour l'affichage du résultat du VERIFICATEUR
$requeteglobv = "SELECT rv.idtest, rv.idutil, rv.idaff, av.idaff, av.idtheme, av.valeur, av.point, thv.idtheme, thv.intitule, uv.nom
					FROM reponses rv, affirmations av, themes thv, utilisateurs uv
					WHERE rv.idtest=".$idtest." AND rv.idutil=".$idduverificateur." AND rv.idaff = av.idaff AND rv.idutil = uv.idutil AND thv.idtheme = av.idtheme";
$resultglobv = mysql_query($requeteglobv);
$assocglobv = mysql_fetch_assoc($resultglobv);


Aussi voilà ma question:

Est-il possible de "fusionner" les deux mysql_fetch_assoc de façon à ne faire qu'une boucle WHILE et donc d'afficher enfin ce que je voudrais ... Car quand je fais une boucle WHILE pour le premier puis à l'intérieur, juste après, une deuxieme boucle il ne m'affiche pas les resultats que je voudrais ...

D'avance merci !
Jackisback a écrit :
J'ai refait les requetes SANS TOUCHER A MES TABLES
Ben c'est toi qui vois mais, je me répète, selon moi le problème de base vient de ce que tes tables ne sont pas normalisées... Smiley murf
C'est à dire normalisées ???

Tu penses que je peux garder les miennes en les adaptants à ta facon ???
Modifié par Jackisback (26 May 2009 - 16:37)
Jackisback a écrit :
C'est à dire normalisées ???
Lire Forme normale.

Jackisback a écrit :
Tu penses que je peux garder les miennes en les adaptants à ta facon ???
Ben je vois pas trop l'intérêt puisque j'ai déjà fait le boulot ! Smiley langue

Au-delà du problème de normalisation la structure actuelle de tes tables ne permet pas certains traitements dont tu risques fort d'avoir besoin dans le futur. Par exemple :
* il n'existe aucun lien entre un test et les thèmes utilisés dans ce test (table jeux_tests). Du coup si un autre binôme doit faire le même test (avec les mêmes questions) comment fais-tu ? D'ailleurs dès que tu auras 2 tests comment vas-tu savoir quelles questions afficher ? Je suppose que pour l'instant tu listes tous les thèmes ?
* il n'existe pas non plus de lien entre les réponses et le thème.
* en structurant comme je l'ai fait il est facile de retrouver toutes les infos par exemple en partant d'un test ou d'un binôme (table test_binome) et de redescendre hiérarchiquement pour afficher toutes les infos : tel binôme a effectué tel test... qui est composé de tels thèmes... dont les affirmations sont... et dont les réponses sont...
* il n'existe aucun lien entre un test et les thèmes utilisés dans ce test.

Bah en fait, non il n'y en a pas je passe par d'autre tables pour y arriver ... donc risque d'être chiant ...

* il n'existe pas non plus de lien entre les réponses et le thème.

Bah en fait, dans la table REPONSES, il y a les IDAFF que je retrouve dans la table AFFIRMATIONS et dans cette dernière table, il y a un champ IDTHEME que je retrouve dans la table IDTHEME.

* en structurant comme je l'ai fait il est facile de retrouver toutes les infos.

Bah en fait, je pourrais y arriver aussi mais je vais galérer plus que toi ... c'est clair et net ....

Là je suis entrain de reprendre ta structure et d'adapter la mienne car j'ai des champs en plus dont j'ai besoin ...

En tout cas c'est chaud ...

Et en tout cas merci pour ton aide ...
Petite question, dans la table TESTS, tu as id_test, libelle, date_test.

Ne pourrais-je pas ajouter un champ id_theme qui est dans JEUX_TESTS plutot que de faire une autre table ??

C'est juste une question ... si c'est mieux comme ça je créer une nouvelle table ...
Jackisback a écrit :
Ne pourrais-je pas ajouter un champ id_theme qui est dans JEUX_TESTS plutot que de faire une autre table ??
Eh bien comme je l'avais compris (en suivant ta structure) un test correspond à n thèmes et pas à un seul donc il faut une nouvelle table. Le gros avantage de normaliser est que les requêtes deviennent ensuite très simples. Par exemple pour trouver tous les thèmes d'un test il suffit de faire
'Select id_theme From jeu_tests where id_test = 1'
D'ailleurs un indice que les tables ne sont pas normalisées est quand les requêtes deviennent hyper compliquées... ou que l'on n'arrive tout simplement pas à les faire.
Ouais mais dans ce cas là ...(je débute) ... c'est pas évident de savoir quelle est la bonne normalisation ... Mais je pense qu'avec le lien que tu m'as passé ça devrait étre beaucoup plus simple ... enfin je l'espère ...

J'ai presque fini d'adapter mes tables à ta sauce ....