IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Tableau de résultats. [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Electronicien
    Inscrit en
    Novembre 2013
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Electronicien
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 99
    Points : 51
    Points
    51
    Par défaut Tableau de résultats.
    Bonjour,

    Ayant l'intention d'améliorer mon site portant sur des questions du genre Q-C-M, je cherche à réaliser un tableau des résultats des participants à celui ci.
    Voici en image ce projet sous forme de tableau:

    Nom : tableau.jpg
Affichages : 252
Taille : 20,2 Ko

    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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $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°&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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>&nbsp;$x&nbsp;</td></tr>";			 
    		 echo "</table>";
    		 }
    Pour la partie se trouvant en dessous de la ligne jaune (zone blanche et verte)et qui ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $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.
    L' ignorance, toujours mène à la servitude.

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 232
    Points : 15 525
    Points
    15 525
    Par défaut
    Citation Envoyé par Max747 Voir le message
    et qui ne fonctionne pas
    c'est à dire ... ?

    pour commencer, est ce que la requête SQL vous retourne les informations dont vous avez besoin ?

  3. #3
    Membre du Club
    Homme Profil pro
    Electronicien
    Inscrit en
    Novembre 2013
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Electronicien
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 99
    Points : 51
    Points
    51
    Par défaut
    Voici en image ce que me présente la page concernant le problème qui me préoccupe et que je vous soumets:
    Nom : 2017-09-09_11h45_14.jpg
Affichages : 347
Taille : 11,2 Ko
    Cela fonctionne à peu près.Sauf que Pierre ne devrait être présenté qu'une fois ainsi que Jacques et Paul.
    Et les pseudos les uns en dessous des autres.
    Si les pseudo sont identiques au tableau présenté ci dessus, les points de cette partie en vert sont fantaisistes.
    C'est ainsi qu'il ne faut pas chercher de correspondance.
    Comme ceci:
    Jean 1
    PIerre 1 2 2
    Paul 1 2
    Jacques 1 2 2

    A part cela pas de messages d'erreur n'apparaît.
    L' ignorance, toujours mène à la servitude.

  4. #4
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 430
    Points
    430
    Par défaut
    Je ne connais pas de PDO, mais ton code fonctionne exactement comme écris.

    Il faut que tu détecte un nouveau nom et créer une ligne TR et le premier TD avec le nom (fermer le TR et en créer un TR et TD pour un nouveau nom)
    Ensuite faire une boucle avec le nombre de réponses possible : chaque fois un TD avec la réponse.

    Il faudra aussi fermer toutes les balises après ton script.

  5. #5
    Membre du Club
    Homme Profil pro
    Electronicien
    Inscrit en
    Novembre 2013
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Electronicien
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 99
    Points : 51
    Points
    51
    Par défaut
    Oui mais si c'est aussi simple, pourrais tu m'indiquer le code?
    L' ignorance, toujours mène à la servitude.

  6. #6
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 430
    Points
    430
    Par défaut
    Citation Envoyé par Max747 Voir le message
    Oui mais si c'est aussi simple, pourrais tu m'indiquer le code?
    Voici un code peu élégant avec mes connaissances qui devrait fonctionner, je suis certain que les spécialistes pourront faire beaucoup mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    $nom_test='non';
    $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
    			ORDER BY username
    		 ");
    		 $requetee->execute();
    			 while ($row = $requetee->fetch(PDO::FETCH_ASSOC))
    				{	
    					$nom=$row['username'];
    					$points_to=$row['point_total'];	
    					$nbr ++;
    					$nbr_resultats ++;
     
    					if ($nbr==1) { // ----- Création dutableau et affichage du 1er nom
    						print "<table><tr><td style=\"background-color:#fff;font-size:14px;display:inline;\">$nom</td>";
    						$nom_test=$nom;
    					}
    					if ($nbr>1 && $nom_test!=$nom) { // ----- Nouvel utilisateur -> nouvelle ligne
    						if ($nbr_resultats<$z) { // ----- Ajout des TD pour les résultats manquants, $z=nbr total de question, issus de ton script précédent à ajouter
    							$reste=$z-$nbr_resultats;
    							for ($i=1; $i<=$reste; $i ++) {
    								print "<td style=\"background-color:green;font-size:14px;display:inline;\">&nbsp;</td>";
    							}
    						}
    						$nbr_resultats=0;
    						print "</tr><tr><td style=\"background-color:#fff;font-size:14px;display:inline;\">$nom</td>";
    						$nom_test=$nom;
    					}
    					print "<td style=\"background-color:green;font-size:14px;display:inline;\">$points_to</td>";
     
    				}
     
    				if ($nbr>=1) { print "</tr></table>"; } // ----- Fermeture du tableau si au moins 1 résultat
    			echo "<br/>";

  7. #7
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    Allez je me lance :

    Tu dois faire très attention dans le nommage de ce que tu manipules.
    Un moteur de base de données comme MySQL te permet de manipuler tout plein d'objets : table, vue, procédure stockée, fonction stockée... et il est très utile de préfixer les noms afin de te faciliter leur identification (t_ pour table, v_ pour vue...). On se doute bien qu'une table va contenir plusieurs enregistrements, il n'est donc pas utile d'utiliser le pluriel.
    Enfin, tu allais déborder de ton post-it que t'as sauvagement raccourci le nom en coeffi ?

    Après la manière dont les tables sont organisées me parait un peu obscure...
    C'est pourquoi faire ta table coeffi ? Juste stocker une suite de nombres incrémentée unitairement ?
    Evite le mélange français-anglais :
    inscriptions
    avec les colonnes suivantes : id, usernames, password
    soit tu le fais en français, soit en anglais mais par pitié, pas de mélange, c'est pas bon pour la santé.
    Enfin, cette partie je ne l'ai pas comprise :
    reponses
    avec les colonnes suivantes : id, inscription_id, rep_bon, nbr_questions, titre, date_reponse, point_total, titre_id
    D'après la sémantique (les mots ont un sens, il ne faut pas l'oublier), tu veux suivre dans cette tables les réponses aux questionnaires.
    Pour une réponse à une question, que viennent faire les colonnes : nbr_questions, rep_bon (c'est la bonne réponse ou la réponse du candidat ?) et point_total qui doit être le résultat d'un calcul mais lequel (j'ai ma p'tite idée quand même).

    Pour le code HTML (le rendu), tu dois OBLIGATOIREMENT sortir le formatage sous peine d'avoir un code source illisible (bonne chance pour le débogage).

    Enfin la structure d'un tableau en HTML est :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <table>
        <thead>
            <tr>
                <th>En-tête colonne 1</th>
                <th>En-tête colonne 2</th>            
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>Valeur colonne 1</td>
                <td>Valeur colonne 2</td>
            </tr>
        </tbody>
        <tfoot>
            <tr>
                <td>Pied de colonne 1</td>
                <td>Pied de colonne 2</td>
            </tr>
        </tfoot>
    </table>

    Bon courage jeune padawan

  8. #8
    Membre du Club
    Homme Profil pro
    Electronicien
    Inscrit en
    Novembre 2013
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Electronicien
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 99
    Points : 51
    Points
    51
    Par défaut
    Merci.
    Je vais voir pour modifier mon travail en rapport avec vos observations puis je reviendrai vers vous.
    Bon dimanche
    L' ignorance, toujours mène à la servitude.

  9. #9
    Membre du Club
    Homme Profil pro
    Electronicien
    Inscrit en
    Novembre 2013
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Electronicien
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 99
    Points : 51
    Points
    51
    Par défaut
    Je viens d'essayer quand même en vitesse les codes de ddaweb.
    Tels que je les utilise voici le message d'erreur retourné:
    Nom : 2017-09-10_10h43_56.jpg
Affichages : 354
Taille : 123,7 Ko

    Lorsque je remplace les lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $nbr ++;
    $nbr_resultats ++;
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $nbr = 1;
    $nbr_resultats = 1;
    Cela présente ce résultat:
    Nom : 2017-09-10_10h50_18.jpg
Affichages : 271
Taille : 6,5 Ko
    Les pseudos sont mis les uns en dessous des autres.Ok.
    Mais de manière répétitive.De surcroit il faudrait trouver les codes permettant d'aligner les chiffres en lignes après chaque pseudo.

    A mon avis, si il n'y avait pas le message d'erreur concernant les codes $nbr++; et $nbr_resultats++; cela fonctionnerait.

    En se référent sur le modèle représenté par l'image lors de mon premier message ci dessus.
    Merci pour votre contribution à ma recherche.
    L' ignorance, toujours mène à la servitude.

  10. #10
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 430
    Points
    430
    Par défaut
    Concernant $z tu doit la définir dans le script avec tes entêtes : c'est le nombre total de questions ... il est possible que $x est ce nombre total, si oui, remplacer z par x.

    Je crois comprendre que tu travaille en local et que les warning sont actifs dans le php.ini !
    Pour résoudre ce problème tu peux ajouter ceci au code que j'ai posté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $nom_test='non';
    $nbr=0; // ---- AJOUTER
    $nbr_resultats=0; // ----- AJOUTER
    $requetee = $connection->prepare("
    ...
    A la vue du résultat, tu devrait aussi mettre des WIDTH aux TD, voir même des BORDER afin d'obtenir un beau tableau ... en CSS c'est possible également.
    Il doit être conforme avec ton entête.

  11. #11
    Membre du Club
    Homme Profil pro
    Electronicien
    Inscrit en
    Novembre 2013
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Electronicien
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 99
    Points : 51
    Points
    51
    Par défaut
    Oui bien sur, j'ai d'ailleurs hâte de placer tout cela dans un beau tableau.
    Mais pour l'instant les résultats ne sont pas satisfaisant pour que je puisse m'en occuper.
    Certes bien qu'il y ait une amélioration très notable comme vous pourrez le voir ci dessous:
    Nom : 2017-09-11_11h27_44.jpg
Affichages : 297
Taille : 12,7 Ko
    il n'en demeure pas moins que les cellules du tableau correspondantes aux réponses qui ne sont pas faites ne sont pas visible.Comme par exemple: Pierre auquel j'ai effacé dans la table réponses la ligne correspondant à la question N°2, voit sa réponse à la question N°3 placée dans la cellule correspondante à la question N°2.En un mot il n'y a aucune cellule vide.
    J'ai complété ce tableau avec les codes que voici pour ajouter au dessus de celui ci les N° de questions correspondantes à la première ligne et le coefficient pour la deuxième ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
    include 'connexion.php';
    $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°&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td></tr>";
    			echo "<border=\"2\" style=\"background-color:yellow;font-size:14px;display:inline;\"><tr><td>Coefficient</td></tr>";
    			echo "</table>";
    		 }
     
    		 while ($row = $requet->fetch(PDO::FETCH_ASSOC))
    		 {
    			$x = $row['id'];
    			$y = $row['coef'];
    		 echo "<table style=\"background-color:yellow;font-size:14px;display:inline;\"> <tr><td>&nbsp;$x&nbsp;</td></tr>";	
    		 echo "<tr><td>&nbsp;$y&nbsp;</td></tr></table>";	
    		 }
    $requet->closeCursor(); // Termine le traitement de la requête
    Pour le problème des cellules vides il me semble qu'il faudrait orienter la recherche à partir de la ligne 44. $z=$row['titre_id'];

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    <?php
    include 'connexion.php';
    $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°&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td></tr>";
    			echo "<border=\"2\" style=\"background-color:yellow;font-size:14px;display:inline;\"><tr><td>Coefficient</td></tr>";
    			echo "</table>";
    		 }
     
    		 while ($row = $requet->fetch(PDO::FETCH_ASSOC))
    		 {
    			$x = $row['id'];
    			$y = $row['coef'];
    		 echo "<table style=\"background-color:yellow;font-size:14px;display:inline;\"> <tr><td>&nbsp;$x&nbsp;</td></tr>";	
    		 echo "<tr><td>&nbsp;$y&nbsp;</td></tr></table>";	
    		 }
    $requet->closeCursor(); // Termine le traitement de la requête		 
     
    $nom_test='non';
    $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
    			ORDER BY username
    		 ");
    		 //r.titre_id = N° de la question en rapport avec la colonne id de la table coeffi.
    		 $requetee->execute();
    			 while ($row = $requetee->fetch(PDO::FETCH_ASSOC))
    				{	
    					$nom=$row['username']; // username de la table inscription.
    					$points_to=$row['point_total'];	// point(s) de la question.
    					$nbr =$row['titre_id'];// $nbr = titre_id = numéro de la question.
    					$nbr_resultats =$row['titre_id']; // $nbr_resultats = titre_id = numéro de la question.
    					if ($nbr==1) { // ----- Création du tableau et affichage du 1er nom
    						print "<table><tr><td style=\"background-color:#fff;font-size:14px;display:inline;\">$nom</td>";
    						$nom_test=$nom; // username de la table inscription.
    					}
    					$z=$row['titre_id']; // $z = numéro de la question.
    					if ($nbr>1 && $nom_test!=$nom) { // ----- Nouvel utilisateur -> nouvelle ligne
    					echo "Bonjour";
    					exit ();
    						if ($nbr_resultats<$z) { // ----- Ajout des TD pour les résultats manquants, $z=nbr total de question, issus de ton script précédent à ajouter
    							$reste=$z-$nbr_resultats;
    							for ($i=1; $i<=$reste; $i ++) {
    								print "<td style=\"background-color:green;font-size:14px;display:inline;\">&nbsp;</td>";
    							}
    						}
    						$nbr_resultats=0;
    						print "</tr><tr><td style=\"background-color:#fff;font-size:14px;display:inline;\">$nom</td>";
    						$nom_test=$nom;
    					}
    					print "<td style=\"background-color:green;font-size:14px;display:inline;\">$points_to</td>";
     
    				}
     
    				if ($nbr>=1) { print "</tr></table>"; } // ----- Fermeture du tableau si au moins 1 résultat
    			echo "<br/>";		
    ?>
    <!DOCTYPE html>
    <html> 
    <head>
    <title>Résultats</title>
    <meta charset="utf-8" /><!--Pour obtenir les bons caractères-->
     <body>
     
    </body>
    Merci de bien vouloir continuer à m'aider comme vous l'avez fait efficacement jusqu' à présent.
    Je compte sur vous.
    Merci.
    L' ignorance, toujours mène à la servitude.

  12. #12
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    C'est dommage que tu ne suives pas du tout les conseils...
    Une soluce parmi d'autres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    <?php
     
    include 'connexion.php';
     
    // code html tableau
    $html_header_question = '';
    $html_header_coef     = '';
    $html_body            = '';
     
    $ids_question = [];
    // création du code html de l'en-tête
    foreach ($connection->query('SELECT id, coef FROM coeffi ORDER BY id', PDO::FETCH_ASSOC) as $v) {
        $html_header_question .= '<th>'.(int)$v['id'].'</th>';
        $html_header_coef     .= '<th>'.(int)$v['coef'].'</th>';
        $ids_question[]        = (int)$v['id'];
    }
     
    // fonction d'échappement des caractères dangereux
    $hsc = function($p) { return htmlspecialchars($p, ENT_QUOTE, 'utf8'); };
     
    // résultats du questionnaire
    $sql = <<<'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
    ORDER BY username, titre_id
    sql;
     
    $last_user_id = '';
    $answers      = [];
    // vu qu'il n'y a aucun paramèrtre, la préparation de la requête est inutile
    foreach ($connection->query($sql, PDO::FETCH_ASSOC) as $v) {
        // gestion des nouveaux noms
        if ($last_user_id !== (int)$v['inscription_id']) {
            $answers[$v['inscription_id']]             = array_fill_keys($ids_question, '');
            $answers[$v['inscription_id']]['username'] = $v['username'];        
            $last_user_id                              = $v['inscription_id'];
        }
        $answers[$last_user_id][(int)$v['titre_id']] = (int)$v['point_total'];  
    }
     
    foreach ($answers as $user_id => $v) {
        $html_body .= '<tr><td>'.$hsc(array_pop($v)).'</td>';   // username
        if ( ! empty($v)) {
            $html_body = '<td>'.implode('</td></td>', $v).'</td>';
        }
        $html_body .= '</tr>';
    }
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    <title>Résultats</title>
    <meta charset="utf-8" /><!--Pour obtenir les bons caractères-->
    </head>
    <body>
    <table>
        <thead>
            <tr><th>Question n°</th><?= $html_header_question ?></tr>
            <tr><th>Coefficient</th><?= $html_header_coef ?></tr>
        </thead>
        <tbody>
            <?= $html_body ?>
        </tbody>
    </table>
    </body>
    </html>
    Je n'ai rien testé donc pas à l'abri d'une boulette.

  13. #13
    Membre du Club
    Homme Profil pro
    Electronicien
    Inscrit en
    Novembre 2013
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Electronicien
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 99
    Points : 51
    Points
    51
    Par défaut
    Si je suis les conseils.
    L' ignorance, toujours mène à la servitude.

  14. #14
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 430
    Points
    430
    Par défaut
    rawsrc : j'aime bien ta façon de voir les choses ... nettement plus élégant que moi et il est plus que probable que je vais m'en inspirer

    Max747 : non tu n'as pas tout suivit ... pas de mise en page du tableau et tu n'as pas regardé au $z pour le nombre total de questions.
    Une question, si qu'un ne répond pas à une question au début, comment enregistres-tu cela ? (exemple : première réponse à la question 3) ... perso je créerais d'office le nombre question avec une valeur par défaut de 0 (que tu peux convertir en '&nbsp;' à la lecture, un espace quoi ... dans le cas où c'est un champs numérique dans ta BDD) -> plus besoin de la partie avec le $z vu qu'il y a une valeur pour toutes les questions !

    Edit : peut-être une valeur par défaut de -1 et 0 si mauvaise réponse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $nom=$row['username'];
    $points_to=$row['point_total'];	
    $nbr ++;
    $nbr_resultats ++;
    if ($points_to=='-1') { $points_to='&nbsp;'; } // ----- AJOUTER

  15. #15
    Membre du Club
    Homme Profil pro
    Electronicien
    Inscrit en
    Novembre 2013
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Electronicien
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 99
    Points : 51
    Points
    51
    Par défaut
    Deux copies d'écran faisant suites aux codes fournis par RAWCRS:
    La première:
    Nom : 2017-09-11_15h52_48.jpg
Affichages : 277
Taille : 161,1 Ko
    La deuxième:
    Nom : 2017-09-11_15h48_44.jpg
Affichages : 303
Taille : 52,9 Ko
    Désolé mais je n'ai pas pris le temps de chercher la cause de ces erreurs.
    L' ignorance, toujours mène à la servitude.

  16. #16
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 430
    Points
    430
    Par défaut
    Commence par retirer les WARNING et les NOTICE dans WAMP : exemple : http://forum.wampserver.com/read.php?1,5760,5761

  17. #17
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 430
    Points
    430
    Par défaut
    Sans vraiment tout comprendre je me demande si tu ne doit pas remplacer aux lignes 44 et 46 $v par $v['username'] ?

  18. #18
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Ben oui j'ai oublié un S à ENT_QUOTES
    Modifie le code ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $hsc = function($p) { return htmlspecialchars($p, ENT_QUOTES, 'utf8'); };
    Comme je te l'ai dit, aucun test juste du texte dans Notepad++

    Encore une petite modif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $answers[$v['inscription_id']]             = array_fill_keys($ids_question, '&nbsp;');
    Enfin, il faut remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ( ! empty($v)) {
            $html_body = '<td>'.implode('</td></td>', $v).'</td>';
        }
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            $html_body = '<td>'.implode('</td></td>', $v).'</td>';

  19. #19
    Membre du Club
    Homme Profil pro
    Electronicien
    Inscrit en
    Novembre 2013
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Electronicien
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 99
    Points : 51
    Points
    51
    Par défaut
    J'ai remplacé ; http://php.net/error-reporting
    error_reporting = E_ALL
    par
    ; http://php.net/error-reporting
    error_reporting = E_ALL & ~E_WARNING
    et toujours les messages d'erreur.

    Pour les lignes 44 et 46 $v par $v['username'] idem. toujours les messages d'erreur inchangés.
    L' ignorance, toujours mène à la servitude.

  20. #20
    Membre du Club
    Homme Profil pro
    Electronicien
    Inscrit en
    Novembre 2013
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Electronicien
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 99
    Points : 51
    Points
    51
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $answers[$v['inscription_id']]             = array_fill_keys($ids_question, '&nbsp;');
    Sur quel N° de ligne?
    L' ignorance, toujours mène à la servitude.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Tableau avec résultat SQL d'une BDD Access
    Par Courgette17 dans le forum JDBC
    Réponses: 4
    Dernier message: 24/04/2007, 11h24
  2. Réponses: 1
    Dernier message: 05/11/2006, 09h24
  3. Réponses: 11
    Dernier message: 31/07/2006, 16h22
  4. Réponses: 3
    Dernier message: 24/04/2006, 16h32
  5. Réponses: 9
    Dernier message: 17/02/2006, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo