Exercices PHP+PostgreSQL sur la base TeniRaq

La « pensée » du joudi 21 novemb' 2018 , 2h57m35s :
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor.
  -- Wernher von Braun
  1. Les rues accompagnées de leurs villes en ordre alphabétique, présentées en tableau (ruesvilles).
    1. <html><body>
    2. <?php
    3. // connexion à la base
    4. $db=new PDO('pgsql:host=masterid;dbname=teniraq','****', '****') ;
    5. // exécution de la requête
    6. $res = $db->query("SELECT typevoirie||' '||nomvoirie AS rue,
    7.                          vo.codepostal,
    8.                          ville
    9.                     FROM voiries vo,villes vi,typevoiries t
    10.                    WHERE vo.codepostal=vi.codepostal
    11.                      AND reftypevoirie=codetypevoirie
    12.                 ORDER BY ville") ;
    13. // récupération des données
    14. $data = $res->fetchAll() ;
    15. // début du tableau
    16. echo "<table border=\"border\">"
    17.         ."<tr>"
    18.         ."<td></td>"
    19.         ."<th>Rue</th>"
    20.         ."<th>Code Postal</th>"
    21.         ."<th>Ville</th>"
    22.         ."</tr>\n";
    23. // pour chaque ligne ...
    24. for ($l=0 ; $l<$res->rowCount() ; $l++ ) {
    25.     echo "<tr><th>".($l+1)."</th>";
    26.     // ... afficher toutes les cellules
    27.     for ($c=0 ; $c<$res->columnCount() ; $c++) {
    28.         echo "<td>".$data[$l][$c]."</td>";
    29.     }
    30.     echo "</tr>\n";
    31. }
    32. // fin du tableau
    33. echo "</table>\n";
    34. ?>
    35. </body></html>
  2. Les noms et prénoms des personnes qui habitent à Lille (habitantslille).
    1. <html><body>
    2. <?php
    3. // connexion à la base
    4. $db=new PDO('pgsql:host=masterid;dbname=teniraq','****', '****') ;
    5. // exécution de la requête
    6. $res = $db->query("SELECT nom,prenom
    7.                     FROM badges b,joueurs j,voiries,villes
    8.                    WHERE b.numbadge=j.numbadge
    9.                      AND refvoirie=codevoirie
    10.                      AND voiries.codepostal=villes.codepostal
    11.                      AND LOWER(ville)='lille'
    12.                 ORDER BY nom,prenom") ;
    13. // récupération des données
    14. $data = $res->fetchAll() ;
    15. // début de liste
    16. echo "<ul>";
    17. // pour chaque ligne ...
    18. foreach ( $data as $row ) {
    19.     // ... afficher les informations
    20.     echo "<li>".$row["nom"]." ".$row["prenom"]."</li>\n";
    21. }
    22. // fin de liste
    23. echo "</ul>\n";
    24. ?>
    25. </body></html>
  3. Les noms et prénoms des personnes qui n'ont jamais fait de réservation (pasreserves).
    1. <html><body>
    2. <?php
    3. // connexion à la base
    4. $db=new PDO('pgsql:host=masterid;dbname=teniraq','****', '****') ;
    5. // exécution de la requête
    6. $res = $db->query("SELECT nom,prenom
    7.                     FROM badges
    8.                    WHERE numbadge
    9.                            NOT IN (SELECT refreservant
    10.                                      FROM reservations)
    11.                 ORDER BY nom,prenom") ;
    12. // récupération des données
    13. $data = $res->fetchAll() ;
    14. // début de liste
    15. echo "<ul>";
    16. // pour chaque ligne ...
    17. foreach ( $data as $row ) {
    18.     // ... afficher les informations
    19.     echo "<li>".$row["nom"]." ".$row["prenom"]."</li>\n";
    20. }
    21. // fin de liste
    22. echo "</ul>\n";
    23. ?>
    24. </body></html>
  4. Le nombre de personnes par ville (personnesparvilles).
    1. <html><body>
    2. <?php
    3. // connexion à la base
    4. $db=new PDO('pgsql:host=masterid;dbname=teniraq','****', '****') ;
    5. // exécution de la requête
    6. $res = $db->query("SELECT ville,count(*) as nbre
    7.                     FROM joueurs,voiries vo,villes vi
    8.                    WHERE vo.codepostal=vi.codepostal
    9.                      AND refvoirie=codevoirie
    10.                 GROUP BY ville
    11.                 ORDER BY ville") ;
    12. // récupération des données
    13. $data = $res->fetchAll() ;
    14. // début de liste
    15. echo "<ul>";
    16. // pour chaque ligne ...
    17. foreach ( $data as $row ) {
    18.     // ... afficher les informations
    19.     echo "<li>".$row["ville"]." : ".$row["nbre"]."</li>\n";
    20. }
    21. // fin de liste
    22. echo "</ul>\n";
    23. ?>
    24. </body></html>
  5. Les noms et prénoms des 20 personnes qui sont venues le plus souvent (vingt).
    1. <html><body>
    2. <?php
    3. // connexion à la base
    4. $db=new PDO('pgsql:host=masterid;dbname=teniraq','****', '****') ;
    5. // exécution de la requête
    6. $res = $db->query("SELECT nom,prenom,COUNT(*) AS nbre
    7.                     FROM badges,acces
    8.                    WHERE numbadge=refbadge
    9.                 GROUP BY numbadge,nom,prenom
    10.                 ORDER BY COUNT(*) DESC
    11.                    LIMIT 20") ;
    12. // récupération des données
    13. $data = $res->fetchAll() ;
    14. // début de liste
    15. echo "<ol>";
    16. // pour chaque ligne ....
    17. foreach ( $data as $row ) {
    18.     // aficcher le nom, le prénom et le nombre
    19.     echo "<li>".$row["nom"]." ".$row["prenom"]." : "
    20.             .$row["nbre"]." fois</li>\n";
    21. }
    22. // fin de liste
    23. echo "</ol>\n";
    24. ?>
    25. </body></html>
  6. Une zone de saisie pour saisir un numéro de badge, on affiche le nom et le prénom de la personne correspondante. On ne préoccupe pas des erreurs (choisirunepersonne01).
    1. <html><body>
    2. <form action="choisirunepersonne01.php">
    3.     Numéro de badge :
    4.     <input name="num" />
    5.     <input type="submit" value="Afficher" />
    6. </form>
    7. <?php
    8. // si on a choisi quelqu'un
    9. if (isset($_GET["num"])) {
    10.     $num=$_GET["num"];
    11.     // connexion à la base
    12.     $db=new PDO('pgsql:host=masterid;dbname=teniraq','****', '****') ;
    13.     // ... requête pour récupérer les informations le concernant
    14.     $res = $db->query("SELECT nom,prenom
    15.                         FROM badges
    16.                        WHERE numbadge=$num") ;
    17.     // récupération des données
    18.     $data = $res->fetchAll() ;
    19.     // affichage des informations le concernant
    20.     echo $data[0]["nom"]." ".$data[0]["prenom"];
    21. }
    22. ?>
    23. </body></html>
  7. Amélioration du précédent : si le numéro de badge ne correspond à personne le programme affiche un message d'erreur (choisirunepersonne02).
    1. <html><body>
    2. <form action="choisirunepersonne02.php">
    3.     Numéro de badge :
    4.     <input name="num" />
    5.     <input type="submit" value="Afficher" />
    6. </form>
    7. <?php
    8. // si on a choisi quelqu'un
    9. if (isset($_GET["num"])) {
    10.     $num=$_GET["num"];
    11.     // connexion à la base
    12.     $db=new PDO('pgsql:host=masterid;dbname=teniraq','****', '****') ;
    13.     // ... requête pour récupérer les informations le concernant
    14.     $res = $db->query("SELECT nom,prenom
    15.                         FROM badges
    16.                        WHERE numbadge=$num") ;
    17.     // si personne n'a ce numéro
    18.     if ($res->rowCount()==0) {
    19.         // message d'erreur
    20.         echo "Personne n'a le numéro de badge $num.";
    21.     } else { // sinon (le numéro correspond bien à quelqu'un)
    22.         // récupération des données
    23.         $data = $res->fetchAll() ;
    24.         // affichage des informations le concernant
    25.         echo $data[0]["nom"]." ".$data[0]["prenom"]
    26.                 ." a le numéro de badge $num.";
    27.     }
    28. }
    29. ?>
    30. </body></html>
  8. Toujours plus : au lieu d'une zone de saisie, utiliser une liste déroulante de toutes les personnes dans la table badges, et afficher la phrase « Le mot de passe de Prénom Nom est MotDePasse » (choisirunepersonne03).
    1. <html><body>
    2. <form action="choisirunepersonne03.php">
    3. <select name="num">
    4. <?php
    5. // connexion à la base
    6. $db=new PDO('pgsql:host=masterid;dbname=teniraq','****', '****') ;
    7. // exécution de la requête
    8. $res = $db->query("SELECT numbadge,nom,prenom
    9.                     FROM badges
    10.                 ORDER BY 2,3") ;
    11. // récupération des données
    12. $data = $res->fetchAll() ;
    13. // pour chaque ligne ...
    14. foreach ( $data as $row ) {
    15.     // ... créer une entrée dans la liste SELECT
    16.     echo "\t<option value=\"".$row["numbadge"]."\">"
    17.             .$row["nom"]." ".$row["prenom"]."</option>\n";
    18. }
    19. ?>
    20. </select>
    21. <input type="submit" value="Choisir une personne" />
    22. </form>
    23. <?php
    24. // si on a choisi quelqu'un
    25. if (isset($_GET["num"])) {
    26.     $num=$_GET["num"];
    27.     // ... requête pour récupérer les informations le concernant
    28.     $res = $db->query("SELECT nom,prenom,motdepasse
    29.                         FROM badges
    30.                        WHERE numbadge=$num") ;
    31.     // récupération des données
    32.     $data = $res->fetchAll() ;
    33.     // affichage des informations le concernant
    34.     echo "Le mot de passe de <em>".$data[0]["prenom"]." ".$data[0]["nom"]
    35.             ."</em> est <em>".$data[0]["motdepasse"]."</em>";
    36. }
    37. ?>
    38. </body></html>
  9. On insiste : même programme que ci-dessus, mais la liste déroulante ré-affiche par défaut celui qui a été sélectionné (choisirunepersonne04).
    1. <html><body>
    2. <form action="choisirunepersonne04.php">
    3. <select name="num">
    4. <?php
    5. // connexion à la base
    6. $db=new PDO('pgsql:host=masterid;dbname=teniraq','****', '****') ;
    7. // exécution de la requête pour la liste SELECT
    8. $res = $db->query("SELECT numbadge,nom,prenom
    9.                     FROM badges
    10.                 ORDER BY 2,3") ;
    11. // récupération des données
    12. $data = $res->fetchAll() ;
    13. // pour chaque ligne ...
    14. foreach ( $data as $row ) {
    15.     // ... créer une entrée dans la liste SELECT
    16.     echo "\t<option value=\"".$row["numbadge"]."\"";
    17.     // si la personne sélectionnée auparavant est celle-ci,
    18.     // la marquer par défaut
    19.     if ($row["numbadge"]==$_GET["num"]) echo " selected=\"selected\"";
    20.     echo ">".$row["nom"]." ".$row["prenom"]."</option>\n";
    21. }
    22. ?>
    23. </select>
    24. <input type="submit" value="Choisir une personne" />
    25. </form>
    26. <?php
    27. // si on a choisi quelqu'un ...
    28. if (isset($_GET["num"])) {
    29.     $num=$_GET["num"];
    30.     // ... requête pour récupérer les informations le concernant
    31.     $res = $db->query("SELECT nom,prenom,motdepasse
    32.                         FROM badges
    33.                        WHERE numbadge=$num") ;
    34.     // récupération des données
    35.     $data = $res->fetchAll() ;
    36.     // affichage des informations le concernant
    37.     echo "Le mot de passe de <em>".$data[0]["prenom"]." ".$data[0]["nom"]
    38.         ."</em> est <em>".$data[0]["motdepasse"]."</em>.";
    39. }
    40. ?>
    41. </body></html>
  10. Sélectionner un joueur dans une liste déroulante, puis sélectionner dans une liste déroulante la date d'un des matchs qu'il a gagnés, puis afficher tous les matchs du pedant corresspndant. Les listes déroulantes devront ré-afficher par défaut ce qui a été sélectionné (lesautresmatchs).
    1. <html><body>
    2. <form action="lesautresmatchs.php">
    3. <select name="num">
    4. <?php
    5. // connexion à la base
    6. $db=new PDO('pgsql:host=masterid;dbname=teniraq','****', '****') ;
    7. // exécution de la requête pour la liste SELECT
    8. $res = $db->query("SELECT numbadge,nom,prenom
    9.                     FROM badges
    10.                 ORDER BY 2,3") ;
    11. // récupération des données
    12. $data = $res->fetchAll() ;
    13. // pour chaque ligne ...
    14. foreach ( $data as $row ) {
    15.     // ... créer une entrée dans la liste SELECT
    16.     echo "\t<option value=\"".$row["numbadge"]."\"";
    17.     // si la personne sélectionnée auparavant est celle-ci,
    18.     // la marquer par défaut
    19.     if ($row["numbadge"]==$_GET["num"]) echo " selected=\"selected\"";
    20.     echo ">".$row["nom"]." ".$row["prenom"]."</option>\n";
    21. }
    22. ?>
    23. </select>
    24. <input type="submit" value="Choisir une personne" />
    25. </form>
    26. <?php
    27. // si on a choisi quelqu'un ...
    28. if (isset($_GET["num"])) {
    29.     $num=$_GET["num"];
    30.     echo "<form action=\"lesautresmatchs.php\">\n"
    31.             ."<input type=\"hidden\" value=\"$num\" name=\"num\" />\n"
    32.             ."<select name=\"match\">\n";
    33.     // ... requête pour récupérer les matchs qu'il a gagnés
    34.     $res = $db->query("SELECT refperdant,
    35.                      v.nom||' '||v.prenom AS vainqueur,
    36.                      p.nom||' '||p.prenom AS perdant,
    37.                      '('||scorevainqueur||'/'||scoreperdant||')' AS score,
    38.                      datematch
    39.                 FROM badges v,badges p,matchs
    40.                WHERE v.numbadge=refvainqueur
    41.                  AND p.numbadge=refperdant
    42.                  AND refvainqueur=$num
    43.             ORDER BY datematch DESC") ;
    44.     // récupération des données
    45.     $data = $res->fetchAll() ;
    46.     // création de la liste déroulante
    47.     foreach($data as $row) {
    48.         echo "<option value=\"".$row["refperdant"]."\"";
    49.         if ($row["refperdant"]==$_GET["match"]) echo " selected=\"selected\"";
    50.         // si le match sélectionné auparavant est celui-ci,
    51.         // le marquer par défaut
    52.         echo ">".$row["datematch"]." : ".$row["vainqueur"]
    53.                 ." vs ".$row["perdant"]." ".$row["score"]."</option>\n";
    54.     }
    55.     echo "</select>\n"
    56.         ."<input type=\"submit\" value=\"Choisir un match\" />\n"
    57.         ."</form>\n";
    58.     // si on a choisi un perdant
    59.     if (isset($_GET["match"])) {
    60.         $match=$_GET["match"];
    61.         echo "<div>Les autres matchs de son adversaire&nbsp;: </div>";
    62.         // ... requête pour récupérer les matchs qu'il a joués
    63.         $res=$db->query("SELECT v.nom||' '||v.prenom AS vainqueur,
    64.                      p.nom||' '||p.prenom AS perdant,
    65.                      '('||scorevainqueur||'/'||scoreperdant||')' AS score,
    66.                      datematch
    67.                 FROM badges v,badges p,matchs
    68.                WHERE v.numbadge=refvainqueur
    69.                  AND p.numbadge=refperdant
    70.                  AND $match IN (refvainqueur,refperdant)
    71.                 ORDER BY datematch DESC") ;
    72.         // récupération des données
    73.         $data = $res->fetchAll() ;
    74.         // affichage des matchs
    75.         echo "<ul>\n";
    76.         foreach($data as $row) {
    77.             echo "<li>".$row["datematch"]." : ".$row["vainqueur"]
    78.                 ." <em>vs</em> ".$row["perdant"]." ".$row["score"]
    79.                 ."</li>\n";
    80.         }
    81.         echo "</ul>\n";
    82.     }
    83. }
    84. ?>
    85. </body></html>
Dernière modification : 25/8/2016