BSIO1 - B1.3 - Participer à la présence en ligne des organisations
BTS SIO - AMEP Redoute - Préparé par Axel Féliot - dernière mise à jour : DECEMBRE 2021
HTML sert à décrire uniquement des pages Web statiques. Pour agrémenter ces pages d'animations ou pour les rendre plus puissantes grâce à de la programmation, on greffera d'autres technologies :
BSIO1 - B1.3 - Participer à la présence en ligne des organisations
BTS SIO - AMEP Redoute - Préparé par Axel Féliot
Le langage PHP: Hypertext Preprocessor, plus connu sous son sigle PHP, est un langage de programmation libre principalement utilisé pour produire des pages Web dynamiques.
PHP peut néanmoins fonctionner en dehors d'une page web comme n'importe quel langage interprété.
Depuis sa version 5, PHP est un langage impératif orienté objet comme C++.
BSIO1 - B1.3 - Participer à la présence en ligne des organisations
BTS SIO - AMEP Redoute - Préparé par Axel Féliot
A la base, les serveurs HTTP (Apache, IIS, etc.) ne savent pas interpréter le PHP. Pour que cela marche, il faut leur ajouter le module adéquat (installer PHP).
Le PHP est exécuté côté serveur, seul le résultat est envoyé au navigateur. Les navigateurs ne savent donc pas exécuter le PHP, et ne sont pas censés en recevoir.
BSIO1 - B1.3 - Participer à la présence en ligne des organisations
BTS SIO - AMEP Redoute - Préparé par Axel Féliot
Le PHP permettra, dans un site :
Ces choses sont impossibles en HTML/CSS.
BSIO1 - B1.3 - Participer à la présence en ligne des organisations
BTS SIO - AMEP Redoute - Préparé par Axel Féliot
Une page PHP contient par défaut du HTML, elle doit donc commencer par les balises html
Toutefois, on a la possibilité de basculer du HTML au PHP, et inversement, grâce aux balises suivantes :
<html>
<body>
<!-- (début de votre code HTML) -->
<?php
/*
il est possible d'ajouter des instructions PHP à
l'intérieur de votre code HTML grâce aux balises
<?php et ?>
*/
?>
<!-- (reprise de votre code HTML) -->
</body>
</html>
BSIO1 - B1.3 - Participer à la présence en ligne des organisations
BTS SIO - AMEP Redoute - Préparé par Axel Féliot
Votre code PHP ne s'exécute pas?
Les erreurs les plus fréquentes en PHP sont :
BSIO1 - B1.3 - Participer à la présence en ligne des organisations
BTS SIO - AMEP Redoute - Préparé par Axel Féliot
La fonction echo permet d'envoyer au navigateur un contenu placé entre guillemets. Le navigateur traitera ce contenu comme s'il reçevait une page Web traditionelle.
Ce contenu sera donc généralement du HTML, mais cela pourra être également du CSS ou n'importe quelle technologie dite cliente (c'est à dire interprétable par le navigateur).
BSIO1 - B1.3 - Participer à la présence en ligne des organisations
BTS SIO - AMEP Redoute - Préparé par Axel Féliot
1. Voici un exemple de page PHP, qui mélange du HTML et du PHP, et qui utilise la fonction echo pour afficher "Bonjour !" dans le navigateur :
<!DOCTYPE html>
<HTML>
<HEAD>
<TITLE>Mon code PHP</TITLE>
<META charset="utf-8"/>
</HEAD>
<BODY>
<?PHP
echo("Bonjour à tout le monde !<br/> Ceci est ma première page web codée avec PHP<br/>");
// récupération de la date du jour dans des variables
$jour=date("d");
$mois=date("m");
$an=date("Y");
echo ("Nous sommes le ".$jour."/".$mois."/".$an."<br />");
echo ("Navigateurs compatibles: ".$_SERVER["HTTP_USER_AGENT"].'<br />');
?>
</BODY>
</HTML>
BSIO1 - B1.3 - Participer à la présence en ligne des organisations
BTS SIO - AMEP Redoute - Préparé par Axel Féliot
Les variables en PHP sont toujours précédées de l'identificateur $
Contrairement au langage C, les variables en PHP n'ont pas besoin d'être déclarées.
Avec PHP, les noms de variables doivent répondre à 2 critères :
BSIO1 - B1.3 - Participer à la présence en ligne des organisations
BTS SIO - AMEP Redoute - Préparé par Axel Féliot
BSIO1 - B1.3 - Participer à la présence en ligne des organisations
BTS SIO - AMEP Redoute - Préparé par Axel Féliot
Les tableaux PHP stockent des données sous forme de liste. Les données contenues dans la liste sont accessibles grâce à un index.
Contrairement à des langages tels que le langage C, il est possible de stocker des éléments de types différents dans un même tableau.
$Tableau[0] = 12;
$Tableau[1] = "CCM";
$Tableau[] = 12;
$Tableau[] = "CCM";
=
BSIO1 - B1.3 - Participer à la présence en ligne des organisations
BTS SIO - AMEP Redoute - Préparé par Axel Féliot
BSIO1 - B1.3 - Participer à la présence en ligne des organisations
BTS SIO - AMEP Redoute - Préparé par Axel Féliot
<?php
$compteur = 1;
echo "<p>Avant la boucle, \$compteur vaut $compteur<br>";
while ($compteur <= 5)
{
echo "Pendant la boucle, \$compteur vaut $compteur<br>";
$compteur++;
}
echo "Après la boucle, \$compteur vaut $compteur</p>";
?>
<?php
$compteur = 1;
echo "<p>Avant la boucle, \$compteur vaut $compteur<br>";
do
{
echo "Pendant la boucle, \$compteur vaut $compteur<br>";
$compteur++;
}while ($compteur <= 5);
echo "Après la boucle, \$compteur vaut $compteur</p>";
?>
<?php
echo "<p>";
for ($i=1 ; $i <= 5 ; $i++)
{
echo "Pendant la boucle, la variable \$i vaut $i<br>";
}
echo "</p>";
?>
BSIO1 - B1.3 - Participer à la présence en ligne des organisations
BTS SIO - AMEP Redoute - Préparé par Axel Féliot
BSIO1 - SI6 - Développement d'applications
Tapez le code suivant, et sauvez-le dans un fichier à la racine de votre serveur Internet, puis exécutez-le. Que réalise ce script?
<html>
<form>
<input type="text" name="login">
<input type="submit">
</form>
<?php
echo "Bonjour " . $_REQUEST["login"];
?>
</html>
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
BSIO1 - SI6 - Développement d'applications
Tapez les codes suivants, et sauvez-les dans deux fichiers différents, formulaire.html, et validation.php.
<html>
<!-- Fichier formulaire.html -->
<head></head>
<body>
<form action="validation.php" method="GET">
<input type="text" name="ma_saisie"><br>
<input type="submit">
</form>
</body>
</html>
<html>
<!-- Fichier validation.php -->
<head></head>
<body>
<?php
echo "Vous avez saisi : ";
echo $_GET["ma_saisie"];
?>
</body>
</html>
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
Exécuter la page formulaire.html, remplissez la zone de saisie et validez le formulaire. Que se passe-t-il?
BSIO1 - SI6 - Développement d'applications
Observez les codes suivants, et remarquez les différences. Le code de gauche génère une erreur, que le code de droite corrige. Quelle solution a été mise en place ?
<html>
<!-- Fichier saisie.php -->
<head></head>
<body>
<form>
<input type="text" name="ma_saisie"><br>
<input type="submit">
</form>
<?php
echo "Vous avez saisi : ";
echo $_REQUEST["ma_saisie"];
?>
</body>
</html>
<html>
<!-- Fichier saisie.php -->
<head></head>
<body>
<form>
<input type="text" name="ma_saisie"><br>
<input type="submit">
</form>
<?php
if (isset($_REQUEST["ma_saisie"]))
{
echo "Bonjour ";
echo $_REQUEST["ma_saisie"];
}
?>
</body>
</html>
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
BSIO1 - SI6 - Développement d'applications
La fonction isset permet de savoir si une variable a été déclarée (et ainsi de savoir si un formulaire a été validé) ou encore si une case à cocher, dans un formulaire HTML, a été cochée ou non.
<form>
<input name="texte1">
<input name="texte2">
<input type="submit">
</form>
<?php
if (isset($_REQUEST["texte1"])
echo "Le formulaire a été validé et peut être traité,"
echo ": texte1 et texte2 sont connus";
?>
<form>
<input type="checkbox" name="ma_checkbox">
<input type="submit">
</form>
<?php
if (isset($_GET["ma_checkbox"]))
echo "La case a été cochée";
else
echo "La case n'a pas été cochée";
?>
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
BSIO1 - SI6 - Développement d'applications
La fonction is_numeric permet de vérifier le type d'une variable.
Exemple : l'utilisateur a saisi deux valeurs a et b, on veut voir si elles sont numériques et comprises entre 0 et 100, puis on affiche la somme.
<?php
if (!is_numeric($a))
echo "a n'est pas une valeur numérique";
elseif (!is_numeric($b))
echo "b n'est pas une valeur numérique";
elseif ($a < 0 || $a > 100 || $b < 0 || $b > 100)
echo "a ou b n'est pas compris dans l'intervalle autorisé (0 à 100)";
else
echo "La somme de a et b est : ".($a + $b);
?>
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
BSIO1 - SI6 - Développement d'applications
Reprenez l'exemple de la page saisie.php
Au lieu de faire saisir un champ, vous faites saisir deux champs a et b dans un formulaire.
La partie du code en PHP affichera la somme de ces deux valeurs saisies.
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
BSIO1 - SI6 - Développement d'applications
Avec cette méthode, les données du formulaire seront encodées dans une URL. Cette URL sera composée du nom de la page (ou du script) à charger avec les données de formulaire empaquetées dans une chaîne.
Les données sont séparées de l'adresse de la page par le symbole ? et entre elles par le symbole &.
Ainsi si on envoie à page.html les valeurs "bleu" pour le champ "couleur" et "rectangle" pour le champ "forme", l'URL construite par le navigateur sera:
http://www.xul.fr/page.html&couleur=bleu&forme=rectangle
Contraintes :
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
BSIO1 - SI6 - Développement d'applications
Dans un formulaire, elle est spécifiée ainsi:
Cette méthode envoie un en-tête et un corps de message au serveur. Le corps est généralement constitué des données entrées dans le champ de formulaire par l'utilisateur. Le traitement du message est complètement transparent pour le client. Les données du formulaire n'apparaissent pas dans l'URL.
<form method="post" action="page.php">
</form>
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
BSIO1 - SI6 - Développement d'applications
Un site Web dynamique, comme de nombreuses autres applications, utilisera une base de données pour stocker les données qu'il manipule. Par exemple :
Bien que PHP soit conçu pour travailler avec n'importe quel serveur de base de données, on l'associe souvent à MySQL.
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
BSIO1 - SI6 - Développement d'applications
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
BSIO1 - SI6 - Développement d'applications
PHP offre 3 APIs (Application Programming Interface) différentes pour se connecter à MySQL. Il est recommandé d'utiliser soit l'extension mysqli, soit l'extension PDO_MySQL. Il n'est pas recommandé d'utiliser l'ancienne extension mysql pour de nouveaux développements sachant qu'elle est obsolète depuis PHP 5.5.0, et sera supprimée dans un futur proche.
Tout code PHP qui a recours à une base de données MySQL contiendra donc les instructions suivantes (et dans cet ordre) :
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
BSIO1 - SI6 - Développement d'applications
Le paramétrage est le suivant :
Par exemple, quand vous travaillerez au lycée, sur la version de XAMPP installée en local sur votre poste :
Vous pouvez ajouter une gestion d'erreur, qui permet de trouver les erreurs en dix secondes au lieu de deux heures :
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
// pour se connecter à MySQLi et on récupère dans $link le lien de la connexion
$link = mysqli_connect('nom_serveur', 'nom_user', 'mdp_user', 'nom_bdd1');
// pour sélectionner une autre base
mysqli_select_db($link, 'nom_bdd2');
// pour se connecter à MySQLi et on récupère dans $link le lien de la connexion
$link = mysqli_connect('localhost', 'root', '');
$link = mysqli_connect('localhost', 'my_user', 'my_password', 'my_database');
if (!$link) {
die('Erreur de connexion (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
}
BSIO1 - SI6 - Développement d'applications
Voici un exemple de code PHP qui exécute une requête d'insertion :
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
// connexion au serveur et sélection de la base par défaut
$lien = mysqli_connect("127.0.0.1", "root", "", "ma_base");
// construction de la requête à exécuter
$req = "INSERT INTO ma_table VALUES (null, 18.5, 'alpha', 'l\'autre', '2008-01-15', 1, 0)";
// exécution de la requête
mysqli_query($lien, $req);
BSIO1 - SI6 - Développement d'applications
Plusieurs raisons peuvent expliquer que votre requête ne s'exécute pas correctement. Le fait d'avoir le détail de l'erreur, et également la requête SQL qui s'affiche sous vos yeux, vous permet de repérer très rapidement les erreurs.
$sql = "votre_requête_tapée_ici";
mysqli_query($link, $sql) or die("Erreur " . mysqli_error($link) . " dans la requête" . $sql);
** Danger avec les requêtes en PHP **
Attention : si vous avez un problème avec une requête SQL, ou avec un code PHP qui contient une requête, ne vous avisez pas d'appeler le professeur avant d'avoir fait la gestion d'erreur pour trouver vous-même l'erreur. Vous risqueriez de faire une chute totalement accidentelle depuis votre chaise...
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
BSIO1 - SI6 - Développement d'applications
Voici l'ensemble du code (avec la gestion d'erreur) qui permet d'afficher le contenu d'une table de produits :
<?php
//sauvegarde de ma requête dans une variable
$sql = "SELECT * FROM produits;";
// sauvegarde du résultat de ma requête dans une variable
$les_produits = mysqli_query($lien, $sql)
or die("Erreur ".mysqli_error($lien)." dans la requête $sql");
// affichage du nombre de lignes en résultat de la requête
echo("La requête a retourné " . mysqli_num_rows($les_produits) . " lignes.<br>");
// boucle d'affichage des lignes de résultats
while ($ligne_produit = mysqli_fetch_assoc($les_produits))
{
echo $ligne_produit["reference"]; // reference est un champ de la table
echo $ligne_produit["libelle"]; // libelle est un champ de la table
/*...*/
}
?>
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
BSIO1 - SI6 - Développement d'applications
Et voici quelques explications :
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
<?php
//sauvegarde de ma requête dans une variable
$sql = "SELECT * FROM table_de_produits;";
// sauvegarde du résultat de ma requête dans une variable
$les_produits = mysql_query($lien, $sql)
or die("Erreur ".mysqli_error($lien)." dans la requête $sql");
// affichage du nombre de lignes en résultat de la requête
echo("La requête a retourné " . mysqli_num_rows($les_produits) . " lignes.<br>");
// boucle d'affichage des lignes de résultats
while ($ligne_produit = mysqli_fetch_assoc($les_produits))
{
echo $ligne_produit["champ1"];
echo $ligne_produit["champ2"];
/*...*/
}
?>
BSIO1 - SI6 - Développement d'applications
<?php
//sauvegarde de ma requête dans une variable
$sql = "SELECT * FROM table_de_produits;";
// sauvegarde du résultat de ma requête dans une variable
$les_produits = mysqli_query($link, $sql) or die("Erreur ".mysql_error()." dans la requête $sql");
// on insère le code HTML de la balise du tableau
echo '<table border="1">';
echo '<th>Désignation</th><th>Prix Unitaire</th>';
// boucle d'affichage des lignes de résultats
while ($ligne_produit = mysqli_fetch_assoc($les_produits))
{
// chaque ligne de résultat est une ligne du tableau
echo '<tr>' ;
echo '<td>'. $ligne_produit["nom_produit"] . '</td>';
echo '<td>'. $ligne_produit["prix_produit"] . '</td>';
echo '</tr>';
}
echo '</table>';
?>
Les jeux d'enregistrement seront affichés dans des tableaux afin de soigner la mise en page.
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot
BSIO1 - SI6 - Développement d'applications
BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot