Skip to content

web4cstj/monde-pokemons

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Monde pokemon

Exercice formatif d'introduction à une application PHP rudimentaire.

Acquis

Ce projet est à faire faire et à refaire jusqu'à de que tous ces concepts soient acquis :

Phase I : Le visuel

  • Capable d'installer une application PHP
  • Capable de faire fonctionner une application PHP sur un serveur local.
  • Capable d'afficher dans la page par programmation.
  • Capable d'inclure une fichier externe
  • Capable de composer du HTML sous forme de concaténations de chaînes PHP.
  • Capable de créer une classe PHP
  • Capable de créer une méthode statique
  • Capable de faire l'appel à une méthode statique

Phase II : Les données

  • Capable de connecter une base de données
  • Capable d'exécuter une commande SQL
  • Capable de parcourir les enregistrements retournés
  • Capable de récupérer les informations d'un enregistrement
  • Capable re recueillir une donnée se trouvant dans l'adresse

Préparation et prérequis

  1. Visual Studio Code
  2. WampServer ou XAMPP
  3. DB Browser for SQLite
  4. Compte Github

Étapes

Suivre dans l'ordre les étapes suivantes.

Phase I

  1. Cloner ou télécharger le dossier de départ du projet

  2. S'assurer que le projet est bel et bien ouvert dans VSCode.

  3. Renommer les fichiers index.html et details.html qui se trouvent dans le dossier public pour qu'ils aient l'extension .php.

  4. Démarrerr le serveur dans le terminal de VSCode :

    php -S localhost:8000 -t public
  5. Tester dans le fureteur l'adresse http://localhost:8000. La page index.php devrait s'afficher.

  6. Créer un fichier Pokemon.php dans le dossier app et y ajouter la classe du même nom.

    //Pokemon.php
    <?php
    class Pokemon {
    	
    }
  7. Dans la classe, créer les méthodes statiques html_index qui n'a pas de paramètres et html_details qui doit recevoir le paramètre $id. Les 2 méthodes retournent une chaîne de caractères.

    	static public function html_index() {
    		$resultat = '';
    		return $resultat;
    	}
    	static public function html_details($id) {
    		$resultat = '';
    		return $resultat;
    	}
  8. Mettre le HTML pertinent (provenant de index.php et details.php) dans chacune des méthodes et le transformer en PHP grâce à des concaténations successives. Exemple partiel :

    $resultat = '';
    $resultat .= '<div class="details">';
    $resultat .= '<h1>Bulbizarre</h1>';
    $resultat .= '<div><img src="https://www.pokebip.com/pokedex-images/artworks/1.png" alt="Bulbizarre"></div>';
    ...
    return $resultat;

    Note : Dans la méthode html_index, se limiter à 3 Pokémons.

  9. Dans les pages index.php et details.php, faire l'inclusion de fichier autoload.php

    <?php
    include("../autoload.php");
    ?><!DOCTYPE html>
    ...
  10. Supprimer respectivement les balises (et leur contenu) div.liste et div.details

  11. Tester les pages. Elles devraient être presque vides.

  12. Ajouter les appels aux méthodes statiques crées pour remplacer le HTML enlevé :

    //index.php
    ...
    <?php echo Pokemon::html_index(); ?>
    ...
    //details.php
    ...
    <?php echo Pokemon::html_details(1); ?>
    ...
  13. Tester. Les pages devraient fonctionner, mais donner toujours le même résultat peu importe le lien cliqué.

Étapes de la phase II : les données

  1. Ouvrir la base de données dans DB Browser for SQLite et prendre note des noms des champs de la table pokemons.

  2. Au début chaque méthode, ajouter la connexion à la base de données et lexecution d'une requête:

    $pdo = new PDO("sqlite:../pokemon.sqlite");
    $stmt = $pdo->prepare("{SQL}");
    $stmt->execute();
  3. Remplacer la mention {SQL} par les commandes SQL suivantes :

    • html_index : SELECT id, numero, nom_fr FROM pokemons ORDER BY numero LIMIT 20
    • html_details : SELECT id, numero, nom_fr, nom_en, type1, type2, talents, pv, attaque, defense, attaque_speciale, defense_speciale, vitesse FROM pokemons WHERE id=?
  4. Dans html_details, ajouter [$id] comme paramètre à la méthode execute.

  5. Dans html_index, faire en sorte de ne garder qu'un seul tr dans le tbody.

  6. Envelopper le tr restant dans une boucle while:

    while (($objPokemon = $stmt->fetchObject()) !== false) {
    	...
    }
  7. Dans html_details, envlopper tout le contenu du div.details d'un if silimaire:

    if (($objPokemon = $stmt->fetchObject()) !== false) {
    	...
    } else {
    	$resultat .= '<h1>Ce Pokémon n\'existe pas</h1>';
    }
  8. Dans chaque méthode, remplacer les informations variables par des données de la base de données.

    Par exemple :

    $resultat .= '<h1>Pikachu</h1>';

    deviendra :

    $resultat .= '<h1>'.$objPokemon->nom_fr.'</h1>';
  9. À l'occasion, on a besoin d'appliquer la function intval à la donnée numero. On utilisera donc intval($objPokemon->numero) à la place.

  10. Il ne reste qu'à gérer les occasions où il n'y a pas de 2e type. On a alors besoin d'un if.

  11. Tester (souvent)

  12. Dans le fichier details.php ajouter les lignes suivantes juste après le include :

    if (!isset($_GET['id'])) {
    	header("location:index.php");
    	exit;
    }
    $id = $_GET['id']; 
  13. Adapter la commande suivante plus bas dans le même fichier :

    echo Pokemon::html_details($id); 
  14. Tester en cliquant sur les liens.

About

Exercice de départ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published