Langage web côté serveur: PHP



  • Introduction


PHP est un langage de programmation dont le code PHP est inclus dans une page HTML classique.

À la différence d’un langage comme le JavaScript, où le code est exécuté côté client (dans le navigateur), le code PHP est exécuté côté serveur. Le résultat de cette exécution est intégré dans la page HTML qui est envoyée au navigateur, le navigateur n’a aucune connaissance de l’existence du traitement qui s’est déroulé sur le serveur.

Cette technique permet de réaliser des pages web dynamiques dont le contenu peut être complètement ou partiellement généré au moment de l’appel de la page grâce à des informations récupérées dans un formulaire ou extraites d’une base de données.




La partie entourée dans la page HTML à l’intérieur des balises <?php et  ?> est du code PHP . Sur cet exemple simple, le code PHP se contente d’afficher un texte statique « Bonjour » grâce à la fonction PHP echo ; dans un programme PHP plus traditionnel, ce texte serait généré dynamiquement en fonction de l’identification de l’utilisateur.

Pour indiquer au serveur web qu’une page HTML contient du code PHP à exécuter, il suffit de donner au fichier une extension " .php ".

Principe de l'exécution:

Lorsqu’un fichier PHP est demandé au serveur web, le code PHP inclus dans la page HTML est d’abord exécuté sur le serveur. Le résultat de cette exécution est inséré dans la page à la place du code PHP et la page est renvoyée au navigateur.



  • Le langage PHP



Le code PHP est inclus dans une page HTML à l’intérieur des balises  <?php  et  ?>



    • La fonction echo

      La fonction echo est la fonction de base de toute page PHP.
      Elle permet d’afficher une ou plusieurs chaînes de caractères et donc d’inclure du texte dans la page HTML envoyée au navigateur.

      Syntaxes:

      echo('chaîne texte')
       
      echo 'chaîne texte', 'chaîne texte2', 'chaîne texte3', etc..

      Exemple:

 
Cette page web affichera:






    • Séparateur d'instructions

      En PHP, toutes les instructions doivent se terminer par un point-virgule comme en JavaScript.


               

    • Commentaires

      Deux syntaxes :
      • à la suite des symboles  //  (ou du symbole  #)   pour insérer du commentaire sur une ligne.
      • Entre les symboles  /*  et   */ pour insérer du commentaire sur plusieurs lignes.




    • Variables

      Une variable est une zone mémoire identifiée par un nom qui contient une valeur lisible et modifiable dans le programme. Elle sert à stocker une information utile pour le déroulement du programme comme le nom de l'utilisateur, la date, etc..

      En PHP les variables sont identifiées par le préfixe $ suivi d’un nom qui respecte la règle suivante:

      Tout élément PHP nommé (variable, fonction, …) doit avoir un nom qui  :
      • commence par une lettre ou un underscore (_) ;
      • comporter ensuite des lettres, des chiffres ou le caractère souligné.

Dans cette définition, une lettre représente toute lettre minuscule ou majuscule comprise entre a et z (a à z et A à Z) ainsi que tout caractère de code ASCII compris entre 127 et 255.

Les caractères accentués sont donc autorisés, mais pas les caractères du type #$%& qui ont une signification spéciale dans le langage PHP.


Le nom des variables est sensible à la casse : $nom et $Nom sont vues par PHP comme deux variables différentes.


Les variables PHP sont automatiquement définies lors de leur première utilisation, elles sont typées automatiquement lors de chaque affectation d’une valeur.




Affichera


$nom = Olivier

$nom = 123



La portée d’une variable est le script ( le fichier php)  dans lequel elle est définie. Une variable peut donc être définie dans une première section de code PHP et utilisée dans une autre section de code PHP du même script. La durée de vie d’une variable est le temps de l’exécution du script. Lorsque le script se termine, les variables sont supprimées. Si le même script est appelé plus tard, de nouvelles variables sont définies.


    • Types de données

      PHP propose quatre types de données pouvant contenir une valeur, deux types composés pouvant contenir plusieurs valeurs ( tableau; objets) et des types spéciaux comme NULL.

- Types dits scalaires (contiennent une valeur):

        • nombre entier, exemple: -2 147 483 648
        • nombre à virgule flottante (décimal) , exemple: 1.23  
        • chaîne de caractères, exemple:  'bonjour' ou "bonjour", une chaîne de caractères est délimitée par des apostrophes simples  ou doubles (au choix).
        • booléen, le type booléen comporte deux valeurs : TRUE (ou true) et FALSE (ou false).

- Types composés:

        • tableau: En PHP, un tableau est une collection (liste d’éléments) ordonnée de couples clé/valeur. La clé peut être de type entier ou de type chaîne de caractères. Dans le premier cas, le tableau est dit numérique et la clé est désignée par le terme indice. Dans le deuxième cas le tableau est dit associatif:

         
Une variable de type tableau peut être définie explicitement grâce à la fonction array(...) ou implicitement en utilisant une notation à crochets ([ ]).
Une variable utilisée pour la première fois avec une notation de la forme $variable[...] est automatiquement créée avec le type tableau.

- Création du tableau avec la méthode $tableau[clé] = valeur

Avec une affectation du type $tableau[clé] = valeur, PHP associe la valeur à la clé indiquée (qui peut être de type entier ou de type chaîne).

<?php 
$nombres[0] = 'zéro';
$nombres[1] = 'un';

$nombres[2] = 'deux';

$nombres[3] = 'trois';
$nombres[5] = 'cinq';

$nombres[6] = 'six';
$nombres['un'] = 1;

echo "l'élément d'indice 1 vaut", $nombres[1]; // affichage de l'élément d’indice 1

echo "l'élément de clé 'un' vaut", $nombres['un'];
?>

La variable tableau  $nombre vaut:



-  Création du tableau avec la fonction array(...):

<?php 
$nombres = array('zéro','un','deux','trois', 5 => 'cinq','six','un' => 1,'sept',-1 => 'moins un'); 

             echo "l'élément d'indice 1 vaut", $nombres[1]; // affichage de l'élément d’indice 1

             echo "l'élément de clé 'un' vaut", $nombres['un'];
            ?>

Résultat: la variable $nombre vaut:

        • objet.

          PHP propose des fonctionnalités classiques de programmation orientée objet :
            • Définition de classe.
            • Utilisation de méthodes constructeur et destructeur.
            • Notions de propriété ou de méthode publique, privée, protégée.
            • Héritage.
            • Exceptions.
            • etc..


- Types spéciaux :

      • NULL : ce type est un peu particulier et correspond au type d’une variable utilisée sans jamais avoir été initialisée. Il possède une seule valeur, la valeur NULL définie par la constante NULL (ou null).



    • Opérateurs





















    • La structure conditionnelle if


Les conditions  if et elseif sont testées séquentiellement. Si la condition est vraie alors les instructions sont exécutées. Si aucune des conditions n’est vraie, les instructions éventuelles définies dans la partie else sont exécutées.

Les expressions définissant les conditions sont de type booléen.

<?php 
// exemple de structure if elseif else 
$nom = 'Blavien'; 
$âge = NULL; 


if ($nom == NULL) { 
  echo "Bonjour inconnu !<br />"; 
}

elseif ($âge == NULL) { 
  echo "Bonjour $nom ! Je ne connais pas ton âge.<br />"; 
}


else { 
  echo "Bonjour $nom ! Vous avez $âge ans.<br />"; 

?>

Affichera:

Bonjour Blavien ! Je ne connais pas ton âge.


Il existe aussi la structure switch pour comparer des conditions multiples, c'est une alternative à if elseif

<?php 


$les_noms = array('Blavien','Marteline','Fladine','Dragobert', NULL);

$tirage = rand(0,4)
$nom = $les_noms[$tirage]


switch ($nom) { 
    case NULL : 
      echo 'Bonjour inconnu ! ', 
      break; 
    case 'Blavien' : 
      echo "Bonjour Maître $nom !<br/>"; 
      break; 

    case 'Marteline' : 
      echo "Bonjour Miss $nom !<br/>"; 
      break; 
    default : 
      echo "Bonjour $nom !<br/>"; 

?>



    • Les structures répétitives ( boucles)
      • Boucle while

        La structure de contrôle while permet d’exécuter en boucle une série d’instructions tant qu’une condition est vraie.

        Exemple:

        <?php 
        // Initialiser deux variables. 
        $nom = 'BEBERT'; 
        $longueur = 6; 
        // Initialiser un indice. 
        $indice = 0; 
        // Tant que l'indice est inférieur à la longueur de la chaîne 
        while ($indice < $longueur) { 
          // Afficher le caractère correspondant à l'indice suivi  
          // d'un point. 
          echo "$nom[$indice]."; 
          // Incrémenter (ajouter 1 à l'indice) 
          $indice++; 
        } 
        ?>

        Résultat:    B.E.B.E.R.T.


      • Boucle for

        La structure répétitive  for permet de répéter une série d'instructions un nombre connu de fois

        for (expression1; expression2; expression3) { 

        // dans la boucle
          instructions; 
        }
        // Après la boucle

        expression1: condition de départ est exécutée une fois au démarrage de la boucle
        expression2: est exécutée avant chaque itération (avant chaque tour de boucle y compris la première), le résultat le l'expression 2 est évalué comme booléen, si le résultat est évalué à TRUE les instructions dans la boucle sont exécutées ; si le résultat est évalué à FALSE, la boucle s’arrête et le programme continue après la boucle

              expression3: est exécutée à la fin de chaque tour de boucle.


Dans la grande majorité des cas, l’instruction for est employée de la manière suivante :

            • expression1 initialise une variable qui sert de compteur.
            • expression2 teste la valeur de la variable compteur.
            • expression3 incrémente la valeur de la variable compteur.


<?php 


// Initialisation d'un tableau. 
$couleurs = array('bleu','blanc','rouge'); 
// Utilisation de la structure for pour parcourir le tableau 
$nombre = 3; 
// Boucle utilise un indice $i qui démarre à 0 ($i = 0)  
// elle est incrémenté d'une unité à chaque itération ($i++) ; 
// la boucle se poursuit tant que l'indice est inférieur au  
// nombre d'éléments présents dans le tableau ($i < $nombre). 


for ($i = 0; $i < $nombre; $i++) { 
  echo "$couleurs[$i]<br/>"; 


?>


affichera:


bleu 
blanc 
rouge



Réception d'un formulaire


Après un clic sur le bouton envoyer (submit) son contenu doit être transmis au serveur web. Dans la balise <form>, il faut préciser quel programme sur le serveur sera chargé d'analyser les données; cette information est indiquée avec l'attribut action dans la balise <form>; on doit aussi choisir une méthode d’envoi des données, il y a deux possibilités qui s'appellent  get et post , la méthode d’envoi est communiquée avec l'attribut method dans la balise <form> , ici on choisira method ="post"


Voici à quoi ressemble une balise <Form> avec ces attributs:


<form action="myphp.php" method ="post" name="inscription_form" onsubmit="return checkForm();">



Ici vous pouvez voir que le destinataire du formulaire s'appelle myphp.php, c'est le nom du fichier que va charger le serveur web pour traiter les données du formulaire. C'est un fichier qui contient du code php interprété par le serveur web.


Rappel: le  serveur web est installé sur une machine que l'on appelle une machine serveur ou plus simplement un serveur, le client web ( navigateur web comme Chrome) est installé sur une autre machine ( ordinateur, smartphone) que l'on appelle une machine cliente ou plus simplement un client.  


Le réseau internet sert de support de transmission pour les échanges entre le client et le serveur.


Sur le serveur on utilisera le logiciel serveur web Apache. Pour réduire le coût, la machine serveur sera une machine virtuelle. Un client communiquera avec la machine virtuelle sans se rendre compte que c'est un serveur virtuel.


1.  Sur le serveur Virtuel, un lien vers le dossier /var/www/html  (  entouré en bleu ci-dessous) vous permettra d'accéder aux fichiers du site web.



rappel sur la en main


  • ouvrir le dossier html du bureau puis le fichier "myphp.php" dans ce dossier:


 



Le code php est  inséré au milieu du code html,  il est placé entre des balises en paire <? php  et  ?> ( vous les voyez entourées en rouge ci-dessus ). Un fichier qui contient du code php ne doit pas être enregistré avec l'extension .html mais avec l'extension .php. Quand un client web demande à consulter une page php, le serveur web charge la page, analyse ce qui est demandé dans le code php puis il envoie la page au client web.


Le navigateur web ( client web)  ne peut pas interpréter le code php, ainsi vous ne pouvez pas demander l'ouverture d'un fichier php à Firefox comme vous le faisiez avec du code html. Il faut faire une requete "http://nom-du-serveur/fichier-voulu.php" auprès du serveur web qui transmettra la page au navigateur sans les parties php.



Voici un code php  en rouge ci-dessous au milieu d'un code html en noir:


<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title> page php </title>

</head>

<body>

<?php  

echo 'Bonjour';

?>

</body>

</html>


  • Saisir l'instruction  echo 'Bonjour'; entre les balises php de votre fichier myphp.php. Enregistrer.



  • Ouvrir un navigateur web  de la machine virtuelle et demander la page http://localhost/myphp.php 

( localhost est le nom donné au serveur web local d'une machine serveur)




Résultat: l'instruction echo est un peu comme la fonction document.write(..) de JavaScript, elle permet d'ajouter du contenu dans la page web.



  • Faire un clic-droit dans la page web et choisir "code source de la page"


   


Vous pouvez voir ce que le serveur a envoyé au navigateur, le code php n'est pas présent, l'instruction echo a été interprétée par le serveur web qui a rajouté le texte "bonjour":




L'instruction echo permet d'ajouter des balises html qui sont mises dans des chaînes de caractères, les chaînes peuvent se concaténer avec l'opérateur de concaténation, le point  ".".


<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title> page php </title>

</head>

<body>

<?php

// le point permet de concaténer des chaînes de caractères  

echo '<h1>'. 'Bonjour'. '</h1>';

?>

</body>

</html>


Résultat de l'affichage et code source transmis:


       




    • Variables et traitement des données du formulaire


PHP peut manipuler des variables; en php, les variables sont des mots précédés du signe $, saisir les parties en rouge du code php ci-dessous (à la place du code précédent)  dans le fichier myphp.php, tester le code en demandant au navigateur de la machine virtuelle la page http://localhost/myphp.php :


<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title> page php </title>

</head>

<body>

<?php

$nom = ' Onette';

$prenom = 'Camille';

$lieu_de_naissance = 'Carcassonne' ;

$date_naissance = '12-08-2004';

// ce code concatène des chaines de caractères et le contenu de variables

echo 'Bonjour'.$prenom.' '.$nom.'tu es né(e) le '.$date_naissance. ' à '.$lieu_de_naissance;

?>

</body>

</html>



Résultat






 Les variables php peuvent se voir affecter des données transmises par un formulaire.

Côté html, le champ de saisie du nom est associé à une variable qui est donnée dans l'attribut name d'une la balise <input> de type='text' (champ de saisie), ci dessous name="nom"


<label for="nom">  Entrez votre nom : </label>

<input type="text" name="nom"  maxlength="20" size="20" />



Si la personne saisit Onette dans le champ, la variable  nom = 'Onette'




Lorsque l'utilisateur transmet le formulaire en cliquant sur le bouton Envoyer, le contenu de toutes les variables est envoyé par la méthode post. Du côté serveur, le serveur web obtient un tableau appelé $_ POST avec le contenu de toutes les variables transmises.



Pour manipuler les éléments du tableau coté php, on peut par exemple affecter à une variable php appelé  $nom  le contenu de la case du tableau qui contient la valeur du champ nom cette case s'appelle  $_POST['nom'], cette affectation se programmera:  

$nom = $_POST['nom'];


Voici un code qui récupère le contenu des variables du tableau ci-dessus et les affecte à des variables php:


$nom = $_POST['nom'];

$prenom = $_POST['prenom'];

$lieu = $_POST['lieu'];

$date_naissance = $_POST['birthday'];



    • saisir les parties php en rouge ci-dessous, à la place du code précédent,  dans votre fichier myphp.php, enregistrer

 

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title> page php </title>

</head>

<body>

<?php

$nom = $_POST['nom'];

$prenom = $_POST['prenom'];

$lieu = $_POST['lieu'];

$date_naissance = $_POST['birthday'];

echo 'Bien recu M ' .$prenom. ' ' .$nom';

?>

</body>

</html>


    • Demander la page http://localhost avec votre navigateur de la machine virtuelle pour avoir la page index.html qui s'affiche.

 ( si on ne précise pas quelle page on veut après localhost,  le serveur renvoie la page d'accueil qui est ici  index.html)




    • Remplir le formulaire et cliquer sur Envoyer.




Résultat: le serveur vous répond avec le contenu de l'instruction echo:



La fonction php native empty(..)  prend en paramètre une des cases d'un tableau $_POST et renvoie true si la case est vide,  par exemple  !empty( $_POST['nom']) permet de vérifier que la case du tableau $_POST['nom'] contient bien un nom ( vous avez programmé une vérification côté client avec JavaScript mais si les données transmises proviennent d'un code web malveillant, la vérification peut avoir été contournée) .

 empty(..) renvoie true si la case du tableau n'a pas une valeur et  false  sinon, on peut utiliser cette valeur renvoyée ( true ou false)  dans un test "if" qui sera vrai si la case a bien une valeur; on utilise l'opérateur and (et) pour vérifier toutes les cases du tableau:


Si la case nom et la case prénom et la case lieu de naissance ont bien toutes des valeurs, on continue sinon on renvoie un message d'erreur au navigateur:


if ( (!empty($_POST['nom'])) and (!empty($_POST['prenom'])) and (!empty($_POST['lieu'])) and (!empty($_POST['birthday'])))

{


$nom = $_POST['nom'];

$prenom = $_POST['prenom'];

$lieu = $_POST['lieu'];

$date_naissance = $_POST['birthday'];

echo 'Bien reçu M(me) '.$prenom.' '. $nom. ' vous êtes né à '.$lieu. ' le '. $date_naissance;


}

else

{

echo " <br/> <h1> Désolé vous n'avez pas rempli tous les champs correctement <h1> ";


}















Créé avec HelpNDoc Personal Edition: Produire facilement des livres électroniques Kindle