Skip to content

Instantly share code, notes, and snippets.

@tomsihap
Last active October 25, 2023 02:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save tomsihap/0442c80f2551843d4b8608310e33930e to your computer and use it in GitHub Desktop.
Save tomsihap/0442c80f2551843d4b8608310e33930e to your computer and use it in GitHub Desktop.
<?php
/**
* Exercices de PHP :
*/
/**
* 1. Déclarer ces deux variables et les débuguer avec var_dump :
* => nombre = 123
* => texte = "hello world"
*/
$nombre =
$texte =
var_dump($nombre, $texte);
/**
* 2. a. Ajoutez 32 à la variable nombre
* 2. b. Transformez la variable $texte en "hello world, cette variable est écrite en PHP." en utilisant la concaténation
*
* Ensuite, débuguez les avec var_dump.
*/
$nombre =
$texte =
var_dump($nombre, $texte);
/**
* 3. a. Déclarez un tableau simple :
* => "tomates", "navets", "carottes", "oignons"
* 3. b. Affichez dans un var_dump la valeur "carotte".
*/
$tableauSimple =
var_dump(...);
/**
* 4. a. Déclarez un tableau associatif, qui contient des données utilisateur en clés (nom, prénom, adresse).
* 4. b. Affichez dans un var_dump la valeur de "prénom".
*/
$tableauAssociatif =
var_dump(...);
/**
* 5. a. Déclarez un tableau multi-dimentionnel, qui contient des saisons, lesquelles contiennent des 2 légumes, lesquels contiennent les clés "quantité" et "prix"
* 5. b. Affichez dans un var_dump le prix d'un légume d'été.
*/
$tableauMultidimentionnel =
var_dump(...);
/**
* 6. a. Déclarez nombre et donnez lui une valeur numérique.
* 6. b. Ecrivez une condition : si nombre est inférieur à 100, affichez "trop petit", sinon, affichez "ok c'est bon".
*/
$nombre =
if...
/**
* 7. a. Déclarez une variable "year" qui contiendra l'année actuelle, grâce à la fonction date()
* 7. b. Ecrivez une condition : si l'année actuelle (avec $year) est 2019, affichez "bonne année !", sinon "mauvaise année."
*/
$year =
if...
/**
* 8. a. Testez si $year est bissextile (modulo 4). Si oui, affichez "$year est bissextile", sinon "$year n'est pas bissextile"
*/
if...
/**
* 9. a. Créez une variable $age contenant un âge
* 9. b. Faites une condition ternaire ( $var = (condition) ? valeur_si_vrai : valeur_si_faux; ) qui enregistrera dans une variable
* $statut "majeur" si l'âge est >= 18 ans, "mineur" sinon.
*/
$age =
$statut =
/**
* 10. Reprenez le tableau 3 (tableau simple) et affichez chaque élément grace à une boucle foreach de cette façon:
* "Elément 0 : xxx"
* "Elément 1 : xxx"
* ...
*
* N'oubliez pas les <br> pour les sauts de ligne !
*
* Rappel : foreach ($array as $key => $value) { ... }
*/
foreach ...
/**
* 11. Reprenez le tableau 4 (array associatif) et affichez dans un <ul><li> les éléments de l'utilisateur, par exemple:
*
* - Nom : John
* - Prénom : Doe
* - Adresse : 14 rue des champs
*
* Attention au placement des "ul" et des "li", lesquelles dois-je mettre dans le foreach, lesquels à l'exterieur ?
* Rappel : foreach ($array as $key => $value) { ... }
*/
foreach ...
/**
* 12. Reprenez le tableau 5 (array multidimentionnel) et affichez :
*
* - Ete
* - Fruit 1 : (quantité : 3 , prix : 10€)
* - Fruit 2 : (quantité : 3 , prix : 10€)
* * - Automne
* - Fruit 1 : (quantité : 3 , prix : 10€)
* - Fruit 2 : (quantité : 3 , prix : 10€)
* ...
*
* Attention: il y a un foreach pour chaque "sous-tableau". Attention au nommage des variables intermédiaires ($key => $value) de telle sorte
* que vous vous rappeliez bien du contenu de chacune.
*
* Rappel : foreach ($array as $key => $value) { ... }
*/
foreach ...
/**
* 13. Fonctions
* a. Ecrire une fonction qui ne prend pas d'arguments, qui affichera "hello world" et qui retournera "true".
* b. Ecrire une fonction à 1 argument, qui retournera l'argument en majuscules.
* c. Ecrire une fonction à 2 arguments, qui comparera les deux nombres et retournera le plus grand des deux.
*/
function hello() {}
function maj($texte) {}
function compare($a, $b) {}
/**
* 14. Validations
* a. Prenez la fonction 13b. et effectuez des validations (if...) pour être sûr que l'argument passé est un string.
* b. Prenez la fonction 13c. et effectuez des validations (if ...) pour être sûr que les 2 arguments soient des nombres.
*/
function maj($texte) {}
function compare($a, $b) {}
/**
* 15. GET
* Ecrivez un lien avec echo "<a href="...">Lien</a>" qui enverra à la page "testGet.php" les valeurs suivantes :
* id = 5
* user_role = admin
* has_photo = false
*/
/**
* 16. GET
* Dans la page testGet.php, var_dumpez la variable $_GET reçue, ainsi que chacune des variables transmises.
*/
/**
* 17. POST
* Créez un formulaire dans form.php avec 2 champs "nom" et "prenom", et envoyez les données vers testPost.php
*/
/**
* 18. POST
* Dans le fichier testPost.php, vardumpez la variable $_POST reçue, ainsi que chacune des variables transmises.
*/
/**
* 19. Validations
*
* Dans testGet.php, vérifiez que :
* id est un nombre,
* user_role est égal à "admin"
* has_photo est un booléen
*
* Affichez les erreurs nécessaires.
*/
/**
* 20. Validations
*
* Dans testPost.php, vérifiez que :
* nom est présent et ne contient pas de chiffres
* prénom est présent et ne contient pas de chiffres
*
* Astuce : ctype_alpha()
*/
/**
* 21. BDD
* Créez une table (users_tests) avec les champs id, nom, prenom
*/
/**
* 22. INSERT
* Dans testPost.php, créez une connexion à la base de données et enregistrez les données nom et prénom dans la table users_tests
*/
/**
* 23. SELECT
*
* Créez une page list.php
* Connectez vous à la base de données
* Récupérez tous les éléments de user_test
* Affichez-les
*/
<?php
/**
* Exercices de PHP :
*/
/**
* 1. Déclarer ces deux variables et les débuguer avec var_dump :
* => nombre = 123
* => texte = "hello world"
*/
$nombre = 123;
$texte = "hello world";
var_dump($nombre, $texte);
/**
* 2. a. Ajoutez 32 à la variable nombre
* 2. b. Transformez la variable $texte en "hello world, cette variable est écrite en PHP." en utilisant la concaténation
*
* Ensuite, débuguez les avec var_dump.
*/
$nombre += 32;
$texte .= ", cette variable est écrite en PHP.";
var_dump($nombre, $texte);
/**
* 3. a. Déclarez un tableau simple :
* => "tomates", "navets", "carottes", "oignons"
* 3. b. Affichez dans un var_dump la valeur "carotte".
*/
$tableauSimple = ["tomates", "navets", "carottes", "oignons"];
var_dump($tableauSimple);
/**
* 4. a. Déclarez un tableau associatif, qui contient des données utilisateur en clés (nom, prénom, adresse).
* 4. b. Affichez dans un var_dump la valeur de "prénom".
*/
$tableauAssociatif = [
"nom" => "Doe",
"prenom" => "John",
"adresse" => "34 rue des champs"
];
var_dump($tableauAssociatif);
/**
* 5. a. Déclarez un tableau multi-dimentionnel, qui contient des saisons, lesquelles contiennent des 2 légumes, lesquels contiennent les clés "quantité" et "prix"
* 5. b. Affichez dans un var_dump le prix d'un légume d'été.
*/
$tableauMultidimentionnel = [
"ete" => [
"tomates" => [
"prix" => 12.3,
"quantite" => 4
],
"poivrons" => [
"prix" => 9.2,
"quantite" => 2
],
],
"automne" => [
"navets" => [
"prix" => 2.1,
"quantite" => 12
],
"oignons" => [
"prix" => 2.90,
"quantite" => 4
],
],
"hiver" => [
"potimaron" => [
"prix" => 12.3,
"quantite" => 4
],
"pomme de terre" => [
"prix" => 9.2,
"quantite" => 2
],
],
"printemps" => [
"salade verte" => [
"prix" => 2.1,
"quantite" => 12
],
"radis" => [
"prix" => 2.90,
"quantite" => 4
],
]
];
var_dump($tableauMultidimentionnel);
/**
* 6. a. Déclarez nombre et donnez lui une valeur numérique.
* 6. b. Ecrivez une condition : si nombre est inférieur à 100, affichez "trop petit", sinon, affichez "ok c'est bon".
*/
$nombre = 12;
if ($nombre < 100) {
echo "trop petit";
}
else {
echo "ok c'est bon";
}
/**
* 7. a. Déclarez une variable "year" qui contiendra l'année actuelle, grâce à la fonction date()
* 7. b. Ecrivez une condition : si l'année actuelle (avec $year) est 2019, affichez "bonne année !", sinon "mauvaise année."
*/
$year = date('Y');
if ($year == 2019) {
echo "bonne année !";
}
else {
echo "mauvaise année";
}
/**
* 8. a. Testez si $year est bissextile (modulo 4). Si oui, affichez "$year est bissextile", sinon "$year n'est pas bissextile"
*/
if ($year%4 == 0) {
echo $year . " est bissextile";
}
else {
echo $year . " n'est pas bissextile";
}
/**
* 9. a. Créez une variable $age contenant un âge
* 9. b. Faites une condition ternaire ( $var = (condition) ? valeur_si_vrai : valeur_si_faux; ) qui enregistrera dans une variable
* $statut "majeur" si l'âge est >= 18 ans, "mineur" sinon.
*/
$age = 17;
$statut = ($age >= 18) ? "majeur" : "mineur";
var_dump($statut);
/**
* 10. Reprenez le tableau 3 (tableau simple) et affichez chaque élément grace à une boucle foreach de cette façon:
* "Elément 0 : xxx"
* "Elément 1 : xxx"
* ...
*
* N'oubliez pas les <br> pour les sauts de ligne !
*
* Rappel : foreach ($array as $key => $value) { ... }
*/
foreach ($tableauSimple as $k => $v) {
echo "Element " . $k . " : " . $v . "<br>";
}
/**
* 11. Reprenez le tableau 4 (array associatif) et affichez dans un <ul><li> les éléments de l'utilisateur, par exemple:
*
* - Nom : John
* - Prénom : Doe
* - Adresse : 14 rue des champs
*
* Attention au placement des "ul" et des "li", lesquelles dois-je mettre dans le foreach, lesquels à l'exterieur ?
* Rappel : foreach ($array as $key => $value) { ... }
*/
echo '<ul>';
foreach ($tableauAssociatif as $k => $v) {
echo '<li>' . $k . ' : ' . $v . '</li>';
}
echo '</ul>';
/**
* 12. Reprenez le tableau 5 (array multidimentionnel) et affichez :
*
* - Ete
* - Fruit 1 : (quantité : 3 , prix : 10€)
* - Fruit 2 : (quantité : 3 , prix : 10€)
* * - Automne
* - Fruit 1 : (quantité : 3 , prix : 10€)
* - Fruit 2 : (quantité : 3 , prix : 10€)
* ...
*
* Attention: il y a un foreach pour chaque "sous-tableau". Attention au nommage des variables intermédiaires ($key => $value) de telle sorte
* que vous vous rappeliez bien du contenu de chacune.
*
* Rappel : foreach ($array as $key => $value) { ... }
*/
echo '<ul>';
// On affiche la liste des saisons :
foreach ($tableauMultidimentionnel as $saison => $legumes) {
// La saison :
echo '<li>' . $saison . '</li>';
// La liste de légumes de la saison en cours :
echo '<li>';
echo '<ul>';
foreach($legumes as $legume => $caracteristiques) {
// Le début de la ligne du légume : "Légume 1 : ( ..."
echo '<li>' . $legume . ' : (';
// la suite de la ligne du légume : "quantité : 3, prix 4,"
foreach($caracteristiques as $nom => $valeur) {
echo $nom . " : " . $valeur . ",";
}
// La parenthèse à la fin de la ligne du légume, et la fin du </li> :
echo ')</li>';
}
// Fin du tableau de liste de légumes pour la saison
echo '</ul>';
echo '</li>';
}
echo '</ul>';
/**
* 13. Fonctions
* a. Ecrire une fonction qui ne prend pas d'arguments, qui affichera "hello world" et qui retournera "true".
* b. Ecrire une fonction à 1 argument, qui retournera l'argument en majuscules.
* c. Ecrire une fonction à 2 arguments, qui comparera les deux nombres et retournera le plus grand des deux.
*/
function hello() {
echo "hello world";
return true;
}
function maj($texte) {
return strtoupper($texte);
}
function compare($a, $b) {
// Pour le cas "égal", on retourne $a (comme les deux sont égaux...) :
if ($a == $b) {
return $a;
}
// Pour les autres cas :
else {
// Cas $a plus grand :
if ($a>$b) {
return $a;
}
// Sinon, on retourne $b;
else {
return $b;
}
}
}
// La même fonction mais avec 2 ternaires imbriqués (les if/else if/else fonctionnent exactement comme au dessus)
function compareTernaire($a, $b) {
// D'abord : si $a et $b sont égaux, on retourne $a
// sinon, on teste $a > $b : si vrai, on retourne $a, sinon on retourne $b
return ($a == $b) ? $a :
( ($a > $b) ? $a : $b ) ;
}
/**
* 14. Validations
* a. Prenez la fonction 13b. et effectuez des validations (if...) pour être sûr que l'argument passé est un string.
* b. Prenez la fonction 13c. et effectuez des validations (if ...) pour être sûr que les 2 arguments soient des nombres.
*/
function maj($texte) {
// Si $texte ne contient pas que des lettres :
if (!ctype_alpha($texte)) {
echo "Attention, " . $texte . " ne doit contenir que des lettres";
return false;
}
return strtoupper($texte);
}
// Note : dans la fonction maj, on n'a pas mis de else : en effet, soit le "if" est rempli et on retourne false
// (donc la fonction s'arrête), soit le if n'est pas rempli et on retourne strtoupper. Else est facultatif donc.
// Pour compare, on prend la version Ternaire. Les vérifications sont identiques pour la version avec if/else.
function compareTernaire($a, $b) {
if (!is_numeric($a) || !is_numeric($b) {
echo $a . " et " . $b . " doivent être des nombres.";
return false;
}
return ($a == $b) ? $a : ( ($a > $b) ? $a : $b ) ;
}
/**
* 15. GET
* Ecrivez un lien avec echo "<a href="...">Lien</a>" qui enverra à la page "testGet.php" les valeurs suivantes :
* id = 5
* user_role = admin
* has_photo = false
*/
echo "<a href='testGest.php?id=5&user_role=admin&has_photo=false'>Lien</a>";
/**
* 16. GET
* Dans la page testGet.php, var_dumpez la variable $_GET reçue, ainsi que chacune des variables transmises.
*/
// Dans testGet.php :
var_dump($_GET);
var_dump($_GET['id']);
var_dump($_GET['user_role']);
var_dump($_GET['has_photo']);
/**
* 17. POST
* Créez un formulaire dans form.php avec 2 champs "nom" et "prenom", et envoyez les données vers testPost.php
*/
// Dans form.php :
?>
<form action="testPost.php" method="post">
<input type="text" name="nom" placeholder="Nom">
<input type="text" name="prenom" placeholder="Prénom">
<button type="submit">Envoyer</button>
</form>
<?php
/**
* 18. POST
* Dans le fichier testPost.php, vardumpez la variable $_POST reçue, ainsi que chacune des variables transmises.
*/
// Dans testPost.php
var_dump($_POST);
var_dump($_POST['nom']);
var_dump($_POST['prenom']);
/**
* 19. Validations
*
* Dans testGet.php, vérifiez que :
* id est un nombre,
* user_role est égal à "admin"
* has_photo est un booléen
*
* Affichez les erreurs nécessaires.
*/
// Dans testGet.php :
if (empty($_GET['id'])) {
echo "id doit etre rempli";
}
elseif(intval($_GET['id']) <= 0) {
echo "id doit être un entier positif";
}
else {
$id = $_GET['id'];
}
if (empty($_GET['user_role'])) {
echo "user_role doit etre rempli";
}
elseif($_GET['user_role'] !== 'admin') {
echo "user_role doit etre admin";
}
else {
$userRole = $_GET['user_role'];
}
if (empty($_GET['has_photo'])) {
echo "has_photo doit etre rempli";
}
// On vérifie que has_photo possède une des valeurs valides pour un booléen :
// Pour ça, on teste si $_GET['has_photo'] a une valeur comprise dans le tableau de données valides :
// "['true', 'false', true, false, 0, 1]", grâce à in_array
elseif( !in_array($_GET['has_photo'], ['true', 'false', true, false, 0, 1])) {
echo "has_photo doit etre un boolean";
}
else {
// Si tout est bon, on prend la valeur de $_GET['has_photo'] et on retourne sa valeur booléenne :
$trues = ['true', true, 1];
// On regarde si $_GET a une valeur qui est comprise dans "true", true, ou 1. Si oui, on met true dans $hasPhoto, sinon false.
$hasPhoto = in_array($_GET['has_photo'], $trues) ? true : false;
}
/**
* 20. Validations
*
* Dans testPost.php, vérifiez que :
* nom est présent et ne contient pas de chiffres
* prénom est présent et ne contient pas de chiffres
*
* Astuce : ctype_alpha()
*/
if (empty($_POST['nom'])) {
echo "le nom doit etre rempli";
}
elseif (!ctype_alpha($_POST['nom'])) {
echo "le nom doit avoir que des lettres";
}
else {
$nom = $_POST['nom'];
}
if (empty($_POST['prenom'])) {
echo "le prenom doit etre rempli";
}
elseif (!ctype_alpha($_POST['prenom'])) {
echo "le prenom doit avoir que des lettres";
}
else {
$nom = $_POST['prenom'];
}
/**
* 21. BDD
* Créez une table (users_tests) avec les champs id, nom, prenom
*/
/**
* 22. INSERT
* Dans testPost.php, créez une connexion à la base de données et enregistrez les données nom et prénom dans la table users_tests
*/
// Dans testPost.php
$host = 'localhost'; // Hôte de la base de données
$dbname = 'nom_de_la_db'; // Nom de la bdd
$port = '3306'; // Ou 3308 selon la configuration
$login = 'root'; // Par défaut dans WAMP
$password = ''; // Par défaut dans WAMP (pour MAMP : 'root')
try {
$bdd = new PDO('mysql:host='.$host.';dbname='.$dbname.';charset=utf8;port='.$port, $login, $password);
}
catch (Exception $e) {
die('Erreur : ' . $e->getMessage());
}
$request = "INSERT INTO users_tests(nom, prenom) VALUES (:nom, :prenom)";
$bdd->prepare($request);
$bdd->execute([
"nom" => $nom,
"prenom" => $prenom,
]);
/**
* 23. SELECT
*
* Créez une page list.php
* Connectez vous à la base de données
* Récupérez tous les éléments de users_tests
* Affichez-les
*/
// Dans list.php
$host = 'localhost'; // Hôte de la base de données
$dbname = 'nom_de_la_db'; // Nom de la bdd
$port = '3306'; // Ou 3308 selon la configuration
$login = 'root'; // Par défaut dans WAMP
$password = ''; // Par défaut dans WAMP (pour MAMP : 'root')
try {
$bdd = new PDO('mysql:host='.$host.';dbname='.$dbname.';charset=utf8;port='.$port, $login, $password);
}
catch (Exception $e) {
die('Erreur : ' . $e->getMessage());
}
// On récupère les utilisateurs triés par nom de famille ascendant
$request = "SELECT * FROM users_tests ORDER BY name ASC";
// Pas besoin de "préparer" la requête car on n'a pas de variable
$bdd->query($request);
/**
* 24. SELECT ONE : BROWSE
*
* Afficher 1 élément
*/
// En allant sur show.php?id=4
$host = 'localhost'; // Hôte de la base de données
$dbname = 'nom_de_la_db'; // Nom de la bdd
$port = '3306'; // Ou 3308 selon la configuration
$login = 'root'; // Par défaut dans WAMP
$password = ''; // Par défaut dans WAMP (pour MAMP : 'root')
try {
$bdd = new PDO('mysql:host='.$host.';dbname='.$dbname.';charset=utf8;port='.$port, $login, $password);
}
catch (Exception $e) {
die('Erreur : ' . $e->getMessage());
}
$request = "SELECT * FROM users_tests WHERE id = :id";
$bdd->prepare($request);
$bdd->execute([
"id" => $_GET['id'],
]);
// Bien sur, au lieu d'utiliser $_GET['id'] directement, il faut faire des validations sur $_GET['id'] et si
// toutes les validations fonctionnent, utiliser une variable $id = $_GET['id']
/**
* 25. DELETE
*
* Supprimer 1 élément
*/
// En allant sur delete.php?id=4
$host = 'localhost'; // Hôte de la base de données
$dbname = 'nom_de_la_db'; // Nom de la bdd
$port = '3306'; // Ou 3308 selon la configuration
$login = 'root'; // Par défaut dans WAMP
$password = ''; // Par défaut dans WAMP (pour MAMP : 'root')
try {
$bdd = new PDO('mysql:host='.$host.';dbname='.$dbname.';charset=utf8;port='.$port, $login, $password);
}
catch (Exception $e) {
die('Erreur : ' . $e->getMessage());
}
$request = "DELETE FROM users_tests WHERE id = :id";
$bdd->prepare($request);
$bdd->execute([
"id" => $_GET['id'],
]);
// Bien sur, au lieu d'utiliser $_GET['id'] directement, il faut faire des validations sur $_GET['id'] et si
// toutes les validations fonctionnent, utiliser une variable $id = $_GET['id']
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment