Cours 3 - Pages web avec connexion à une base de données

Conception de Sites Web dynamiques 2024-2025

Difficultés identifiées

  • Difficultés “technologiques” liées aux installations :

    • CREMI : espaces/www/cswd/…
    • MAMP/Wampserver/XAMPP
    • Filezilla / canal de stockage
  • Difficultés de compréhension des énoncés TD

  • Difficultés algorithmiques

    • for, if, if dans for, etc.
  • Difficultés syntaxiques

    • oubli de ;, = au lieu de ==, oublie de `}``
  • Difficultés de “mélange” de différents langages : HTML, CSS, PHP, MySQL (et bientôt JavaScript)

  • Difficultés méthodologiques

    • non-lecture des cheatsheet et supports des cours
    • non-lecture des
    • entrer question dans une IA LLM sans comprendre la réponse
  • Difficultés de volonté/aménagement de travail

Programme

  • HTML Formulaires
  • PHP : récupération de données des formulaires
  • Base de données
  • Liaison PHP avec vos bases de données

Architecture Client-Serveur

Formulaires

Motivation

  • Pour l’instant, passage de paramètres via l’URL :

http://.../index.php?nom=Lisa

  • Comment passer des paramètres sans éditer l’URL ?

Solution :

  • Formulaires !

Formulaires

Exemples

Formulaires

Formulaires

Les formulaires

  • Définissent un ensemble de champs de saisie
  • Permettent de soumettre l’ensemble des valeurs des champs, en une fois, au serveur

Le serveur

  • Traite ces informations au moyen d’un script php (par exemple)
  • Génère en retour un flot HTML qui peut encore être un formulaire (ré-essai ou procédure suivante)

Formulaires

Formulaires

Formulaires

Formulaires

Formulaires

Formulaires

GET

  • Les paramètres sont visibles dans l’URL
  • Mieux pour trouver des erreurs
  • Restrictions de longueur
  • Seulement pour récupérer des données
  • Ne doit pas être utilisé pour des données sensibles (mots de passe, …)
  • Reste dans l’historique dans le navigateur
  • Peuvent être mis dans le cache
  • Peuvent être mis dans les favoris

POST

  • Les paramètres ne sont pas visibles dans l’URL(mots de passe p.ex)
  • Pas de restrictions de longueur
  • Pour des données sensibles (mots de passe, …)

Rappel PHP: Récupération de paramètres

<?php
  $nombre1 = $_GET['nombre1'];
  echo $nombre1;
?>

Rappel PHP: Récupération de paramètres : fonction isset

<?php
if (isset($_GET['nombre1']))
    $nombre1 = $_GET['nombre1'];
else
{
    $nombre1 = 1;
     // valeur par défaut
}
?>

Rappel PHP: Récupération de paramètres : fonction empty

<?php
if (!empty($_GET['nombre1']))
    $nombre1 = $_GET['nombre1'];
else
{
    $nombre1 = 1;
     // valeur par défaut
}
?>

Rappel PHP: Récupération de plusieurs paramètres

<?php
  $prenom = $_GET['prenom'];
  $nom = $_GET['nom'];
  $datenaissance = $_GET['datenaissance'];
  echo $prenom ;
  echo $nom ;
  echo $datenaissance ;
?>

Rappel PHP : Tableaux

  • Tableaux indexés
<?php
$jours = array(); 
$jours[0] = "Lundi"; 
$jours[1] = "Mardi"; 
$jours[2] = "Mercredi"; 
$jours[3] = "Jeudi"; 
$jours[4] = "Vendredi"; 
$jours[5] = "Samedi"; 
$jours[6] = "Dimanche"; 
?>

Rappel PHP : Tableaux

  • Tableaux indexés
<?php
$jours = array(); 
$jours[0] = "Lundi"; 
$jours[1] = "Mardi"; 
$jours[2] = "Mercredi"; 
$jours[3] = "Jeudi"; 
$jours[4] = "Vendredi"; 
$jours[5] = "Samedi"; 
$jours[6] = "Dimanche"; 

$nombreElements = count($jours);

for ($i=0; $i<$nombreElements; $i++)
{
    echo $jours[$i];
}

?>

Rappel PHP : Tableaux

  • Tableaux associatifs (dictionnaires)
<?php
$personne['nom'] = "Lafarge"; 
$personne['prenom'] = "Patxi"; 
$personne['codepostal'] = "33100";
?>

Rappel PHP : Tableaux

  • Tableau indexé d’un tableau associatif (dictionnaires)
<?php
$personnes = array(); 
$personnes[0]['nom'] = "Lafarge"; 
$personnes[0]['prenom'] = "Patxi"; 
$personnes[0]['codepostal'] = "33100";
$personnes[1]['nom'] = "Errecaret"; 
$personnes[1]['prenom'] = "Amaia"; 
$personnes[1]['codepostal'] = "64100";
?>

Rappel PHP : Tableaux

  • Tableau indexé d’un tableau associatif (dictionnaires)
<?php
$personnes = array(); 
$personnes[0]['nom'] = "Lafarge"; 
$personnes[0]['prenom'] = "Patxi"; 
$personnes[0]['codepostal'] = "33100";
$personnes[1]['nom'] = "Errecaret"; 
$personnes[1]['prenom'] = "Amaia"; 
$personnes[1]['codepostal'] = "64100";

$nombreElements = count($personnes);

for ($i=0; $i<$nombreElements; $i++)
{
    echo $personnes[$i]['nom'];
    echo $personnes[$i]['prenom'];
    echo $personnes[$i]['codepostal'];
}

?>

Connexion à une base de données (BDD)

Base de données - Terminologie

  • Base de données (database)
  • Table (table)
  • Enregistrement (record)
  • Champ (field)

Distinction : Structure / données

Exemple :

  • Structure : 1 base de données avec 2 tables consistant de 5 champs chacune
  • Données : 3 enregistrements par table

Architecture Client-Serveur avec connexion BDD

BDD : Tables

Exemple : Table commentaire

Conventions des noms des tables dans CSWD

  • minuscules
  • pas de caractères spéciaux
  • singulier
  • pour chaque table, renseignez quelques enregistrements

BDD : Instructions MySQL sur une table

CRUD : (create, read, update, delete)

  • INSERT : Insérer un enregistrement (create))

  • SELECT : Sélectionner des enregistrements (read))

  • UPDATE : Mettre à jour des champs des enregristrements (update))

  • DELETE : Effacer des enregistrements (delete))

MySQL

Les instructions les plus courantes pour manipuler les données MySQL sont décrites ci-dessous :

Commande SQL Explication Opération CRUD
INSERT Permet d’ajouter un ou plusieurs enregistrements à une table. (Create)
SELECT Permet de récupérer un ou plusieurs enregistrements d’une table. (Read)
UPDATE Permet de modifier un ou plusieurs enregistrements d’une table. (Update)
DELETE Permet d’effacer un ou plusieurs enregistrements d’une table. (Delete)

CRUD : Read

Instruction MySQL : SELECT :

<?php
// inclure la connexion à la base de données
require_once "connexion_base.php";

$requete  = "SELECT * FROM livreor;        ";
$reponse = $pdo->prepare($requete);
$reponse->execute();

// récupérer tous les enregistrements dans un tableau
$enregistrements = $reponse->fetchAll();

// connaitre le nombre d'enregistrements
$nombreReponses = count($enregistrements);

Parcourir les éléments :

// parcourir le tableau des enregistrements
for ($i=0; $i<count($enregistrements); $i++)
{
    echo $enregistrements[$i]['nom'];
    echo $enregistrements[$i]['texte'];
    echo $enregistrements[$i]['date'];
} 
?>

CRUD : Create

<?php
$nom = "Lafontaine"; // ou p.ex. récupération depuis un formulaire
$texte = "Article très intéressant"; // ou p.ex. récupération depuis un formulaire
// exécuter une requete MySQL de type INSERT
$requete="INSERT INTO commentaire (nom, texte, date) VALUES (?,?,NOW())";
$reponse=$pdo->prepare($requete);
$reponse->execute(array($nom, $texte));
?>