242 lines
8.7 KiB
Markdown
242 lines
8.7 KiB
Markdown
|
||
# 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.
|
||
|
||
### Ex62
|
||
Sur les anciens cahiers d'écoliers, on trouvait sur la courveture la liste des tables de multiplications
|
||
<div align="center">
|
||
<img src="img/cahier.jpg">
|
||
</div>
|
||
|
||
Écrire un script php qui affiche les tables correspondantes.
|
||
|
||
### 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).
|