Menu

Tableau des résultats. [Résolu]

Max747 29 Messages postés vendredi 11 juillet 2014Date d'inscription 23 mars 2018 Dernière intervention - 8 sept. 2017 à 15:03 - Dernière réponse : Max747 29 Messages postés vendredi 11 juillet 2014Date d'inscription 23 mars 2018 Dernière intervention
- 11 sept. 2017 à 18:23
Bonjour,

Dans le but d'une amélioration de mon site questionnaire en Q-C-M, je souhaiterai réaliser ce tableau en PHP à partir de 3 tables mysql préexistantes:
Afficher la suite 

Votre réponse

9 réponses

jordane45 21182 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 26 mai 2018 Dernière intervention - 8 sept. 2017 à 20:02
0
Merci
Bonjour,

1 - Tu as oublié l'image
2 - Montre nous ce que tu as essayé de faire
3 - Donne nous la structure de tes tables
4 - Précise nous sur quoi tu bloques exactement. (la requête ? Faire un tableau ? autre chose ?? )
Commenter la réponse de jordane45
Max747 29 Messages postés vendredi 11 juillet 2014Date d'inscription 23 mars 2018 Dernière intervention - 9 sept. 2017 à 17:17
0
Merci
https://img-19.ccm2.net/QWgy80wHkW0QlpHZLQ1wTuZzK_Q=/87fd58f042d642baa16e8c57cbfb2696/ccm-ugc/tableau.jpg
Se trouve en jaune la ligne des numéros de questions.Et en dessous les points représentés dans les champs en verts dont chaque lignes ont une correspondance avec un pseudo.
La réalisation de ce jeu mes en oeuvre 3 tables nommées:
inscriptions
avec les colonnes suivantes : id, usernames, password
coeffi
avec les colonnes suivantes : id, dossier, date, rep_bonne, adresse_image
reponses
avec les colonnes suivantes : id, inscription_id, rep_bon, nbr_questions, titre, date_reponse, point_total, titre_id

Voici une première approche de la partie utile de ma question:
Pour la ligne en jaune du tableau et qui fonctionne:
$requet = $connection->prepare("
SELECT id, coef
FROM coeffi
");
$requet->execute();
for($j=1;$j<=1;$j++)
{
echo "<table style=\"background-color:yellow;font-size:14px;display:inline;\"><tr><td>Question n°        </td></tr>";
echo "<border=\"2\" style=\"background-color:yellow;font-size:14px;display:inline;\"><tr><td>Niveau</td></tr>";
echo "</table>";
}

while ($row = $requet->fetch(PDO::FETCH_ASSOC))
{
$x = $row['id'];
echo "<table style=\"background-color:yellow;font-size:14px;display:inline;\"> <tr><td> $x </td></tr>";
echo "</table>";
}

Pour la partie se trouvant en dessous de la ligne jaune (zone blanche et verte)et qui ne fonctionne pas:
$requetee = $connection->prepare("
SELECT username, inscription_id, titre_id, point_total
FROM reponses r
INNER JOIN inscriptions i ON i.id = r.inscription_id
INNER JOIN coeffi c ON c.id = r.titre_id


");
$requetee->execute();
while ($row = $requetee->fetch(PDO::FETCH_ASSOC))
{
$nom=$row['username'];
$points_to=$row['point_total'];
echo "<table style=\"background-color:yellow;font-size:14px;display:inline;\"> <tr><td>$nom</td><td>$points_to</td></tr>";
echo "</table>";
}
echo "<br/>";

Ainsi pourriez vous m'aider à réaliser ce tableau tout au moins en ce qui concerne la partie PHP.
Pour le CSS3 je peux m'en charger.

Merci d'avance.
Commenter la réponse de Max747
jordane45 21182 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 26 mai 2018 Dernière intervention - Modifié par jordane45 le 10/09/2017 à 11:39
0
Merci
Déjà.. pas besoin, je pense, de faire deux requêtes.

Il suffit d'utiliser ta requête principale et de faire un fetchall pour tout mettre dans un array... puis de retravailler l'array pour qu'il puisse facilement afficher ce que tu souhaites.
Donc, commence par faire ceci et nous collerle résultat sur le forum
$sql = "SELECT username, 
               inscription_id, 
               titre_id, 
               point_total
    FROM reponses r
    INNER JOIN inscriptions i ON i.id = r.inscription_id 
    INNER JOIN coeffi c ON c.id = r.titre_id ";
       
//-------------------------------------------------//
// Toujours mettre ses requêtes dans un bloc 
// Try/catch pour trapper les éventuelles erreurs !
//-------------------------------------------------//
try{
  $requetee = $connection->prepare($sql);
 $requetee->execute();
  //on stocke le résultat dans un array
  $result = $requetee->fetchAll();
}catch(Exception $e){
 echo " Erreur ! " .$e->getMessage();
}

//-------------------------------------------------//
// le temps du dev, on affiche le contenu de l'array
//-------------------------------------------------//
echo "<pre> Resultat de la requete :<br>";
print_r($result);
echo "</pre>";

//-------------------------------------------------//
// Ensuite, ici nous retravaillerons l'array
//-------------------------------------------------//
//par exemple :
$array_final = array();
foreach($result as $row){
  $user = $row['username'];
  $inscription_id = $row['inscription_id'];
  $titre_id = $row['titre_id'];
  $point_total = $row['point_total'];
  $array_final[$user][$inscription_id] = $point_total; 
}

//puis on l'utilisera pour afficher ton tableau :
// un truc du genre
foreach($array_final as $nom => $userinfos){
 echo "<tr><td>$nom</td>";
  foreach($userinfos as $inscription_id => $points_to){
   echo "<td>$points_to</td>";
  }
 echo "</tr>";
}


NB : Pense aussi, si ce n'est pas déjà fait, à activer la gestion des erreurs PDO :
http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

Cordialement, 
Jordane                                                                 
Commenter la réponse de jordane45
Max747 29 Messages postés vendredi 11 juillet 2014Date d'inscription 23 mars 2018 Dernière intervention - 9 sept. 2017 à 19:26
0
Merci
Merci pour tous vos conseils.Car je ne les connaissais pas tous.
Ils me seront encore bien utiles maintenant que je sais les mettre en oeuvre.

Pour les gestions d'erreurs je n'avais pas inclus la ligne:
$connection->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

désormais c'est fait.
Pour php init:
J'ai laissé ces lignes en l'état:

; error_reporting
; Default Value: E_ALL & ~E_NOTICE
; Development Value: E_ALL | E_STRICT
; Production Value: E_ALL & ~E_DEPRECATED

Voici la page complète mise en fonctionnement désormais:
<?php
include 'connexion.php';
$sql = "SELECT username,
inscription_id,
titre_id,
point_total
FROM reponses r
INNER JOIN inscriptions i ON i.id = r.inscription_id
INNER JOIN coeffi c ON c.id = r.titre_id ";

//-------------------------------------------------//
// Toujours mettre ses requêtes dans un bloc
// Try/catch pour trapper les éventuelles erreurs !
//-------------------------------------------------//
try{
$requetee = $connection->prepare($sql);
$requetee->execute();
//on stocke le résultat dans un array
$result = $requetee->fetchAll();
}catch(Exception $e){
echo " Erreur ! " .$e->getMessage();
}

//-------------------------------------------------//
// le temps du dev, on affiche le contenu de l'array
//-------------------------------------------------//
echo "<pre> Resultat de la requete :<br>";
print_r($result);
echo "</pre>";

//-------------------------------------------------//
// Ensuite, ici nous retravaillerons l'array
//-------------------------------------------------//
//par exemple :
$array_final = array();
foreach($result as $row){
$user = $row['username'];
$inscription_id = $row['inscription_id'];
$titre_id = $row['titre_id'];
$point_total = $row['point_total'];
$array_final[$user][$inscription_id] = $point_total;
}

//puis on l'utilisera pour afficher ton tableau :
// un truc du genre
foreach($array_final as $nom => $userinfos){
echo "<tr><td>$nom</td>";
foreach($userinfos as $inscription_id => $points_to){
echo "<td>$points_to</td>";
}
echo "</tr>";

?>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="style.css" type="text/css" charset="utf-8"/>
<title>Total</title>
</head>
<body>

</body>
</html>


Et voici l'erreur retournée:
https://img-19.ccm2.net/TWdfKpKYmbB-QH6sYcOF-POG9hk=/64bf5632fb7a4c5e96f62c3b6ebb7ad8/ccm-ugc/2017-09-09_19h13_41.jpg

Erreur de syntax ligne 63 qui est la dernière en html.
Mais cela ne m'avance pas hélas.
Je pense que vous pourrez localiser et sans doute trouver l'erreur.
jordane45 21182 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 26 mai 2018 Dernière intervention - 9 sept. 2017 à 22:20
Il faut placer la génération de tes données dans ton html ....
(donc déplacer ce code :
//puis on l'utilisera pour afficher ton tableau :
// un truc du genre
foreach($array_final as $nom => $userinfos){
 echo "<tr><td>$nom</td>";
  foreach($userinfos as $inscription_id => $points_to){
   echo "<td>$points_to</td>";
  }
 echo "</tr>";

dans le BODY et non le mettre AVANT ta balise HTML......
Il faut aussi mettre les balises TABLE que je n'ai pas réécrit ... ainsi que ta premère boucle qui génère l'en-tête de ton tableau
jordane45 21182 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 26 mai 2018 Dernière intervention > jordane45 21182 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 26 mai 2018 Dernière intervention - 9 sept. 2017 à 22:21
Commenter la réponse de Max747
Max747 29 Messages postés vendredi 11 juillet 2014Date d'inscription 23 mars 2018 Dernière intervention - 10 sept. 2017 à 10:20
0
Merci
Toujours une erreur comme ci dessous:
https://img-19.ccm2.net/zaV_xP5NeXD0PHxzfrHVUdgFmVM=/d29a341e2ddc4a438189bacbe5a6381c/ccm-ugc/2017-09-10_10h09_17.jpg
Mais sans doute est ce le fait de n'avoir pas bien réécrit les codes ci dessous:
<?php
include 'connexion.php';
	$sql = "SELECT username, 
               inscription_id, 
               titre_id, 
               point_total
			 FROM reponses r
			 INNER JOIN inscriptions i ON i.id = r.inscription_id 
			 INNER JOIN coeffi c ON c.id = r.titre_id ";
       
//-------------------------------------------------//
// Toujours mettre ses requêtes dans un bloc 
// Try/catch pour trapper les éventuelles erreurs !
//-------------------------------------------------//
try{
  $requetee = $connection->prepare($sql);
	$requetee->execute();
  //on stocke le résultat dans un array
  $result = $requetee->fetchAll();
}catch(Exception $e){
 echo " Erreur ! " .$e->getMessage();
}

//-------------------------------------------------//
// le temps du dev, on affiche le contenu de l'array
//-------------------------------------------------//
echo "<pre> Resultat de la requete :<br>";
print_r($result);
echo "</pre>";

//-------------------------------------------------//
// Ensuite, ici nous retravaillerons l'array
//-------------------------------------------------//
//par exemple :
$array_final = array();
foreach($result as $row){
  $user = $row['username'];
  $inscription_id = $row['inscription_id'];
  $titre_id = $row['titre_id'];
  $point_total = $row['point_total'];
  $array_final[$user][$inscription_id] = $point_total; 
}
?>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="style.css" type="text/css" charset="utf-8"/>
<title>Total</title>
</head>
<body>
 <?php
foreach($array_final as $nom => $userinfos){
 echo "<table style=\"background-color:yellow;font-size:14px;display:inline;\"><tr><td>$nom</td>";
  foreach($userinfos as $inscription_id => $points_to){
   echo "<td>$points_to</td></table>";
  }
 echo "</tr>";
 ?>
 </body>
</html>


A ce stade de l'erreur je n'ai pas cherché à placer la premère boucle qui génère l'en-tête de ton tableau.

C'est mieux en effet avec la coloration syntaxique.Merci.
jordane45 21182 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 26 mai 2018 Dernière intervention - 10 sept. 2017 à 11:40
Il manque une accolade fermante apres le tr.
Mais pour l'instant. .. vire ce bout de code... ce n'était qu'un exemple
Commenter la réponse de Max747
Max747 29 Messages postés vendredi 11 juillet 2014Date d'inscription 23 mars 2018 Dernière intervention - 11 sept. 2017 à 18:23
0
Merci
Bonsoir.

Ok.Ca fonctionne.
Merci pour votre collaboration.

Sujet résolu.
Commenter la réponse de Max747