integer
, string
...), chacun avec ses opérateurs.
if
, else
) et des boucles (while
, do while
, for
).
Un tableau (array) est « une liste de variables ». C'est une variable qui contient une séquence de valeurs.
Pourquoi ? Les variables sont souvent groupées : liste de choses, propriétés d'un élément.
Deux types : numérotés et associatifs.
array()
[]
// déclaration d'un tableau nommé $tab1 avec trois strings : 'ab', 'bc', 'cd'
$tab1 = array('ab', 'bc', 'ce');
// afficher la première valeur : index 0 !!!
echo $tab1[0];
// modifier une entrée
$tab1[2] = 'cd';
Autre façon de déclarer un tableau : $tab1 = ['ab', 'bc', 'cd'];
Deux choses étranges :
$tab = array(1, '2', 3.0, 'quatre');
echo $tab[0]; // affiche '1'
echo $tab[3]; // affiche 'quatre'
Qu'est-ce que ça affiche ?
<?php
$tab = array(1, -2, 3, -4, 5);
echo $tab[1];
Ils ne sont pas indexés avec un entier, mais avec une clé (un string).
// déclaration d'un tableau avec trois valeurs
$tab2 = array(
'nom' => 'Gonzalez', // on ajoute la clé et le symbole =>
'prenom' => 'Aldo',
'bureau' => 'C07'
);
// afficher la valeur de la clé 'bureau'
echo $tab2['bureau'];
N'oubliez pas :
=>
Trouvez les erreurs
<?php
tab = array('seance'-> 'CM2';
'prof'='AldoGL';
"salle" -> C24;
'heure' -> 8)
echo $tab(prof);
echo $tab[heure];
Pour l'afficher, le modifier, calculer la moyenne, etc.
Le plus simple : la boucle for
avec la fonction count()
// la fonction count() renvoie la taille du tableau
for ($i = 0; $i < count($tab); $i++) {
echo $tab[$i];
}
Encore une nouvelle boucle, mieux adaptée pour parcourir les tableaux : foreach
// parcourir un tableau (numéroté ou associatif)
foreach ($tab as $val) {
echo $val;
}
// parcourir avec la clé et la valeur
foreach ($tab as $cle => $val) {
echo $cle . ' est ' . $val . '<br>';
}
Pour parcourir et modifier les valeurs d'un tableau,
utilisez une boucle for
.
Pour afficher le contenu d'un tableau :
print_r()
var_dump()
(plus complet)Quelques fonctions pour chercher dans un tableau :
// le tableau $tab contient la valeur 'val' ?
in_array('val', $tab);
// le tableau $tab contient la clé 'cle' ?
array_key_exist('cle', $tab);
// renvoie la clé de la valeur 'val' (false s'il n'y en a pas)
array_search('val', $tab);
Quelle ligne affiche la valeur associée à la clé 'bureau' ?
<?php
$tab2 = array('nom' => 'Gonzalez',
'prenom' => 'Aldo',
'bureau' => 'C07');
echo array_search('bureau', $tab2); // (1)
echo array_search($tab2, 'bureau'); // (2)
echo $tab2['bureau']; // (3)
Autres fonctions pour les tableaux :
// ajouter la valeur 'val' à la fin de $tab
array_push($tab, 'val');
// supprimer la quatrième entrée de $tab
unset($tab[3]);
La liste complète de fonctions est [ici].
On peut imbriquer les tableaux : une entrée de tableau peut être un tableau elle-même
Par exemple, une liste d'éléments avec des propriétés :
$enseignants = array(
array('prenom' => 'Aldo', 'nom' => 'Gonzalez', 'bureau' => 'C07'),
array('prenom' => 'Ricardo', 'nom' => 'Uribe', 'bureau' => 'C05'),
array('prenom' => 'Anne', 'nom' => 'Lesme', 'bureau' => 'C02')
);
array_push($enseignants, array('prenom' => 'Hind', 'nom' => 'Hallabia', 'bureau' => 'C07'));
echo $enseignants[3]['nom']; // affiche 'Hallabia'
Les variables servent à manipuler des données simples dans un programme. Dès que ces données sont structurées, on les regroupe avec des tableaux.
Les tableaux sont donc très utilisés.
Pour structurer le code, on utilise les fonctions
Une fonction (function) est une suite d'instructions réutilisable qui peut renvoyer une valeur. Souvent, elle a des paramètres (arguments).
On déclare (crée) une fonction une fois, et on l'appelle (utilise) plusieurs fois.
Deux nouveaux mots-clés :
function
pour déclarer une fonctionreturn
pour renvoyer une valeur// déclaration d'une fonction
function ma_fonction($x, $y) {
return $x*$x + 2*$y;
}
// appel avec les valeurs 3 et 2.6
echo ma_fonction(3, 2.6);
Même si une fonction n'a pas de paramètres, les parenthèses sont nécessaires.
On donne des valeurs par défaut aux paramètres avec =
. [doc]
Trouvez les erreurs
<?php
fonction $array-to-string($arr) =
{
$str = '[ ';
for ($i = 0; $i < count($arr); $i++) {
$str = $str . $arr[$i] . ' ';
}
$str = $str . ' ]';
};
$tab = array('abc', 'def', 'ghi', 'jkl');
echo $array-to-string[$tab];
PHP propose beaucoup (≥ 10 000) de fonctions déjà faites : include()
, var_dump()
, idate()
, print_r()
, in_array()
, array_key_exist()
, etc.
On ne peut pas connaître toutes ces fonctions. Cherchez sur Google ou sur la documentation de PHP pour trouver la fonction que vous voulez.
PHP déclare automatiquement plusieurs variables de type tableau : ce sont les variables superglobales.
Ces variables sont : $GLOBALS
, $_SERVER
, $_GET
, $_POST
, $_FILES
, $_COOKIE
, $_SESSION
, $_REQUEST
et $_ENV
.
On connaît la variable superglobale $_GET
.
Quand on utilise un formulaire avec la méthode get, on retrouve les données dans la variable $_GET
, qui est un tableau associatif (Voir TD #1)
On verra plus tard comment utiliser les superglobales $_POST
, $_COOKIE
et $_SESSION
.
Deux méthodes pour transmettre des données avec un formulaire : get et post.
Deux fichiers : formulaire.php et affichage.php
[...]
<form method="post" action="affichage.php">
<input type="text" name="un_texte">
<input type="submit" value="Valider">
</form>
</body>
</html>
[...]
<p>
Vous avez écrit <?php echo $_POST['un_texte']; ?> dans le formulaire.
</p>
</body>
</html>
En HTML, un formulaire peut contenir beaucoup de types de widgets différents : zones de texte, boîtes à sélection, boutons, cases à cocher, etc. Il y a beaucoup de formes de formulaires différents
<form method="post" action="affichage.php">
Nom :
<input type="text" name="user_name">
<input type="submit" value="Valider">
</form>
Le texte se trouve dans $_POST['user_name']
Encore mieux, avec la balise <label>
<form method="post" action="affichage.php">
<label for="nom">Nom :</label>
<input type="text" id="nom" name="user_name">
<input type="submit" value="Valider">
</form>
La valeur de l'attribut for
doit être la valeur de l'attribut id
de l'élément <input>
<form method="post" action="affichage.php">
<label for="mail">E-mail :</label>
<input type="email" id="mail" name="user_mail">
<input type="submit" value="Valider">
</form>
$_POST['user_mail']
contient l'adresse e-mail. Elle est validée avant la soumission.
<form method="post" action="affichage.php">
<label for="pwd">Mot de passe :</label>
<input type="password" id="pwd" name="password">
<input type="submit" value="Valider">
</form>
Le mot de passe est dans $_POST['password']
<form method="post" action="affichage.php">
<label for="msg">Message :</label>
<textarea id="msg" name="user_message"></textarea>
<input type="submit" value="Valider">
</form>
Le texte est dans $_POST['user_message']
. Attention, <textarea>
n'est pas une balise auto-fermante
<form method="post" action="affichage.php">
<input type="radio" name="color" id="radio_1" value="red">
<label for="radio_1">Rouge</label>
<input type="radio" name="color" id="radio_2" value="green">
<label for="radio_2">Vert</label>
<input type="radio" name="color" id="radio_3" value="blue">
<label for="radio_3">Bleu</label>
<input type="submit" value="Valider">
</form>
$_POST['color']
vaut 'red'
, 'green'
ou 'blue'
<form method="post" action="affichage.php">
<input type="checkbox" name="pear" id="fruit_1">
<label for="fruit_1">Poires</label>
<input type="checkbox" name="apple" id="fruit_2">
<label for="fruit_2">Pommes</label>
<input type="checkbox" name="orange" id="fruit_3">
<label for="fruit_3">Oranges</label>
<input type="submit" value="Valider">
</form>
$_POST['pear']
vaut 'on'
si la case «Poires» a été cochée. Sinon, cette variable n'est pas définie
<form method="post" action="affichage.php">
<label for="card">Type de carte :</label>
<select id="card" name="usercard">
<option value="visa">Visa</option>
<option value="mc">Mastercard</option>
<option value="amex">American Express</option>
</select>
<input type="submit" value="Valider">
</form>
$_POST['usercard']
vaut 'visa'
, 'mc'
ou 'amex'
.
Ne faites pas confiance aux données envoyées par l'utilisateur :
Vérifiez toujours qu'une variable existe avec la fonction isset()
if (isset($_POST['name'])) {
// faire quelque chose
} else {
echo 'L\'utilisateur n\'a pas donné son prénom.';
echo '<a href="formulaire.php">Retour</a>';
}
Obligatoire pour les cases à cocher !
Vérifiez aussi que les valeurs soient cohérentes :
if (isset($_POST['number'])) {
if ($_POST['number'] <= 100) {
// faire quelque chose
} else {
echo 'Nombre trop grand. <a href="formulaire.php">Retour</a>';
}
} else {
echo 'Pas de nombre. <a href="formulaire.php">Retour</a>';
}
L'utilisateur peut entrer un script dans un formulaire pour accéder aux mots de passe, bases de données, etc.
Avant d'afficher un texte saisi par l'utilisateur, passez la fonction htmlspecialchars()
:
<p>
Message enregistré : <?php echo htmlspecialchars($_POST['msg']); ?>
</p>
Vérifiez toujours les données d'un formulaire :
On peut valider un champ avant d'envoyer les données avec l'attribut pattern
et une expression régulière [lien]