Un site web peut être :
Un site dynamique utilise un langage de programmation (PHP) et un SGBD (MySQL).
Quand on visite une page web avec PHP, le serveur interprète le code PHP, génère le code HTML en utilisant (souvent) des données issues d'une base de données, et l'envoie au client.
Le client ne voit jamais le code PHP ni la base de données.
Pour construire un site web dynamique, on a besoin d'Apache (serveur web qui délivre les pages web), PHP et MySQL.
Il suffit d'installer WAMP (Windows), MAMP (MAC) ou XAMPP (Windows, Mac, Linux).
Pour programmer en PHP, il faut changer quelques réglages.
Le fichier de configuration de PHP est php.ini
. On trouve son adresse dans la page phpinfo.php.
Dans php.ini
, il faut modifier les lignes avec error_reporting
error_reporting = E_ALL
et display_errors
display_errors = On
et redémarrer le serveur.
Un fichier contenant du code PHP a l'extension .php
.
On écrit le code PHP entre deux balises PHP : <?php
et ?>
:
<?php
echo "Hello World"; // afficher le texte "Hello World"
?>
Chaque instruction (ligne de code) finit avec un point-virgule (;
).
La fonction echo
affiche une chaîne de caractères (un texte).
Les commentaires sont mono-lignes (//
) ou multi-lignes (/* */
).
<?php
// Un commentaire sur une ligne
/* Un commentaire
sur plusieurs lignes */
?>
Une variable est une unité d'information stockée en mémoire temporairement, et pas sur le disque dur.
Une variable a un nom et une valeur. Un nom de variable commence par le symbole dollar ($
).
<?php
$mot_de_passe = 'jia7syrcjia7'; // nom : $mot_de_passe, valeur : jia7syrcjia7
?>
Il y a plusieurs types de variables :
true
et false
)Le type d'une variable est défini par sa valeur.
On écrit une chaîne de caractères entre guillemets simples ('
) ou doubles ("
).
Avec les guillemets simples, on concatène (assemble) plusieurs strings avec un point (.
)
<?php
$age_du_visiteur = 13;
// afficher "Le visiteur a 13 ans."
echo 'Le visiteur a ' . $age_du_visiteur . ' ans';
?>
Normalement, un programme ne fait pas toujours la même chose. Son comportement dépend de son interaction avec l'utilisateur (cliquer sur un bouton, remplir une information) et son environnement (date, données enregistrées).
Pour cela, un langage de programmation propose des structures de contrôle : if, if-else, switch, while ...
On utilise une structure conditionnelle if-else pour introduire une condition dans un programme.
<?php
if ($age > 18 && $pervers == true)
{
echo 'Inscrivez-vous pour voir plus de vidéos.';
}
else
{
echo 'On vient d\'envoyer un SMS à tes parents.';
}
?>
Autrement,
<?php
if ($age > 18 AND $pervers) // AND, pas besoin de "== true"
{
echo 'Inscrivez-vous pour voir plus de vidéos.';
}
else
{
echo 'On vient d\'envoyer un SMS à tes parents.';
}
?>
Autrement, pour éviter les echo
<?php if ($age > 18 AND $pervers) { ?>
Inscrivez-vous pour voir plus de vidéos.
<?php } else { ?>
On vient d'envoyer un SMS à tes parents.
<?php } ?>
Il existe d'autres structures conditionnelles : l'instruction switch et l'opérateur ternaire.
Une boucle sert à répéter un bloc d'instructions. Il en existe trois types : while, do-while, et for.
<?php
$i = 1;
while ($i <= 10) // boucle while
{
echo $i . '<br />';
$i++; // $i = $i + 1
}
?>
<?php
$i = 1;
do // boucle do-while
{
echo $i . '<br />';
$i++; // $i = $i + 1
} while ($i <= 10); // attention à ce point-virgule
?>
<?php
for ($i = 1; $i <= 10; $i++) // boucle for
{
echo $i . '<br />';
}
?>
Un tableau (array) est une variable complexe, car en fait elle contient une liste de valeurs.
<?php
/* Un tableau numéroté
* les indices sont des entiers consécutifs : 0, 1, 2 ... */
$tab = array('zero', 'un', 'deux');
echo $tab[0]; // affiche "zero"
echo $tab[2] . ' cents'; // affiche "deux cents"
?>
<?php
/* Un tableau associatif
* les indices sont des strings */
$tab = array('zero' => 0, 'un' => 1, 'deux' => 2);
echo $tab['zero']; // affiche "0"
echo $tab['deux'] * 10; // affiche "20"
?>
On parcourt un tableau associatif avec une boucle foreach
<?php
$tab = array('zero' => 0, 'un' => 1, 'deux' => 2);
foreach ($tab as $cle => $valeur)
{
echo 'la valeur de ' . $cle . ' est ' . $valeur . '<br />';
}
?>
On peut afficher le contenu d'un tableau directement avec la fonction print_r()
.
Une fonction est un bloc de code qui exécute des instructions qui dépendent de certains paramètres, et qui peut renvoyer une valeur.
La liste complète de fonctions PHP est ici.
Pour déclarer une fonction on fait :
<?php
function presentation($prenom, $nom)
{
return 'Je m\'appelle ' . $prenom . ' ' . $nom . '.';
}
?>
Ensuite, on peut l'appeler :
<?php
$nom_de_famille = 'Doe';
echo presentation('John', $nom_de_famille); // affiche "Je m'appelle John Doe."
?>
Une fonction remarquable : include()
.
On ajoute le contenu d'un fichier PHP dans un autre avec :
<?php
include('fichier.php');
?>
Ainsi, on peut séparer le code pour le rendre plus facile à comprendre, ou pour éviter d'écrire plusieurs fois le même code.
$_GET
On peut envoyer des variables à une page PHP avec la variable (tableau associatif) $_GET
.
Quand on ajoute à l'URL ?nom=Doe&prenom=John
, alors
<?php
echo $_GET['prenom']; // affiche "John"
echo $_GET['nom']; // affiche "Doe"
?>
On utilise la fonction isset()
pour vérifier que la variable est définie.
<?php
if (isset($_GET['prenom']))
{
echo $_GET['prenom'];
}
?>
$_POST
La variable $_POST
contient les valeurs envoyées avec un formulaire. Par exemple, si sur une page on a ceci :
<form method="post" action="cible.php">
<input type="text" name="commentaire" />
<input type="submit" value="Valider" />
</form>
Alors, dans le fichier cible.php
,
<?php
echo $_POST['commentaire']; // affiche le commentaire soumis dans le formulaire
?>
Il existe d'autres variables pour communiquer avec une page web : $_SESSION
et $_COOKIE
. En plus, on peut transférer des informations via des fichiers de texte.
$
echo
<php>
et </php>
<?php
$tab = array('zero' => 0, 'un' => 1, 'deux' => 2);
print_a($tab);
?>
Une base de données (BDD) est un système qui enregistre des informations classées et structurées.
Un système de gestion de base de données (SGBD) est un logiciel qui gère une base de données, comme MySQL, Oracle, MariaDB ...
On communique avec une BDD avec le langage SQL. Ce langage est commun à tous les SGBD (sauf pour les requêtes compliquées).
Une BDD est formée de tables. La BDD m3202td2 a les tables wp_commentmeta, wp_comments ...
Chaque table contient des champs (colonnes) et des entrées (lignes). Les champs de la table wp_commentmeta sont : meta_id, comment_id ...
On peut manipuler (voir, créer, modifier) une BDD avec le logiciel phpMyAdmin, au lieu de passer par SQL.
phpMyAdmin est installé avec XAMPP. Il est sur http://localhost/phpmyadmin/
.
Le module de PHP PDO sert à se connecter à une BDD.
Pour l'activer, on ouvre le fichier php.ini
et on supprime le point-virgule au début de la ligne
;extension=php_pdo_mysql.dll
Pour se connecter à une BDD :
<?php
$bdd = new PDO('mysql:host=localhost;dbname=m3202td2_bdd;charset=utf8',
'root',
'');
?>
Dans le premier paramètre, host est le nom d'hôte et dbname, le nom de la BDD. Les deux autres paramètres sont le login et le mot de passe.
Pour faire une requête SQL :
<?php
// prendre toutes les entrées de la table 'wp_posts'
$reponse = $bdd->query('SELECT * FROM wp_posts');
?>
Pour extraire chaque entrée :
<?php
// $donnees est un tableau associatif contenant une entrée
$donnees = $reponse->fetch();
?>
Exemple complet
<?php
try
{
/* On se connecte à la BDD.
* Le dernier paramètre affiche des messages d'erreur faciles à lire */
$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8',
'root',
'',
array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
/* En cas d'erreur, on affiche un message et on arrête tout,
* au lieu de montrer le code PHP */
die('Erreur : ' . $e->getMessage());
}
// Si ça marche, on continue
// On récupère tout le contenu de la table 'wp_posts'
$reponse = $bdd->query('SELECT * FROM wp_posts');
// On affiche chaque entrée une à une
while ($donnees = $reponse->fetch())
{
?>
<p>
<h2><?php echo $donnees['post_title']; ?></h2>
<?php echo $donnees['post_content']; ?>
</p>
<?php
}
$reponse->closeCursor(); // Termine le traitement de la requête
?>
<?php
// charger seulement le contenu de deux champs de la table
$reponse = $bdd->query('SELECT post_title, post_content
FROM wp_posts');
?>
<?php
// seulement les entrées avec commentaires
$reponse = $bdd->query('SELECT post_title, post_content
FROM wp_posts
WHERE comment_count > 0');
?>
<?php
// entrées triées par date décroissante
$reponse = $bdd->query('SELECT post_title, post_content
FROM wp_posts
WHERE comment_count > 0
ORDER BY post_date DESC');
?>
<?php
// seulement 5 entrées, commençant par l'entrée #15
$reponse = $bdd->query('SELECT post_title, post_content
FROM wp_posts
WHERE comment_count > 0
ORDER BY post_date DESC
LIMIT 15, 5');
?>
<?php
$req = $bdd->prepare('SELECT post_title
FROM wp_posts
WHERE post_author = ? AND post_status = ?');
$req->execute(array($_GET['author'],
$_GET['status']));
?>
Encore mieux :
<?php
$req = $bdd->prepare('SELECT post_title
FROM wp_posts
WHERE post_author = :author AND post_status = :status');
$req->execute(array('author' => $_GET['author'],
'status' => $_GET['status']));
?>
Ajouter une entrée à la BDD :
<?php
$req = $bdd->prepare('INSERT INTO wp_users(user_login, user_mail, display_name)
VALUES(:login, :email, :name)');
$req->execute(array('login' => $nom,
'email' => $adresse,
'name' => $nom_prenom));
?>
Modifier une entrée de la BDD :
<?php
// exec() renvoie le nombre d'entrées modifiées
$nb_modifs = $bdd->exec('UPDATE wp_users
SET display_name = \'Martin Marcantonio Luciano Scorsese\'
WHERE user_login = \'martin\''); // il faut échapper les guillemets !
echo $nb_modifs . ' entrées ont été modifiées.';
?>
Il y a encore plus de choses à savoir sur SQL :
AS
, GROUP BY
et HAVING
DATE
, TIME
...SELECT * FROM livres LIMIT 5, 10
SELECT * FROM wp_posts ORDER BY post_date LIMIT 15, 5 WHERE comment_count > 0
Soumettre une bonne (!) question sur ce qu'on a vu aujourd'hui dans «Question à rendre du CM n° 2»