tp1
This commit is contained in:
@@ -0,0 +1,233 @@
|
||||
|
||||
# TP1 : bases du langage PHP
|
||||
|
||||
**À l'IUT**
|
||||
|
||||
Le repertoire `public_html` à la racine de votre compte est accessible par http(s) à l'url suivante :
|
||||
|
||||
```
|
||||
http[s]://dwarves.iut-fbleau.fr/~login/
|
||||
```
|
||||
|
||||
**Ailleurs**
|
||||
|
||||
Pour monter ce repertoire dans votre aborescence locale, vous pouvez utiliser le programme `sshfs` :
|
||||
```
|
||||
sshfs login@gatekeeper.iut-fbleau.fr:/export/home/an19/login repertoire/de/montage/local/
|
||||
```
|
||||
|
||||
Depuis la version 5.4, la commande `php` embarque un serveur web interne :
|
||||
|
||||
```bash
|
||||
php -S localhost:8080 -t repertoire
|
||||
```
|
||||
|
||||
Le repertoire passé en paramètre est la racine du serveur web.
|
||||
|
||||
|
||||
### Ex1
|
||||
Vous allez tester votre premier script php : `hello_world` :
|
||||
```php
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
<?php echo "<h1>hello world</h1>";?>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
- Placez le fichier `hello_world.php` dans votre
|
||||
repertoire `public_html`, et testez.
|
||||
|
||||
- En utilisant la fonction `phpinfo`, faites afficher dans le script
|
||||
précédent la configuration php du serveur dwarves.
|
||||
|
||||
### Ex2
|
||||
Quel est l'entier servant de clé à
|
||||
- chaque élément du tableau
|
||||
suivant :
|
||||
```php
|
||||
<?php
|
||||
$clients = [
|
||||
"Luc",
|
||||
7 => "Paul",
|
||||
2 =>"Martin",
|
||||
"Arnaud"
|
||||
];
|
||||
?>
|
||||
```
|
||||
|
||||
- à l'élément de valeur `Blouson` dans le tableau `$produits` ?
|
||||
```php
|
||||
<?php
|
||||
$produits = [
|
||||
20 => "Chemise",
|
||||
3 => "Pantalon",
|
||||
10 => "Jupe",
|
||||
"Veste",
|
||||
"Blouson"
|
||||
];
|
||||
?>
|
||||
```
|
||||
- à chaque élément du tableau `$array` ?
|
||||
```php
|
||||
<?php
|
||||
$array = ["a","b","c"];
|
||||
$array[] = "d";
|
||||
$array[10] = "j";
|
||||
unset($array[2]);
|
||||
?>
|
||||
```
|
||||
### Ex21
|
||||
- Créez un tableau de 10 cases dont la clé i contient la somme des entiers jusqu'à i.
|
||||
- Créez un tableau de 10 cases dont la clé i<sup>2</sup> contient i
|
||||
.
|
||||
### Ex22
|
||||
Écrivez un script php affichant les entiers de 1 à 50.
|
||||
- Faites en sorte que les impairs soient en italique, et les pairs en gras.
|
||||
- Regroupez chaque dizaine dans un même paragraphe.
|
||||
|
||||
### Ex3
|
||||
Vous disposez du fichier [data.php](./ex3/include/data.inc.php) qui
|
||||
représente, sous forme d'un tableau, un certain nombre
|
||||
d'individus, avec pour chacun ses nom, prénom, email, taille et
|
||||
poids.
|
||||
|
||||
Voici un extrait du fichier :
|
||||
```php
|
||||
$data = array(
|
||||
array("Nom"=>"Garza","Prenom"=>"Forrest","Email"=>"eleifend@ligulaedu","Taille"=>"185","Poids"=>"65"),
|
||||
array("Nom"=>"Tanner","Prenom"=>"Orla","Email"=>"adipiscing@vitaecouk","Taille"=>"180","Poids"=>"73"),
|
||||
...
|
||||
```
|
||||
|
||||
1. Ecrire un script qui affichent l'ensemble des données sous
|
||||
forme d'un tableau html.
|
||||
2. L'imc (indice de masse corporel) d'une personne est donné par
|
||||
la formule $\frac{poids}{taille^2}$ (poids en kilogramme et taille en mètre).
|
||||
Ajouter une colonne avec la valeur de l'imc (2 chiffres après la virgule).
|
||||
3. Une personne est considérée en surpoids lorsque son imc
|
||||
dépasse 25. Colorier les lignes du tableau lorsque la
|
||||
personne correspondante est en surpoids.
|
||||

|
||||
|
||||
<details><summary>Conseils</summary>
|
||||
<div>
|
||||
|
||||
- Pour utiliser le fichier de données, incluez-le dans votre
|
||||
script.
|
||||
- La structure de langage `foreach` fournit une façon simple de
|
||||
parcourir des tableaux. `foreach` ne fonctionne que pour les
|
||||
tableaux et les objets, et émettra une erreur si vous tentez de
|
||||
l'utiliser sur une variable de type différent ou une variable
|
||||
non initialisée. Il existe deux syntaxes :
|
||||
|
||||
```php
|
||||
foreach (array_expression as $value){
|
||||
|
||||
}
|
||||
|
||||
foreach (array_expression as $key => $value){
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
Des [exemples]](http://fr2.php.net/manual/fr/control-structures.foreach.php).
|
||||
|
||||
- Pour arrondir un réel, vous pouvez utiliser la fonction [round](https://www.php.net/manual/fr/function.round.php).
|
||||
</div>
|
||||
</details>
|
||||
|
||||
### Ex4
|
||||
Ecrivez un script qui permet de lancer deux dés, et en affiche la somme. Utilisez la fonction [mt_rand](https://www.php.net/manual/en/function.mt-rand.php) pour la génération aléatoire.
|
||||
|
||||
|
||||

|
||||
|
||||
### Ex5
|
||||
Ecrire un programme PHP qui affiche, sous forme d'une liste
|
||||
"cliquable" vos bookmarks (favoris) stockés dans un tableau
|
||||
associatif. Vos bookmarks seront classés par répertoire. Chaque
|
||||
répertoire aura donc un nom, et contiendra un certain nombre de
|
||||
favoris représentés par un nom, une image et une url.
|
||||
|
||||
Exemple d'affichage :
|
||||
|
||||
- Moteurs de recherche :
|
||||
- [<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/Google_2015_logo.svg/272px-Google_2015_logo.svg.png" width=40>](http://google.fr).
|
||||
- [<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/3/3a/Yahoo%21_%282019%29.svg/200px-Yahoo%21_%282019%29.svg.png" width=40>](http://yahoo.fr).
|
||||
- Journaux :
|
||||
- [<img src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/54/Le_monde_logo.svg/200px-Le_monde_logo.svg.png" width=40>](http://lemonde.fr).
|
||||
- [<img src="http://upload.wikimedia.org/wikipedia/fr/0/0a/GNUlinuxmagazinefrance.png" width=40>](http://www.unixgarden.com/index.php/category/gnu-linux-magazine).
|
||||
- [<img src="http://upload.wikimedia.org/wikipedia/commons/3/32/L%27%C3%89quipe_wordmark.svg" width=40>](http://lequipe.fr).
|
||||
- Sports :
|
||||
- [<img src="http://upload.wikimedia.org/wikipedia/fr/6/67/Logo_F%C3%A9d%C3%A9ration_Fran%C3%A7aise_de_Football.svg" width=50>](http://fff.fr).
|
||||
- [<img src="http://upload.wikimedia.org/wikipedia/fr/b/bf/FFDF.jpg" width=50>](www.ffdf.fr).
|
||||
|
||||
### Ex6
|
||||
Ecrire (et tester) une fonction
|
||||
|
||||
```php
|
||||
<?php
|
||||
string createPassword(int $n, string $alphabet);
|
||||
?>
|
||||
```
|
||||
|
||||
qui permet de générer un mot de passe de `n` caractères choisis
|
||||
aléatoirement parmi les caractères de `alphabet`.
|
||||
|
||||
<details><summary>Conseils</summary>
|
||||
|
||||
Il suffit de tirer aléatoirement n caractères de la chaîne alphabet et de les concatener.
|
||||
|
||||
Les fonctions
|
||||
[strlen](https://www.php.net/manual/fr/function.strlen.php)
|
||||
et
|
||||
[mt_rand](https://www.php.net/manual/fr/function.mt-rand.php) pourront vous être utiles.
|
||||
</details>
|
||||
|
||||
### Ex61
|
||||
On considère les deux tableaux suivants :
|
||||
|
||||
```php
|
||||
$tabMagazines = [
|
||||
'le monde' => ['frequence' => 'quotidien', 'type' => 'actualité', 'prix' => 220],
|
||||
'le point' => ['frequence' => 'hebdo' , 'type' => 'actualité', 'prix' => 80 ],
|
||||
'causette' => ['frequence' => 'mensuel' , 'type' => 'féminin' , 'prix' => 180],
|
||||
'politis' => ['frequence' => 'hebdo' , 'type' => 'opinion' , 'prix' => 100],
|
||||
'le monde diplomatique' => ['frequence' => 'mensuel' , 'type' => 'analyse' , 'prix' => 60 ],
|
||||
'libération' => ['frequence' => 'quotidien', 'type' => 'actualité', 'prix' => 190],
|
||||
];
|
||||
|
||||
$tabMagazinesAbonne = ['le monde', 'le monde diplomatique'];
|
||||
```
|
||||
|
||||
|
||||
1. Afficher sur une ligne le nom de tous les magazines triés par ordre alphabétique et séparés par des virgules, sans faire de boucle.
|
||||
Vous utiliserez des fonctions déjà existantes telles que [implode](https://www.php.net/manual/en/function.implode.php), [sort](https://www.php.net/manual/en/function.sort.php) et [array_keys](https://www.php.net/manual/en/function.array-keys.php) que vous trouverez dans le manuel php.
|
||||
2. Afficher séparés par des virgule les noms des quotidiens (et uniquement ceux-ci).
|
||||
3. Afficher les magazines exactement de la façon suivante en supposant qu’il peut y avoir beaucoup de magazines et beaucoup de propriétés associées :
|
||||
- le monde (quotidien, actualité, 220)
|
||||
- le point (hebdo, actualité, 80)
|
||||
- causette (mensuel, féministe, 180)
|
||||
- politis (hebdo, opinion, 100)
|
||||
- le monde diplomatique (mensuel, analyse, 60)
|
||||
4. En utilisant le tableau `$tabMagazinesAbonne` contenant le nom des magazines d’un abonné, calculer le prix total de son abonnement.
|
||||
|
||||
### Ex7
|
||||
On reprend l'exercice 3.
|
||||
|
||||
1. Ajouter une colonne de clé `Imc` aux personnes du tableau `$data`. On utilisera la fonction
|
||||
[array_map](https://www.php.net/manual/fr/function.array-map.php).
|
||||
2. Trier `$data` par ordre croissant d'imc. On utilisera la fonction [usort](https://www.php.net/manual/fr/function.usort.php).
|
||||
3. Calculer l'imc moyen de l'ensemble des personnes. On utilisera la fonction [array_reduce](https://www.php.net/manual/fr/function.array-reduce.php).
|
||||
|
||||
|
||||
### Ex8
|
||||
1. Allez voir la page manuel PHP de [scandir](https://www.php.net/manual/en/function.scandir).
|
||||
Quel(s) sont ses arguments ? Que renvoie-t-elle ?
|
||||
2. Utilisez scandir pour afficher des liens vers les autres fichiers de votre dossier public_html. On rappelle
|
||||
que la balise html `a` permet de créer des hyperliens.
|
||||
3. Utilisez la méthode [str_ends_with](https://www.php.net/manual/en/function.str-ends-with.php) pour n’afficher que les scripts PHP.
|
||||
|
||||
Par ailleurs, une liste des fonctions sur les chaînes de caractères est disponible [ici](https://www.php.net/ref.strings).
|
||||
Reference in New Issue
Block a user