Médiaforma

All posts tagged exercice

Interrogez la table orders et affichez les champs OrderID, Customer et ShipCity des enregistrements dont le champ ShipCountry vaut France.

Solution

Faites une pause dans la vidéo pour vous permettre de définir le code. Vous pourrez poursuivre le visionnage de la vidéo pour prendre connaissance de la solution.

 <!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Accès à la table orders de la bdd Northwind avec PDO</title>
    <style>
      td { padding-right: 30px;}
    </style>
  </head>
  <body>
    <?php
      try {
        $base = new PDO('mysql:host=localhost; dbname=northwind', 'root', '');
      }
      catch(exception $e) {
        die('Erreur '.$e->getMessage());
      }
      $base->exec("SET CHARACTER SET utf8");
      $retour = $base->query('SELECT OrderID, Customer, ShipCity FROM orders WHERE ShipCountry="France"');
      echo "<table>";
      while ($data = $retour->fetch()){
        echo "<tr><td>".$data['OrderID']."</td>";
        echo "<td>".$data['Customer']."</td>";
        echo "<td>".$data['ShipCity']."</td></tr>";
      }
      echo "</table>";
      $base = null;
    ?>
  </body>
</html>

La base de données est ouverte en créant un objet PDO.

Si une erreur se produit à l’ouverture de la base, elle est affichée et le programme s’arrête

Si tout s’est bien passé, on indique que l’encodage à utiliser est UTF-8

Puis une requête SQL est appliquée à la table orders. Cette requête récupère les champs OrderID, Customer et Shipcity pour lesquels le champ shipcountry vaut France.

Les données filtrées par la requête sont obtenues avec la fonction fetch. Une boucle while permet de parcourir toutes les données de la table. Les champs de chaque enregistrement sont alors affichés dans les colonnes d’un tableau HTML.

Enfin, l’objet PDO $base est supprimé pour mettre fin à la connexion.

Exécutons ce script dans WAMP Server. Voici le résultat.

 


Pour travailler sur des données plus consistantes, vous allez utiliser plusieurs tables fournies en exemple par Microsoft dans la base de données Northwind.

Commencez par télécharger les fichiers suivants :

Fichier Emplacement
customers.csv https://www.mediaforma.com/encours/customers.csv
orders.csv https://www.mediaforma.com/encours/orders.csv
order_details.csv https://www.mediaforma.com/encours/order_details.csv

 

Ouvrez phpMyAdmin en tant qu’utilisateur root. Importez ces trois tables dans la base de données northwind, sous les noms customers, orders et order_details.

Solution

Faites une pause dans la vidéo pour vous permettre de créer la base de données northwing et d’y importer les trois tables que vous aurez téléchargées. Poursuivez la lecture de la vidéo pour avoir des informations détaillées sur l’importation.

1)      Une fois connecté à phpMyAdmin en tant que root, sélectionnez l’onglet Importer et importez les fichiers customers.csv, orders.csv et order_details.csv . Vous utiliserez le paramétrage suivant :

  • Jeu de caractères UTF8
  • Format CSV
  • Colonnes séparées par des points-virgules
  • Colonnes entourées par des guillemets
  • Cochez la case “La première ligne du fichier contient le nom des colonnes de la table”

2)      Renommez la base de données csv_db en northwind. Pour cela, cliquez sur csv_db dans le volet gauche, sélectionnez l’onglet Opérations et utilisez le groupe d’options Changer le nom de la base de données pour.

3)      Modifiez le nom des tables en customers, orders et order_details. Pour cela, cliquez sur leur nom dans le volet gauche, basculez sur l’onglet Opérations et utilisez le groupe d’options Copier la table vers.


Exercice

  1. Affectez le mot de passe ‘secret’ à l’utilisateur root
  2. Annulez le mot de passe de l’utilisateur root
  3. Créez l’utilisateur Pierre sur le serveur localhost
  4. Affectez le mot de passe ‘monpass’ à l’utilisateur Pierre
  5. Affectez tous les privilèges à l’utilisateur Pierre sur les tables de la base localhost
  6. Supprimez l’utilisateur Pierre

Solution

Faites une pause dans la vidéo et répondez à ces six questions. Vous pourrez reprendre le visionnage de la vidéo pour prendre connaissance des solutions.

Affectation du mot de passe ‘secret’ à l’utilisateur root

Pour savoir à quel serveur est attaché l’utilisateur root, on utilise la commande suivante :

select host, user from mysql.user;

Voici la réponse retournée par MySQL :


L’utilisateur root est donc rattaché au serveur ‘::1’.

Il suffit maintenant d’utiliser la commande suivante pour affecter le mot de passe ‘secret’ à l’utilisateur root :

set password for 'root'@'::1' = PASSWORD('secret');

Suppression du mot de passe affecté à l’utilisateur root

Utilisez la commande suivante :

set password for 'root'@'::1' = PASSWORD('');

Création de l’utilisateur Pierre sur le serveur localhost

Utilisez la commande suivante :

CREATE USER 'Pierre'@'localhost';

Vérifiez que cet utilisateur a bien été créé avec la commande suivante :

SELECT host, user FROM mysql.user;

Affectation d’un mot de passe à l’utilisateur Pierre

Lancez la commande suivante :

SET PASSWORD FOR 'Pierre'@'localhost' = PASSWORD('monpass');

Affectation de privilèges à l’utilisateur Pierre sur les tables de la base localhost

Utilisez la commande suivante :

GRANT ALL PRIVILEGES ON localhost.* TO 'Pierre'@'localhost' IDENTIFIED BY 'monpass';

Suppression de l’utilisateur Pierre

Utilisez la commande suivante :

DROP USER 'Pierre'@'localhost';

Vérifiez que l’utilisateur Pierre a bien été supprimé avec cette commande :

SELECT host, user FROM mysql.user;

 


Utilisez la console MySQL pour effectuer les actions suivantes :

  1. Créez la base de données testconsole
  2. Créez la table testtable composée des champs suivants :
Champ Type
nom varchar(50)
prenom varchar(50)
compteurVisite smallint
derniereVisite timestamp

 

  1. Affichez la structure de la table.
  2. Ajoutez les valeurs suivantes dans la table testtable :
Pierre, Dubur, 34, NOW()
 Chantal, Garnier, 128, NOM()
 Jean, Dupont, 2, NOW()
 Belle, Vercor, 45, NOW()
  1. Lister les données contenues dans la table
  2. Affecter la valeur 200 au champ compteurdevisite de Jean Dupont
  3. Supprimer l’enregistrement de Pierre Dubur
  4. Compter le nombre d’enregistrements dans la table testtable
  5. Supprimer la base de données testconsole
USE testconsole


Pour vous entraîner à manipuler l’interface phpMyAdmin, trouvez la technique permettant de modifier le contenu de la table utilisateurs.

Solution

Faites une pause dans la vidéo. Poursuivez la lecture pour prendre connaissance de la technique à utiliser.

Pour être en mesure de modifier les données de la table utilisateurs, vous devez au préalable créer un champ indexé à valeurs uniques :

  1. Sélectionnez l’onglet Structure.
  2. Sous la liste des champs, sélectionnez l’option En début de table et cliquez sur Exécuter pour ajouter le nouveau champ en début de table.
  3. Définissez un champ nommé (par exemple) index, choisissez UNIQUE dans la liste Index et cochez la case A_I (AUTO_INCREMENT) :
  4. Cliquez sur Sauvegarder puis basculez sur l’onglet Afficher.

Maintenant, vous pouvez modifier les données stockées dans les enregistrements en cliquant sur les liens Modifier correspondants :

Remarque

Toutes les tables doivent avoir un champ qui permet de les identifier de façon unique.


Définissez la classe chainePlus qui contient :

  • Une propriété private nommée chaine ;
  • quatre méthodes de type public nommées gras(), italique(), souligne() et majuscules() qui retournent respectivement la chaîne passée en argument mise en gras, en italique, soulignée et mise en majuscules.

Définissez un script PHP qui crée un objet basé sur la classe chainePlus et qui l’exploite pour obtenir le résultat suivant :

Solution

Faites une pause dans la vidéo et définissez la classe chainePlus et un objet basé sur cette classe. Vous reprendrez la lecture de la vidéo pour prendre connaissance de la solution.

Voici le code de la classe chainePlus :

<?php
  class chainePlus{
    private $chaine = "Programmation orientée objet en PHP";
    public function __construct($laChaine){
      $this -> chaine = $laChaine;
    }
    public function gras(){
      return "<b>".$this->chaine."</b><br>";
    }
    public function italique(){
      return "<i>".$this->chaine."</i><br>";
    }
    public function souligne(){
      return "<u>".$this->chaine."</u><br>";
    }
    public function majuscules(){
      return strtoupper($this->chaine)."<br>";
    }
  }
?>

La première instruction définit la propriété private $chaine et lui affecte la chaîne “Programmation orientée objet en PHP”. Cette variable ne sera accessible que par les méthodes de la classe.

Les instructions suivantes définissent les méthodes gras, italique, souligne et majuscules. Ces quatre méthodes fonctionnent sur le même principe : elles lisent le contenu de la propriété $chaine, lui appliquent un traitement spécifique et retournent le résultat obtenu à l’appelant.

La méthode gras encadre la chaîne par les balises b et /b pour l’afficher en gras et lui ajoute un passage à la ligne avec la balise br. La méthode italique encadre la chaine avec les balises i et /i pour l’afficher en italique et lui ajoute un passage à la ligne. La méthode souligne encadre la chaine avec les balises u et /u pour la souligner et lui ajoute un passage à la ligne. Enfin, la méthode majuscules applique la fonction strtoupper à la chaine pour l’afficher en majuscules et lui ajouter un passage à la ligne.

Voici le code du script objetChainePlus.php, qui crée un objet basé sur la classe chainePlus et qui l’utilise :

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Formulaire d'accès à la page protégée</title>
  </head>
  <body>
    <?php
      include_once("chainePlus.class.php");
      $st = new chainePlus("Programmation orientée objet en PHP");
      echo "Gras : ".$st->gras();
      echo "Italique : ".$st->italique();
      echo "Souligné : ".$st->souligne();
      echo "Majuscules : ".$st->majuscules();
    ?>
  </body>
</html>

Ce script est très simple. Après avoir inclus le code de la classe chainePlus avec l’instruction include_once, une instance de la classe chainePlus est créée avec l’instruction new. L’objet créé a pour nom $st.

Les méthodes Gras, Italique, Souligne et Majuscules de l’objet sont alors invoquées pour afficher les différentes mises en forme de la chaîne.
Exécutons ce code dans WAMP Server. Les quatre mises en forme de la chaîne sont bien affichées.

 


En utilisant Notepad++, créez le fichier compteur.txt et sauvegardez-le sans aucun contenu.

Ecrivez quelques lignes de PHP pour créer un compteur de visite.

Solution

Faites une pause dans la vidéo et écrivez le code demandé dans l’exercice. Reprenez la lecture de la vidéo pour prendre connaissance de la solution de l’exercice.

Voici le code utilisé.

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Compteur de visite</title>
  </head>
  <body>
    <?php
      $handle=fopen("compteur.txt","r+");
      $visites = fgets($handle);
      echo "Cette page a été visitée $visites fois.";
      $visites++;
      fseek($handle, 0);
      fputs($handle, $visites);
      fclose($handle);
    ?>
  </body>
</html>

Le fichier est ouvert en mode r+ avec la fonction fopen. Le handle du fichier est stocké dans la variable $handle.

La première (et unique) liogne du fichier est lue avec la fonction fgets et stockée dans la variable $visites.

Le nombre de visites de la page est alors affiché avec une instruction echo.

Le nombre de visites est incrémenté. Le pointeur d’écriture est placé au début du fichier avec la fonction fseek à laquelle on passe la valeur 0.

La nouvelle valeur du compteur de visite est stockée dans le fichier avec la fonction fputs puis le fichier est fermé avec la fonction fclose.

Exécutons ce code avec Wamp server.

La page n’a encore jamais été visitée. Appuyons sur la touche F5 pour réactualiser la page. Le compteur est incrémenté d’un : la page a été visitée une fois.