Formation PHP

Introduction PHP

De quoi ai je besoin ?

Téléchargements

  1. Notepad ++
  2. Wamp

Les bases de PHP

<?php
phpinfo();
?>
Voir le résultat

Afficher du texte avec echo

<?php
echo "Bonjour";
?>

Les commentaires

<?php
// Commentaire sur 1 ligne
# Commentaire sur une ligne
/*
Commentaires sur plusieurs lignes
*/
?>

Les caractères d'échappement

<?php
echo " Bonjour, \"<b>Jean</b>\" , nous te souhaitons une bonne journee "; // Placer le caractère d'échappement devant le caracrtère guillemet
?>
Bonjour, "Jean" , nous te souhaitons une bonne journee

Les séquences d'échappement, quant à elles, font de la mise en page

séquence effet
\t insère une tabulation
\r effectue un retour chariot
\n effectue un retour à la ligne

si vos séquences d'échappement ne fonctionnent pas, encadrez votre code des balises HTML <pre> et </pre>.

Les constantes

Contrairement à une variable, une constante ne peut pas être redéclarée.

Pour définir des constantes, on utilise la fonction define()

Par convention, un nom de constante s'écrit en majuscule .

Ne pas oublier d'entourer de ". ." le nom de la constante, sinon elle s'affichera comme du texte. 

<?php
define('CONSTANTE', 'toto');
// Affichage d'une constante, ne pas mettre de $
echo CONSTANTE;
?>

Exemple

Constantes prédéfinies

Il existe beaucoup de constantes prédéfinies, en voici quelquees unes

__FILE__

Le chemin complet de la page en cours 
<?php echo __FILE__; ?>
/home/conseilw/www/formation/php/01-bases-php.php

__LINE__

Le numéro de la ligne de la constante :
<?php echo "la ligne ", __LINE__, " ne contient aucune erreur ;-)"; ?>
la ligne 124 ne contient aucune erreur

PHP_VERSION

<?php echo "la version de l'analyseur PHP est la : ", PHP_VERSION; ?>
la version de l'analyseur PHP est la : 5.2.13-pl1-gentoo

PHP_OS

<?php echo "le système d'exploitation du serveur est ", PHP_OS; ?>
le système d'exploitation du serveur est Linux

Les variables, initialyser une variable

Variable:

Définition:
C'est une petite information stockée en mémoire temporairement. Ca n'a pas une grande durée de vie.
En PHP, la variable (l'information) existe tant que la page est en cours de génération.
Dès que la page PHP est générée, toutes les variables sont supprimées de la mémoire car elles ne servent plus à rien.
Ce n'est donc pas un fichier qui reste stocké sur le disque dur mais une petite information temporaire.

Ce qu'il faut retenir, c'est qu' une variable est toujours constituée de 2 choses :

L'affectation se fait toujours de la droite vers la gauche

A = B, A va prendre la valeur de B
A = A + B, A va prendre la valeur de A+B

<?php

$a = $a+1 ; // identique à la ligne ci dessous
$a ++ ; // Permet d'incrémenter
$a -- ; // Permet de décrémenter

$a = ($b<100);
$a = true; // Le résultat est égal à true

$a = 10;
$a.= 30; // Permet de concaténer, le résultat serait 1030

// double - Tres gros chiffre
$Prenom="toto"; // string
?>

Exemple

Les types de données

Une variable peut contenir différents types de données

Chaînes de caractère

Une chaîne (ou séquence) de caractères doit être encadrée de guillemets :

- simples (' ') si elle ne contient rien qui nécessite d'être échappé ;
- doubles (" ") si l'on veut que les séquences d'échappement et les variables qu'elle contient soient interprétées (on parle de "substitution de variables") :

<?php
$Prenom="toto"; // Variable string, chaîne de caractères
$Poste="fonctionnaire";
echo $Prenom;
echo $Poste;
?>

Entiers

Un entier (integer, ou int) est un nombre de l'ensemble des entiers naturels {..., -2, -1, 0, 1, 2, ...}.
On peut l'exprimer de trois manières :

<?php
$a = 1234; // nombre entier en base décimale
$a = 02322; // le même en base octale, préfixé 0
$a = 0x4D2; // le même en base hexadécimale, préfixé 0x
?>

<?php
$Valeur=123; // Variable integer, c'est un entier
$Valeur1=1000/$Valeur;
$Valeur4=$Valeur+$Valeur1;
@$b = 10/0; // En cas d'erreur, le @ permet de ne pas afficher de message d'erreur
echo @$b;
?>

Réels

Un nombre réel (float, ou double), appelé aussi "à virgule flottante", peut être exprimé de deux manières :

<?php
$a = 1.234;
$a = 1.2e3; // Notation scientifique
?>
Attention:
Il faut mettre un "." et non une ","

Boolean

<?php
$Homme=true; // Boolean, TRUE
$Femme=false; // Boolean, TRUE
// Ca sert à exprimer si quelque chose est vrai (true en anglais), ou si c'est FAUX (false en anglais)
echo $Homme;
?>

Les différents types

 is_int ($var )

Détermine le type de variable

Fonction retourne TRUE si la variable est :
is_array() un tableau
is_bool() de type booléen
is_double()
alias de is_float()
et de is_real()
un nombre réel, ou à virgule flottante
is_int()
alias de is_long()
un nombre entier
is_null() sans valeur
is_numeric() un nombre, ou une chaîne numérique
is_object() un objet
is_resource() une ressource PHP (pointeur, requête SQL...)
is_scalar() une variable scalaire
is_string() une chaîne de caractère
<?php
$a=$a+$b; // La variable $a a la valeur de la somme de $a + $b
$a+=$b;
$a-=$b; // La variable $a a la valeur de $b
$a*=$b;
$a/=$b;

$a.=$b;
$a=$a.$b; // La variable $a a la valeur de la concaténation de $a et $b

$a++; // Augmenter de 1
$b--; // Diminuer de 1
?>

Exercice

Tester le type de variable

gettype($var)

<?php
$Prenom="toto"; // Variable string
$Valeur=123; // Variable integer
// Affiche le type de la variable
echo gettype($Prenom);
echo "<br />";
echo gettype($Valeur);
?>

Exercice gettype()

Faire un calcul avec PHP

<?php
$a=1+5;
$b=10-$a;
$c=10*3;
$d=$b/5;
echo $a;
?>

Les opérateurs arithmétiques

signe exemple description
+ (addition) $a + $b additionne $a et $b
- (soustraction) $a - $b soustrait $b de $a
* (multiplication) $a * $b multiplie $a par $b
/ (division) $a / $b divise $a par $b
% (modulo) $a % $b reste de la division de $a par $b

Incrémentation décrémentation

++ Ajoute 1 $i ++ (n'est rien d'autre que l'abbréviation de $i=$i+1)
-- Soustrait 1 $i -- (equivalentà $i=$i-1)
<?php
$quantite=15;
$prixht=12;
$tva=1.196;
$totalht=$quantite*$prixht;
$totalttc=$totalht*$tva;
$montantva=$totalttc-$totalht;
echo "Le montant HT est de $totalht <br />";
echo "Le montant TTC est de $totalttc <br />";
echo "Le montant de TVA est de $montantva";
?>

Mettre en forme du PHP avec HTML

Insérer des balises HTML dans PHP

<?php
echo "<strong>Bonjour toto</strong>";
?>

Concaténation

Concaténer des chaines de caractères et des variables
En PHP, on utilise le . pour concaténer

<?php
$tauxeuro=6.5957;
echo "le taux de l'euro arrondi est round($tauxeuro,2)"; // Sans concaténation
echo "<br />";
echo "le taux de l'euro arrondi est " .round($tauxeuro,2); // Avec concaténation
?>

Exemple

<?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"
?>

Concaténation avec du HTML

<?php
$tauxeuro=6.5957;
echo "<strong>le taux de l'euro arrondi est</strong> " .round($tauxeuro,2);
?>

Exercices

Fonctions PHP

date()

Caractère Signification Exemples de valeurs possibles :
Jour
j Jour du mois sur deux chiffres sans les zéros initiaux 1 à 31
d Jour du mois sur deux chiffres avec un zéro initial en fonction du jour 01 à 31
l (L minuscule) Jour de la semaine en anglais Sunday à Saturday
w Jour de la semaine au format numérique 0 (dimanche) à 6 (samedi)
z Jour de l'année 0 à 366
Semaine
W Numéro de semaine dans l'année (les semaines commencent le lundi) Exemple : 42 (la 42ème semaine de l'année)
Mois
F Mois, textuel, version longue; en anglais, comme January ou December January à December
m Mois au format numérique, avec zéros initiaux 01 à 12
n Mois sans les zéros initiaux 1 à 12
t Nombre de jours dans le mois 28 à 31
Année
L Est ce que l'année est bissextile 1 si bissextile, 0 sinon.
Y Année sur 4 chiffres Exemples : 1999 et 2003
y Année sur 2 chiffres Exemples : 99 et 03
Heure
a Ante méridien et Post méridien (minuscules) am ou pm
A Ante méridien et Post méridien (majuscules) AM ou PM
g Heure (format 12h) sans les zéros initiaux 1 à 12
G Heure (format 24h) sans les zéros initiaux 0 à 23
h Heure (format 12h) avec les zéros initiaux 01 à 12
H Heure (format 24h) avec les zéros initiaux 00 à 23
s Secondes avec zéros initiaux 00 à 59
i Minutes avec zéros initiaux 00 à 59
I (i majuscule) l'heure d'été est activée ou pas 1 si oui, 0 sinon.  
<?php
echo date("d/m/Y"); // Affiche la date du jour
echo "Il est " . date("H:i:s") ; // Affiche l'heure
?>

Exercices date()

Le timestamp PHP

Un timestamp, c'est un nombre.
C'est le nombre de secondes écoulées depuis le 1er Janvier 1970 à Minuit.

Pourquoi depuis le 1er Janvier 1970 à Minuit ? C'est symbolique, il fallait bien prendre un point de départ.
En fait, ça représente le début de l'époque où le système d'exploitation Unix a été créé.

Le 1er Janvier 1970 à Minuit, le timestamp avait pour valeur 0. Aujourd'hui, beaucoup beaucoup de secondes se sont écoulées

Pour afficher le timestamp de la seconde actuelle, on utilise la fonction

time()

<?php
     echo time(); //Affiche le nombre de secondes écoulées depuis le 1er janvier 1970
?>

Le timestamp avec la fonction date

Il est possible de fournir un second paramètre à date (après les lettres) : le timestamp sur lequel vous voulez obtenir des informations.

Par défaut, date utilise le timestamp actuel : elle renvoie donc l'heure actuelle, le jour actuel etc...
Mais si vous lui donnez un timestamp, elle fera des calculs sur ce moment-là.

Allez, pour faire un test grandeur nature, je vous donne le timestamp qu'il était au moment où j'ai écrit ces lignes

<?php
$timestamp1=1261774471; // Timestamp affiché quand j'ai écris ce cours
echo date('d/m/Y',$timestamp1);
?>

Exemple
Lorsque vous écrirez une news, il vous suffira d'enregistrer juste le timestamp, et vous serez capables grâce à ce nombre de ressortir toutes les infos possibles et imaginables dessus : le jour où la news a été postée, l'heure qu'il était etc... C'est donc très très puissant !

Récupérer le timestamp à partir d'une date

Enfin, une dernière chose qu'il peut être très utile de savoir faire : vous aimeriez connaître le timestamp qu'il était le 5 Février 1998 à 13h 45min 26s.

Pour récupérer le timestamp correspondant, on va utiliser la fonction mktime. On va lui donner en paramètre une date, et elle va nous ressortir le timestamp correspondant.

Cette fonction peut prendre pas mal de paramètres, en voici la liste dans l'ordre :

$timestamp = mktime(heure, minutes, secondes, mois, jour, an, heure d'hiver);
Dans la pratique, vous pouvez oublier le dernier paramètre (heure d'hiver) qui ne vous sera pas utile en général.
Sachez qu'il faut mettre 1 si l'heure d'hiver est activée, 0 si elle ne l'est pas.
Mais passons. Si on enlève l'heure d'hiver pour éviter de s'embrouiller, il reste 6 paramètres possibles qu'on retiendra :

mktime(heure, minutes, secondes, mois, jour, an)

Exemple
Je veux toujours le timestamp du 5 Février 1998 à 13h 45min 26s
<?php
$vieux_timestamp = mktime(13, 45, 26, 2, 5, 1998);
echo 'Le timestamp du 05/02/1998 à 13h 45min 26s était : ' . $vieux_timestamp;
?>

getdate()

Retourne la date/heure

array  getdate ( int   timestamp )

getdate retourne un tableau associatif contenant les informations de date et d'heure du timestamp timestamp (lorsqu'il est fourni, sinon, le timestamp de la date/heure courante), avec les champs suivants :

Clé Description Exemple de valeur retournée
"seconds" Représentation numérique des secondes 0 à 59
"minutes" Représentation numérique des minutes 0 à 59
"hours" Représentation numérique des heures 0 à 23
"mday" Représentation numérique du jour du mois courant 1 à 31
"wday" Représentation numérique du jour de la semaine courante 0 (pour Dimanche) à 6 (pour Samedi)
"mon" Représentation numérique du mois 1 à 12
"year" Année, sur 4 chiffres Exemples: 1999 ou 2003
"yday" Représentation numérique du jour de l'année 0 à 365
"weekday" Version texte du jour de la semaine Sunday à Saturday
"month" Version texte du mois, comme January ou March January à December
0 Nombre de secondes depuis l'époque Unix, similaire à la valeur retournée par la fonction time et utilisée par date . Dépend du système, typiquement de -2147483648 à 2147483647 .
Array ( [seconds] => 6 [minutes] => 38 [hours] => 7 [mday] => 5 [wday] => 0 [mon] => 2 [year] => 2012 [yday] => 35 [weekday] => Sunday [month] => February [0] => 1328423886 )
<?php
$today = getdate();
print_r($today);
?>

print_r affiche des informations à propos d'une variable, de manière à ce qu'elle soit lisible. Pour une chaîne, un entier ou un double, la valeur elle même sera affichée.

Pour les tableaux, les valeurs seront présentées dans un format qui montre les clés et les valeurs.

Gardez en tête que print_r place le pointeur de tableau à la fin du tableau. Utilisez reset pour le ramener au début.

mail()

mail ( $to , $subject , $message [, string $additional_headers [, string $additional_parameters ]] )

<?php
$message = "Line 1\nLine 2\nLine 3";
$Headers="From: webmaster@exemple.com";
mail('caffeinated@example.com', 'Mon Sujet', $message,$Headers);
?>

Fonctions Texte

strpos()

Trouve la position d'un caractère dans une chaîne

int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )

Retourne la position numérique de la première occurrence de needle dans la chaîne de caractères haystack.

Liste de paramètres

haystack

La chaîne dans laquelle on doit chercher.

needle

Si needle n'est pas une chaîne, il est converti en entier, et utilisé comme caractère de code ASCII correspondant.

offset

Le paramètre optionnel offset vous permet de spécifier à partir de quel caractère dans haystack vous souhaitez commencer la recherche. La position retournée sera toujours relative au début de la chaîne haystack.

Valeurs de retour

Retourne la position, sous la forme d'un entier. Si needle n'est pas trouvé, strpos() retournera FALSE.

<?php
$Chaine="Bonjour à tous";
$Affiche=strpos($Chaine,"j");
echo $Affiche;
?>
3

substr()

substr ( string $string , int $start [, int $length ] )

Retourne la partie extraite de la chaîne dans le segment de string défini par start et length ou FALSE si une erreur survient

string
La chaîne d'entrée.

start
Si start est positif, la chaîne retournée commencera au caractère numéro start, dans la chaîne string. Le premier caractère est numéroté zéro. Actuellement, dans la chaîne 'abcdef', le caractère à la position 0 est 'a', le caractère à la position 2 est 'c', et ainsi de suite.

Si start est négatif, la chaîne retournée commencera au caractère numéro start à compter de la fin de la chaîne string.

Si string est plus petit ou égal à start caractères de long, FALSE sera retourné.

length
Si length est fourni et est positif, la chaîne retournée contiendra au plus length caractères, en commençant à partir du caractère start (en fonction de la taille de la chaîne string).

Si length est fourni et négatif, alors le même nombre de caractères sera omis, en partant de la fin de la chaîne string. Si start représente une position hors de la chaîne, une chaîne vide sera retournée.

Si le paramètre length est fourni et vaut 0, FALSE ou NULL, une chaîne vide sera retournée.

Si length est omis, la sous chaine commençant à partir de start jusqu'à la fin sera retournée.

Exemple avec start négatif
<?php
$rest = substr("abcdef", -1);    // retourne "f"
$rest = substr("abcdef", -2);    // retourne "ef"
$rest = substr("abcdef", -3, 1); // retourne "d"
?>

Exemple avec length négatif
<?php
$rest = substr("abcdef", 0, -1);  // retourne "abcde"
$rest = substr("abcdef", 2, -1);  // retourne "cde"
$rest = substr("abcdef", 4, -4);  // retourne ""
$rest = substr("abcdef", -3, -1); // retourne "de"
?>

<?php
echo substr('abcdef', 1);     // bcdef
echo substr('abcdef', 1, 3);  // bcd
echo substr('abcdef', 0, 4);  // abcd
echo substr('abcdef', 0, 8);  // abcdef
echo substr('abcdef', -1, 1); // f

// Accéder à un simple caractère dans une chaîne
// peut également être réalisé en utilisant des crochets
$string = 'abcdef';
echo $string[0];                 // a
echo $string[3];                 // d
echo $string[strlen($string)-1]; // f
?>

explode()

array explode ( string $delimiter , string $string [, int $limit ] )

Coupe une chaîne en segments

<?php
// Exemple 1
$Texte = "Bonjour tout le momde ";
$pieces = explode(" ", $Texte);
echo $pieces[0]; // Bonjout
echo $pieces[1]; // tout
?>
Bonjourtout

Exercice

str_replace()

str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

str_replace — Remplace toutes les occurrences dans une chaîne

search

La valeur à chercher, autrement connue comme le masque. Un tableau peut être utilisé pour désigner plusieurs masques.

replace

La valeur de remplacement à substituer aux valeurs trouvées. Un tableau peut être utilisé pour désigner plusieurs valeurs de remplacement.

subject

La chaîne de caractères ou le tableau sur lequel on va effectuer la recherche et le remplacement, aussi connu sous le nom de haystack.

Si subject est un tableau, alors le remplacement se fera sur chaque élément de celui-ci, et la valeur retournée sera aussi un tableau.

count

Si fournie, cette variable contiendra le nombre de remplacements effectués.

<?php
$row_Factures['Societe']=str_replace("<br />"," ",$row_Factures['Societe']); // str_replace recherche la chaîne de caractère "<br />" et la remplace par " " rien
echo $row_Factures['Societe'];
?>

Fonctions mathématiques

round()

round($var,Nb_decimales)

Permet d'arrondir une valeur numérique

<?php
$Prix=18.4542215;
echo round($Prix,2); // Arrondi la variable prix à 2 décimales
?>

Exercices calculs PHP

srand()

srand permet d'initialiser le générateur de nombres aléatoires.

rand()

rand permet de générer un nombre aléatoire

<?php
srand(); // initialiyser la variable
$rand1=rand(0,5); // Nombre aléatoire 1
$rand2=rand(6,9); // Nombre aléatoire 2
$resultat=$rand1+$rand2; // Calculer la somme

echo "Calculer la somme de ces valeurs " .$rand1 ." + " .$rand2 ." Le total est " .$resultat;

?>

Exercice

Créer une fonction avec PHP

PHP permet de créer ses fonctions personnelles

function Nomfonction ($parametre, ...)
{
   // Les commandes sont placées ici
   return $resultat
    // Si la fonction retrourne une valeur, indiquez là dans la commande return
}
echo Nomfonction(valeur);

Avec un paramétre

<?php
function ConvDollar($prix) {
$Calcul=$prix*1.341; // Taux de change le 30 Décembre 2009 1.341
return $Calcul;
}
echo ConvDollar(10.51); // 10.54 est la valeur a calculé avec la fonction
?>

Avec 2 paramétres

<?php
function ConvDollar($prix,$taux) { // 2 paramétres
$Calcul=$prix*$taux;
return $Calcul;
}
echo ConvDollar(10.51,1.341); // 10.54 est la valeur a calculé avec la fonction, le taux de change le 30 Décembre 2009 était 1.341
?>
14.09391

Exemple de fonction

include() et require()

require()

require('file.inc.php')

<?php
require('erreur.incphp'); // Coupe l'exécution du script PHP si le fichier à inclure n'a pu être inclus
?>

La fonction require() appelle et exécute un code contenu dans un fichier externe.

require permet à la différence d'include de couper l'exécution du script PHP si le fichier à inclure n'a pu être inclus.

En cas d'erreur, le script se coupera complétement

Exemple

require_once()

require_once('file.inc.php');

L'instruction require_once() est identique à require() mise à part que PHP

Vérifie si le fichier a déjà été inclus et si c'est le cas, ne l'inclut pas une deuxième fois.

 

<?php
require_once('erreur.incphp'); // Vérifie si le fichier a déjà été inclus et si c'est le cas, ne l'inclut pas une deuxième fois
?>

include()

include('file.inc.php')

 

La fonction include() est similaire à require(), à ceci près qu'avec include() le traitement ne s'interrompra pas en cas d'erreur, et le reste de la page s'affichera normalement.

En cas d'erreur avec include() le script continuera de s'éxecuter, il n'émettra qu'une alerte de type E_WARNING

<?php
include('erreur.incphp'); // Cette page n'existe pas
?>

Structures conditionnelles

if else

if(condition) {
    instruction;
}
else{
    instruction;
}

// Plusieurs conditions
if(condition1 AND condition2) {
    instruction;
}
elseif (Condition){
    instruction;
}
else {
    instruction;
}
<?php
$gender="Homme";
if($gender=="Homme"){
    echo "Bonjour Monsieur";
}
else{
    echo "Bonjour Madame";
}
?>
Exercices

Tester le type de $variable1 avec pour valeur

  1. toto
  2. 10
  3. true

Si vous ne vous en rappelez plus

Corrigé
<?php
$variable1="toto";
if(is_string($variable1)){
   echo "La variable est du texte: " .gettype($variable1);
}
elseif(is_integer($variable1)) {
   echo "La variable est un entier: " .gettype(variable1);
}
else{
   echo "La variable est une booléenne";
}
?>

Les opérateurs de comparaison

signe exemple retourne TRUE si :
== (égal) $a == $b $a est égal à $b
=== (identique) $a === $b $a est égal et du même type que $b (PHP4 seulement)
!= (différent) $a != $b $a est différent de $b
<> (différent) $a <> $b $a est différent de $b
< (inférieur) $a < $b $a est inférieur à $b
> (supérieur) $a > $b $a est supérieur à $b
<= (inférieur ou égal) $a <= $b $a est inférieur ou égal à $b
>= (supérieur ou égal) $a >= $b $a est supérieur ou égal à $b

Les opérateurs logiques

Mot-clé Signification Symbole équivalent Explication Exemple retourne TRUE si :
AND Et && Vérifie que toutes les conditions sont réalisées

$a && $b

$a and $b

$a et $b retournent TRUE
OR Ou || Vérifie qu'une des conditions est réalisée

$a || $b

$a or $b

$a ou $b retourne TRUE
xor OU exclusif   Vérifie qu'une et une seule des conditions est réalisée $a xor $b $a ou $b (exclusivement) retourne TRUE
! NON logique   Inverse l'état d'une variable booléenne (retourne la valeur 1 si la variable vaut 0, 0 si elle vaut 1) ! $a $a retourne FALSE

if else elseif

if(condition) {
    instruction;
}
elseif(condition){
   instruction;
}
else{
    instruction;
}

Exercices if else

switch

switch($variable){
case "Gerard":
   instruction;
   
break;

case
"Jeanne":
   instruction;
   break;

case
"Robby":
   instruction;
   break;

default:
   instruction;
  
 break;
}
<?php
$formation="PAO";
switch($formation){

case "Bureautique":
   $prix=400;
   echo "Le prix est de " .$prix ." &#8364;";
   break;
case "PAO":
   $prix=450;
   echo "Le prix est de " .$prix ." &#8364;";
   break;
case "Web":
   $prix=500;
   echo "Le prix est de " .$prix ." &#8364;";
   break;
default:
   $prix=0;
   echo "le prix est de " .$prix ." Le produit n'est pas en vente";
   break;
}
?>

Exercice switch

Tester si une variable est bien définie avec isset

isset($variable)

La fonction isse t() verifie si une variable est bien définie,
ce n'est que dans ce cas qu'elle renvoie la valeur vrai (true)
Dans le cas inverse, le résultat du test est false

<?php
$var="toto";
$var1=1;
if(isset($var) && isset($var1)){
    echo "La premiere variable est bien définie, elle est de type " .gettype($var) ."<br />";
    echo "La seconde variable est bien définie, elle est de type " .gettype($var1);
}
else{
    echo "Erreur, la variable n'est pas définie";
}
?>

Exercices isset()

empty($variable)

Détermine si une variable est vide
La fonction empty() retourne TRUE si la chaîne passée en argument est vide

<?php
$var="toto";
if(empty($var)){
    echo "Erreur, la variable a été testée avec empty() est vide";
}
else{
   echo "La variable n'est pas vide, elle est de type " .gettype($var);
}
?>
La variable n'est pas vide, elle est de type string

Exercice empty()

Les boucles

for

Cette boucle est très utile lorsque vous souhaitez incrémenter une variable sur une certaine plage de valeurs connue à l'avance

<?php
for ( initialisation; condition de continuité ; expression 3) {
  // Bloc d'instruction 1;
 // Bloc d'instruction 2;
}
?>
<?php
for($d=1;$d<11;$d++){ // Initialise la variable, condition de continuité, expression
echo $d;
}
?>

$i++   Incrémenter
$i--     Décrémenter

Exercice boucle for

while

Cette boucle qui est une des plus utilisées en PHP va vous permettre d'effectuer une ou plusieurs actions tant que la condition que vous placerez à l'intérieur des parenthèses sera vérifiée

C'est pour cela que, quel que soit le type de boucle (While ou For), il faut indiquer une condition.
Tant que la condition est remplie, les instructions sont réexécutées. Dès que la condition n'est plus remplie, on sort de la boucle

Pas sur de faire le bloc d'instruction si la condition est fausse

<?php
while(condition) {
// Bloc d'instruction
}
?>
<?php
$j=1;
while($j<7){
echo $j++;
}
?>

Il faut TOUJOURS s'assurer que la condition sera au moins remplie une fois.
Si elle ne l'est jamais, alors la boucle s'exécutera à l'infini !
PHP refuse normalement de travailler plus d'une quinzaine de secondes.
Il s'arrêtera tout seul s'il voit que son travail dure trop longtemps et affichera un message d'erreur.

Comment savoir lequel prendre quand je dois choisir entre un While et un For ?
While marche à tous les coups.
For ne marche que quand on a un nombre qui s'incrémente, comme on a fait ici. Donc For est parfois plus adapté, mais personne ne vous tuera si, comme moi, vous préférez utiliser un While tout le temps

Exercices boucle while

do while

Elle a des similitudes avec la boucle while.
Néanmoins, une différence de taille les séparent.
Reprenons notre exemple précédent avec la boucle while :

<?php
     $i = 0; //on définit la variable $i qui sera notre nombre que l'on incrémentera. Ici $i va commencer à 0
     while($i < 7)
     {
           echo $i.'<br />';

           $i++;
     }
?>

Vous constatez que si on initialise $i à 8, la boucle ne sera jamais exécutée, car dès l'analyse de la condition, 8 < 7 renverra FALSE (8 est bien inférieur à 7 ).

La boucle do-while permet
d'effectuer au moins une fois une opération, et si une condition est vraie, reboucler autant de fois que vous le souhaitez.

Avec le do, il sera au minimum exécuté une fois

<?php
     do
     {
           instruction 1;
           instruction 2;
     }
     while(condition);
?>
<?php
$i=8;
$j=7;
do
{
echo 'la boucle a bouclé une fois, même si la condition n\'a pas été respectée,<br />
la variable $i < n\'est pas inférieur à $j';
}
while ($i < $j);
?>
Exercices boucle do while

Les tableaux, array

Définition:

Il s'agit de variables qui peuvent contenir plusieurs valeurs.
On peut donc imaginer leur représentation sous forme d'un tableau.
Pour différencier les valeurs, pour savoir comment on va dire à PHP "je veux telle valeur de cette variable" il faut bien distinguer les valeurs par des indices.
Voilà comment on peut représenter tout ça :

Indice Valeur
0 Maurice
1 Jean
2 Pierre
3 Paul
4 Gérard

Les tableaux à indices numériques

Gérard
Gérard
Gérard

<?php
// Syntaxe 1
$Prenom=array();

$Prenom[0]='Maurice';
$Prenom[1]='Jean';
$Prenom[2]='Pierre';
$Prenom[3]='Paul';
$Prenom[4]='Gérard';

echo $Prenom[4];
?>

<?php
// Syntaxe equivalente
$Prenoms=array(0=>'Maurice',
1=>'Jean',
2=>'Pierre',
3=>'Paul',
4=>'Gérard');

echo $Prenoms[4];
?>

<?php
/* Dans le cas où vous souhaitez garder le premier indice à zéro (et les suivants incrémentés de 1 à chaque fois) vous pouvez également utiliser la syntaxe suivante */
$Prenoms1=array('Maurice','Jean','Pierre','Paul','Gérard');
echo $Prenoms1[4];
?>

count()

Compte le nombre d'éléments d'un tableau ou le nombre de propriétés d'un objet

count($variable)

<?php
echo count($Prenoms1) ." prénoms dans le tableau";
?>

Exemple

Les tableaux associatifs

PHP peut également vous permettre de distinguer les différentes valeurs de vos tableaux par des indices associatifs.
Ils sont constitués de chaînes de caractères.
Prenons cette fois l'exemple d'un article. On va le différencier par plusieurs choses :

Ref: 77 Article: Cable rond Prix: 7
Ref: 77 Article: Cable rond Prix: 7
Voilà comment on pourrait représenter ça avec un tableau associatif :

<?php
$Article=array();

$Article['Numero']=77;
$Article['Nom']="Cable rond";
$Article['Prix']=7;

echo "Ref: ".$Article['Numero'] ." Article: " .$Article['Nom'] ." Prix: " .$Article['Prix'];
?>

<?php
// Autre syntaxe
$Articles=array('Numero' =>77,
'Nom' => "Cable rond",
'Prix' => 7);

echo "Ref: ".$Articles['Numero'] ." Article: " .$Articles['Nom'] ." Prix: " .$Articles['Prix'];
?>

Exemple

Tableau multi dimensionnelle indicé

Si on veut représente le tableau, ça donne ça !:

France Paris 80
Japon Tokyo 90
UK Londres 70
90
<?php
$tab1=array();
$tab1[0][0]="France";
$tab1[0][1]="Paris";
$tab1[0][2]=80;

$tab1[1][0]="Japon";
$tab1[1][1]="Tokyo";
$tab1[1][2]=90;



$tab1[2][0]="UK";
$tab1[2][1]="Londres";
$tab1[2][2]=70;
echo $tab1[1][2];
?>
Avec une boucle
JaponTokyo90

<?php
$tab2=array();
$tab2[0][0]="France";
$tab2[0][1]="Paris";
$tab2[0][2]=80;

$tab2[1][0]="Japon";
$tab2[1][1]="Tokyo";
$tab2[1][2]=90;

$tab2[2][0]="UK";
$tab2[2][1]="Londres";
$tab2[2][2]=70;

for ($m=0;$m<count($tab2);$m++){
echo $tab2[1][$m];
}
?>

Exemple

Boucle foreach

foreach se décline en deux versions

Version 1 avec un tableau indicé

foreach($array as $value)

1
1
2
3
5
8
13

Ainsi, nous parcourons le tableau $array et la valeur de l'élément courant est copié dans $value, qui est ensuite affiché.

<?php
$array = array( 1, 1, 2, 3, 5, 8, 13 );
foreach( $array as $value ) // Pas d'accolades
echo $value . '<br />';
?>

Version 1 avec un tableau associatif

N°1
N°2
N°3
<?php
$array = array( 'premier' => 'N° 1', 'deuxieme' => 'N° 2', 'troisieme' => 'N° 3');
foreach( $array as $value ) // on parcourt $array, la valeur de l'item courant est copiée dans $value
echo $value . '<br />'; // affichage
?>

Contrairement au tableau précédant, les indices des éléments ne sont pas des nombres (0, 1, 2, ...) mais des chaînes de caractères (on appelle un tel tableau un tableau associatif). Ainsi, si je veux accéder au deuxième élément, je dois procéder comme suit: $array['deuxieme'] .
Il est donc impossible ici d'utiliser for, par contre, avec foreach, aucun problème

Version 2

La deuxième version de foreach permet de connaître, en plus de la valeur de l'élément courant, sa clé
Dans ce cas, on parcourt le tableau $array et la clé de l'élément courant est copiée dans $key tandis que sa valeur est copiée dans $value

Exemple 1:

Cet élément a pour clé "premier" et pour valeur "N° 1"
Cet élément a pour clé "deuxieme" et pour valeur "N° 2"
Cet élément a pour clé "troisieme" et pour valeur "N° 3"
<?php
$array = array( 'premier' => 'N° 1', 'deuxieme' => 'N° 2', 'troisieme' => 'N° 3');
foreach( $array as $key => $value )
echo 'Cet élément a pour clé "' . $key . '" et pour valeur "' . $value . '"<br />';
?>

Exemple 2:

$_SERVER[DOCUMENT_ROOT]=/home/conseilw/www
$_SERVER[GATEWAY_INTERFACE]=CGI/1.1
$_SERVER[HTTP_ACCEPT]=text/html,application/xhtml+xml,text/xml;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
$_SERVER[HTTP_ACCEPT_CHARSET]=ISO-8859-1,utf-8;q=0.7,*;q=0.7
$_SERVER[HTTP_ACCEPT_ENCODING]=gzip
$_SERVER[HTTP_ACCEPT_LANGUAGE]=en-us,en;q=0.5
$_SERVER[HTTP_CACHE_CONTROL]=no-cache
$_SERVER[HTTP_CONNECTION]=close
$_SERVER[HTTP_HOST]=www.conseil-webmaster.com
$_SERVER[HTTP_IF_MODIFIED_SINCE]=Mon, 09 Aug 2010 11:27:14 GMT
$_SERVER[HTTP_PRAGMA]=no-cache
$_SERVER[HTTP_USER_AGENT]=CCBot/1.0 (+http://www.commoncrawl.org/bot.html)
$_SERVER[HTTP_X_CC_ID]=ccc03-01
$_SERVER[PATH]=/bin:/usr/bin
$_SERVER[QUERY_STRING]=
$_SERVER[REDIRECT_STATUS]=200
$_SERVER[REMOTE_ADDR]=38.107.179.230
$_SERVER[REMOTE_PORT]=38237
$_SERVER[REQUEST_METHOD]=GET
$_SERVER[REQUEST_URI]=/formation/php/01-bases-php.php
$_SERVER[SCRIPT_FILENAME]=/home/conseilw/www/formation/php/01-bases-php.php
$_SERVER[SCRIPT_NAME]=/formation/php/01-bases-php.php
$_SERVER[SERVER_ADDR]=91.121.65.131
$_SERVER[SERVER_ADMIN]=webmaster@conseil-webmaster.com
$_SERVER[SERVER_NAME]=www.conseil-webmaster.com
$_SERVER[SERVER_PORT]=80
$_SERVER[SERVER_PROTOCOL]=HTTP/1.1
$_SERVER[SERVER_SIGNATURE]=
Apache/2.2.16 (Unix) mod_ssl/2.2.16 OpenSSL/0.9.8o Server at www.conseil-webmaster.com Port 80

$_SERVER[SERVER_SOFTWARE]=Apache/2.2.16 (Unix) mod_ssl/2.2.16 OpenSSL/0.9.8o
$_SERVER[PHP_SELF]=/formation/php/01-bases-php.php
$_SERVER[REQUEST_TIME]=1328423886
$_SERVER[argv]=Array
$_SERVER[argc]=0
<?php
foreach($_SERVER as $key => $value )
echo '$_SERVER[' .$key .']=' .$value .'<br />';
?>

Vous remarquerez que l'on ne met pas les [ ] de $_SERVER!
Il vous permettra un jour d'afficher le contenu de $_POST, $_GET ou encore $_SESSION, ce qui peut parfois s'avérer très utile pour déceler un bug ou une valeur incorrecte dans un script.

Imbriquer des boucles foreach

On peut aussi imbriquer des boucles foreach, regardez on peut ainsi afficher le contenu d'un tableau à deux dimensions

Le premier foreach parcourt le tableau principal, les valeurs de $key sont successivement 'fruits', 'animaux' et 'pays' tandis que $value contient le tableau qui contient les exemples, c'est donc $value que l'on prend comme tableau pour le deuxième foreach

Exemple 4:

fruits:
pommes
tomates
abricots

animaux:
chats
chiens

pays:
Suisse
France
Angleterre

<?php
$array = array( 'fruits' => array( 'pommes', 'tomates', 'abricots' ),
'animaux' => array( 'chats', 'chiens' ),
'pays' => array( 'Suisse', 'France', 'Angleterre' ) );
foreach( $array as $key => $value )
{
echo $key . ': <br />';

foreach( $value as $valeur )
echo ' ' . $valeur . '<br />';

echo '<br />';
}
?>

Exercice 1, boucle foreach

Exercice 2, boucle for et foreach

LC Formateur