PHP : les variables
Noter ce cours :
Liens sponsorisés :
Définition et présentation
Afficher du texte c'est bien beau, mais si il y a une chose essentielle dans tout langage de programmation qui se respecte, ce sont bien les variables. Qu'est-ce qu'une variable ? déjà rien qu'au nom, on peut penser qu'il s'agit quelque chose qui va changer ! Et c'est bien de ça qu'il s'agit !
Une variable est une zone mémoire qui va contenir des données, ces données pourront changer au fil du temps. Vous devez sûrement vous demander à quoi cela va bien nous servir dans nos applications PHP, mais j'y viens !
Imaginions que vous souhaitiez afficher le prénom du visiteur, prénom que ce même visiteur aura renseigné dans un formulaire. Vous ne connaissez pas le prénom de ce visiteur tant qu'il ne l'a pas renseigné, donc vous ne pouvez pas l'afficher directement via ceci par exemple :
<?php
echo 'prénom';
?>
Pour pouvoir afficher le prénom du visiteur, il faut que celui-ci le renseigne. On verra plus bas sur cette page comment récupérer des données provenant de formulaires. Ici, on va supposer que le prénom est "Anthony". Ce prénom sera stocké dans une variable, et c'est la valeur de cette variable que nous allons afficher ensuite (j'espère que vous suivez toujours) ! Le code basique devient le suivant :
<?php
$prenom = 'Anthony';
echo $prenom; //affiche "Anthony"
?>
Les guillemets (simples ou doubles) dans le echo sont ici inutiles quand vous affichez une variable. Elles peuvent même avoir un effet non voulu. En effet, tout ce qui se trouve entre guillemets simples (apostrophes) n'est pas remplacé par PHP (au contraire des guillemets doubles). Nous verrons plus loin comment utiliser ces propriétés.
<?php
$prenom = 'Anthony';
echo '$prenom'; //affiche "$prenom"
echo '$prenom vaut :'.$prenom; //affiche "$prenom vaut : Anthony"
?>
Une variable est constituée d'un nom de variable et d'une valeur. Pour l'exemple que j'ai utilisé ci-dessus, le nom de la variable est "prenom" et la valeur est "Anthony". Une variable commence toujours par le signe dollar $ suivi d'une lettre ou d'un underscore _ (touche 8 du pavé alphanumérique)
Types de variables
Le langage PHP n'est pas un langage très typé, c'est à dire qu'une variable peut être alternativement un nombre, une chaîne de caractères ou que sais-je encore ! Voici les principaux types de données en PHP (cela ne changera presque rien pour vous au niveau de la syntaxe, mais il est bon de les savoir. Notez que les noms de variables pris en exemple ainsi que leurs valeurs sont purement arbitraires) :
- Chaîne de caractères : la valeur est délimitée par des guillemets (simples ou doubles, on privilégiera les simples pour une question de rapidité) :
<?php
$prenom = 'Anthony';
?> -
Un nombre : on enlève les guillemets cette fois, cela permet de dire à PHP qu'il s'agit d'un nombre (qu'il soit entier ou flottant) :
<?php
$nombre = 7;
$nombre = 3.02;
?> - Un booléen : les variables booléennes peuvent prendre deux valeurs : la valeur TRUE (vrai) et la valeur FALSE (faux). Elles peuvent être utiles pour savoir par exemple si une option est activée :
<?php
$afficher_options = FALSE; //on n'affichera pas les options
$utiliser_cache = TRUE; //on utilisera un cache
?> - Le type objet : nous n'allons pas en parler pour l'instant, sachez qu'il s'agit d'un type spécial que l'on utilise uniquement avec des classes. Tout ceci ne vous parle pas encore, c'est normal.
Les opérateurs de calcul
PHP sait heureusement faire des calculs. Les symboles utilisés (appelés opérateurs) pour effectuer des calculs sont les suivants :
Opérateur | Signification |
+ | Addition |
- | Soustration |
* | Multiplication |
/ | Division |
% | Division entière (modulo) |
Voici quelques exemples simples d'utilisation des opérateurs (il en existe d'autres que nous verrons plus loin au fur et à mesure des exemples) :
<?php
$entier = 7;
$flottant = 2.5;
$somme = 4 + 5; //$somme vaut 9
$multiplic= 2*5; //$multiplic vaut 10
$division = 9/3; //$division vaut 3
$modulo = 10 % 3 //$modulo vaut 1
$multi_variables = $entier * $flottant; //7 * 2.5 = 17.5 donc $multi_variables vaut 17.5
?>
Les variables de formulaires et d'adresses web :
Ne vous est-il jamais arrivé de tomber sur des pages ayant des url à rallonge de ce style ? : page.php?param1=valeur¶m2=autre_valeur (et ainsi de suite)
PHP va vous permettre de récupérer le nom et la valeur des paramètres qui seront dans votre url si il y en a. Ceci est très pratique par exemple pour transmettre des variables et valeurs de page en page (exceptionnellement, car nous verrons qu'il existe un moyen plus efficace pour faire ceci plus loin dans notre approfondissement du PHP).
Avant d'utiliser ce principe sur vos pages, il faut faire par contre attention à la transmission de variables. En effet, si vous faites des traitements sur ces variables (ou si vous utilisez leur valeur) il faut bien faire attention à certaines choses, notamment les suivantes :
- Si vous souhaitez afficher la valeur de la variable, il faut que si quelqu'un tape du code HTML dans la barre d'adresses, qu'il soit affiché et non considéré comme du code car n'importe qui peut mettre n'importe quoi (du javascript affichant une message box jusqu'à la récupération de cookies confidentiels sur le PC client).
- Si vous allez utiliser la valeur dans une requête de base de données (si vous ne savez pas ce qu'est une base de données pas de souci, on verra tout ça après), il faut protéger la requête en utilisant des fonctions de protection comme mysql_real_escape_string() pour une base de données MySQL.
Imaginions que vous souhaitiez maintenant proposer un service d'affichage de prénom à des webmasters. Ils appelleront une page de votre site avec des paramètres dans l'adresse, et votre page renverra le prénom qui est dans l'url. Prenons un exemple d'url :
http://votresite.com/service.php?prenom=valeur&style=1 où valeur correspondra à la valeur du prénom !
Le nom des variables créées en PHP est très simple et commence par $_GET. Ici, en appelant cette page, PHP créera une variable nommée $_GET['prenom'] qui portera la valeur 'valeur' ainsi qu'une variable $_GET['style'] qui portera la valeur '1'. Attention, ceci ne sera pas équivalent aux définitions de variables suivantes :
<?php
$_GET['prenom'] = 'X'; //un prénom n'importe lequel
$_GET['style'] = 1; //style qui est ici un entier
?>
En effet, vous pourriez bien vous dire que c'est la même chose, et ça l'est presque, il y a juste un tout petit détail dont il faut bien se rappeler : PHP considère les valeurs quelles qu'elles soient comme des chaînes de caractères !
Notre code est donc équivalent à ça :
<?php
$_GET['prenom'] = 'X'; //un prénom n'importe lequel
$_GET['style'] = '1'; //style qui est ici une chaîne de caractères
?>
Maintenant, si vous souhaitez faire des opérations sur ces variables, il faut tout d'abord vérifier qu'elles existent, sinon vous aurez une erreur, en effet si vous souhaitez par exemple afficher la valeur d'une variable qui n'existe pas, avec un PHP bien configuré vous obtiendrez une erreur de undefined variable. On utilise pour savoir si une variable existe, la fonction isset(). Si vous ne savez pas ce qu'est une fonction ce n'est pas bien grave, sachez juste que cette fonction renvoie un booléen VRAI si la variable existe, et FAUX sinon. Si nous souhaitons afficher le prénom, on regarde d'abord qu'il existe, on effectue ensuite un htmlentities() pour transformer un éventuel code html en sa valeur affichable (on empêche donc les failles de sécurité de ce style). Notre code devient celui-ci :
<?php
if(isset($_GET['prenom'])) //On vérifie que la variable $_GET['prenom'] existe
{
echo htmlentities($_GET['prenom']); //On affiche le prénom tout en l'ayant protégé des failles d'injection de code HTML
}
?>
Les variables $_GET font partie de ce qu'on appelle des variables superglobales. Cela ne vous dit rien pour l'instant, mais sachez qu'il s'agit de variables accessibles depuis n'importe où (on verra plus loin que les variables ne peuvent pas être utilisées partout, et bien les superglobales peuvent l'être, en gros voici une des différences majeures qui les séparent des autres). Bon c'est bien beau vous allez me dire les variables $_GET, mais ça ne fait pas forcément ce que vous voudriez. Si vous souhaitez récupérer l'âge d'un visiteur qu'il aura rentré dans une zone de texte via la méthode post d'un formulaire, il va falloir utiliser cette fois-ci les variables nommées $_POST. Le principe est exactement le même que pour les variables $_GET. Prenons l'exemple d'un formulaire en XHTML contenant un champ texte nommé "age". Le visiteur remplira son âge et on l'affichera à l'écran. Le code en XHTML est le suivant :
<form method="post" action="traitement.php">
<p><input type="text" name="age" /></p>
<p><input type="submit" value="Envoyer" /></p>
</form>
Le code en PHP est très simple et peut se résumer à ça :
<?php
if(isset($_POST['age']) AND ctype_digit($_POST['age']) AND $_POST['age'] > 0)
{
echo htmlentities($_POST['age']);
}
?>
N'ayez pas peur en voyant tout ce code. En fait, la première fonction isset(), vous savez à quoi elle sert :p je vous l'ai expliqué tout à l'heure. Concernant la fonction ctype_digit(), elle permet de vérifier que la variable est bien composée de chiffres et uniquement de chiffres (que la chaîne soit un entier donc). On pourrait dire "bah oui mais pourquoi ne pas utiliser la fonction is_int() qui permet de vérifier si un nombre est un entier" ? tout simplement car comme je vous l'ai expliqué plus haut, les variables de type $_GET et $_POST sont considérées comme des chaînes de caractères par PHP et non des nombres. Pour finir, on vérifie que l'âge soit un nombre positif. Si toutes ces conditions sont réunies, on affiche l'âge.
La concaténation :
La quoi ? n'ayez pas peur en voyant ce terme barbare. La concaténation est l'opération qui permet de "coller" deux valeurs de variables pour n'en former qu'une par exemple. En PHP, l'opérateur de concaténation est le point (.)
Pour cette partie, des exemples valent à mon avis mieux que de longs discours. Voyons comment afficher plusieurs variables à la suite ou encore compléter la valeur d'une variable déjà définie.
<?php
$nom = 'Dupont';
$prenom = 'Pierre';
echo $nom.$prenom; //va afficher "DupontPierre"
echo $nom.' '.$prenom; //va afficher "Dupont Pierre"
echo '$nom.$prenom'; //va afficher "$nom.$prenom"
echo '$nom$prenom'; //va afficher $nom$prenom
$nom .= $prenom; //est équivalent à $nom = $nom . $prenom
echo $nom; //affichera "DupontPierre"
$nom = 'Dupont';
$nom .= ' '.$prenom;
echo $nom; //affichera "Dupont Pierre"
?>
Je pense qu'on a fait le tour niveau exemples là :p
Chapitre suivant