Ici nous utiliserons le langage php en version 5, il y a des versions plus récentes donc quelques modifications, ex: pdo... ( vérifiez bien que vous êtes en, php 5 dans Uwamp ).
imaginons que nous soyons un site de critique de cinéma, nous allons proposer à l'utilisateur (préalabrement identifieé) de renseigner notre base de données en indiquant un genre,un réalisateur, une année,un titre, une note et un résumé
Nous voulons permettre à l'utilisateur d'entrer ses films, pour cela il faut définir les attributs de la table:
nous choisirons: genre, réalisateur, année, titre, note et résumé mais vous pouvez en ajouter ou modifier le contexte.
Donc nous allons créer cette table avec 7 colonnes mais il n’y a que 6 champs? Tiens tiens, qui sait pourquoi?
La page suivante vous demande de créer les champs :
vous devriez obtenir ça si vous avez bien renseigné les domaines
Là encore on peut tout modifier...
C’est déjà pas mal, mais ce serait mieux si on pouvait faire la même chose à partir d’un formulaire
Vous devriez avoir:
<?php
function connectMaBase(){
$base = @mysql_connect ('localhost', 'root', 'root');
mysql_select_db ('Critique', $base) ;
}
?>
Contient le script de connexion à la base ``Critique``
``localhost`` est le nom du serveur local
``root`` est le nom d’utilisateur et ``root`` le mot de passe de connexion
``$base`` est la variable où l’on stocke la requête
<?php
include("fonctions.php");
?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Formulaire de saisie utilisateur </title>
<link href="style.css" rel="stylesheet" media="all" type="text/css">
</head>
<body>
<h1 align=center>TP BDD</h1><br>
</body>
</html>
Pour l’instant c’est une page web classique, avec au début l’inclusion du fichier fonctions.php qui permet de se connecter à la base
Si maintenant vous cliquez sur form.php vous verrez s’afficher une page web (très basique)
Et oui, j'ai mis une image, rien de mieux que la pratique pour assimiler😜
C'est magnifique mais totalement inutile car il n'y a pas de requêtes🤪
Vous devez donc insérer le code suivant dans la balise section en complétant la requête sql
<?php
if (isset($_POST['valider'])){
//On récupère les valeurs entrées par l'utilisateur :
$genre=$_POST['genre']; $réalisateur=$_POST['réalisateur'];
$annee=$_POST['annee'];
$note=$_POST['note'];
$titre=$_POST['titre'];
$commentaire=$_POST['commentaire'];
//On se connecte
connectMaBase();
//On prépare la commande sql d'insertion
$sql = '........................... (NULL,"'.$genre.'","'.$réalisateur.'","'.$annee.'","' . $note.'","'.$titre.'","'.$commentaire.'")';
/*on lance la commande (mysql_query) et au cas où,
on rédige un petit message d'erreur si la requête ne passe pas (or die)
(Message qui intègrera les causes d'erreur sql)*/
mysql_query($sql) or die ('Erreur SQL !'.$sql.'
'.mysql_error());
// on ferme la connexion
mysql_close();
// si tout s'est bien passé on reçoit un message (popup)
$message='Vos données ont bien été enregistrées';
echo '<script type="text/javascript">window.alert("'.$message.'");</script>';
}
?>
Quelques remarques : En php, une ligne de commentaire se signale avec un double slash (comme en java) Ce script n’est lancé que si l’on a cliqué sur le bouton ‘OK’ ( if(…)) Attention à la syntaxe (compliquée je le concède) Pour cette requête il faut bien respecter l’ordre des champs de votre base de données. Le premier champ qui est auto-incrémenté doit être vide ("") Les champs sont séparés par des virgules "'.$nom_de_la_variable.'" la variable est donc entre points puis quotes puis guillemets. Réalisez plusieurs enregistrements, et vérifiez dans PhpMyAdmin qu’ils y sont bien…
<?php
include("fonctions.php");
?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>Formulaire de saisie utilisateur </title>
<link href="style.css" rel="stylesheet" media="all" type="text/css">
</head>
<body>
<h1 align=center>TP-BDD</h1><br>
<section>
<h1>Fiche ciné</h1>
<form name="inscription" method="post" action="form.php">
<h2>Cochez le genre du film</h2>
<input type="radio" name="genre" value="Humour"/>Humour. <br/>
<input type="radio" name="genre" value="Science Fiction"/>Science Fiction. <br/>
<input type="radio" name="genre" value="Fantasy"/>Fantastique. <br/>
<input type="radio" name="genre" value="manga"/>Animé. <br/>
<input type="radio" name="genre" value="Historique"/>Historique. <br/><br/>
Entrez le nom du réalisateur : <input type="text" name="réalisateur"/> <br/>
L'année de publication <input type="number" name="annee"/><br/>
votre note sur 20: <input type="number" name="note"/><br/>
Le titre du film : <input type="text" name="titre"/><br/>
<h2> Résumé</h2>
<TEXTAREA name="commentaire" rows=10 COLS=40></TEXTAREA><br/>
<input type="submit" name="valider" value="OK"/>
</form>
<?php
if (isset($_POST['valider'])){
//On récupère les valeurs entrées par l'utilisateur :
$genre=$_POST['genre']; $réalisateur=$_POST['réalisateur'];
$annee=$_POST['annee'];
$note=$_POST['note'];
$titre=$_POST['titre'];
$commentaire=$_POST['commentaire'];
//On se connecte
connectMaBase();
//On prépare la commande sql d'insertion
$sql = 'INSERT INTO films VALUES (NULL,"'.$genre.'","'.$réalisateur.'","'.$annee.'","' . $note.'","'.$titre.'","'.$commentaire.'")';
/*on lance la commande (mysql_query) et au cas où,
on rédige un petit message d'erreur si la requête ne passe pas (or die)
(Message qui intègrera les causes d'erreur sql)*/
mysql_query($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error());
// on ferme la connexion
mysql_close();
// si tout s'est bien passé on reçoit un message (popup)
$message='Vos données ont bien été enregistrées';
echo '<script type="text/javascript">window.alert("'.$message.'");</script>';
}
?>
</section>
</body>
</html>
1. On se connecte à la base (en utilisant notre fonction de connexion toute prête). 2. On prépare la commande sql en la stockant dans une variable PHP du type $sql (pour langage sql). 3. On la lance, en récupérant le résultat dans une variable que nous appellerons $req (pour requête sql et qui sera un tableau). 4. On scanne $req avec une boucle while et grâce à la fonction mysql_fetch_array($req), chaque élément de ce tableau se convoquera ainsi : $data['champ']. 5. Maintenant qu'on a tout récupéré dans des variables "solides" PHP, on libère la mémoire sql mobilisée par cette requête. 6. On ferme la connexion sql.
<section>
<?php
//On se connecte
connectMaBase();
// On prépare la requête qui va mettre dans un tableau tout ce qui concerne le réalisateur Tim Burton ( pas un très bon exemple car il y a prénom et nom mais j'aime ce réalisateur)
$sql = 'SELECT * FROM Films WHERE realisateur="Tim Burton"';
// On lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas (or die)
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
//on organise $req en tableau associatif $data['champ']
//en scannant chaque enregistrement récupéré
//on en profite pour gérer l'affichage
//titre de la section avant la boucle
echo'<h2>Fiche de : Tim Burton </h2>';
//boucle
while ($data = mysql_fetch_array($req)) {
// on affiche les résultats
echo 'Titre :<strong>'.$data['titre'].'</strong><br/>';
echo 'Référencé sous le n° : <strong>'.$data['id'].'</strong><br/>';
echo 'Genre :'.$data['genre'].'<br/>';
echo 'Année :'.$data['annee'].'<br/>';
echo 'Note:'.$data['note'].'<br/>';
echo 'Commentaire :'.$data['resume'].'<br/><br/><br/>';
}
//On libère la mémoire mobilisée pour cette requête dans sql
//$data de PHP lui est toujours accessible !
mysql_free_result ($req);
//On ferme sql
mysql_close ();
?>
</section>
<?php include("fonctions.php"); ?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Informations </title>
<link href="style.css" rel="stylesheet" media="all" type="text/css">
</head>
<body>
<h1 align=center>TP-BDD</h1><br>
<section>
<?php //On se connecte
connectMaBase();
// On prépare la requête qui va mettre dans un tableau tout ce qui concerne le réalisateur
$sql = 'SELECT * FROM Films WHERE realisateur="Tim Burton"';
// On lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas (or die)
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
//on organise $req en tableau associatif $data['champ']
//en scannant chaque enregistrement récupéré
//on en profite pour gérer l'affichage
//titre de la section avant la boucle
echo'<h2>Fiche de : Tim Burton </h2>';
//boucle
while ($data = mysql_fetch_array($req)) {
// on affiche les résultats
echo 'Titre :<strong>'.$data['titre'].'</strong><br/>';
echo 'Référencé sous le n° : <strong>'.$data['id'].'</strong><br/>';
echo 'Genre :'.$data['genre'].'<br/>';
echo 'Année :'.$data['annee'].'<br/>';
echo 'note :'.$data['note'].'<br/>';
echo 'Résumé :'.$data['resume'].'<br/><br/><br/>'; }
//On libère la mémoire mobilisée pour cette requête dans sql
//$data de PHP lui est toujours accessible !
mysql_free_result ($req);
//On ferme sql
mysql_close (); ?>
</section>
</body>
</html>
<?php
include("fonctions.php");
?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Formulaire de saisie utilisateur </title>
<link href="style.css" rel="stylesheet" media="all" type="text/css">
</head>
<body>
<h1 align=center>TP-BDD</h1><br>
<section>
<h2>Choisissez le champ qui vous intéresse et entrez manuellement un critère</h2>
<h4>Une absence de critères vous montre toutes les données du champ</h4>
<!-- Commentaires HTML On construit une liste déroulante ( un select et plusieurs options) Chaque option sera remplie par une donnée SQL récupérée par notre requête PHP -->
<form method="post" action="recherche.php"> <select name="champ">
<?php
//On se connecte
connectMaBase();
//On prépare la requête SQL qui récupère les champs
$sql = 'Show fields from films';
/* On lance la requête (mysql_query) et on impose un message d'erreur si la requête ne passe pas (or die) */
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
//On scanne le résultat et on construit chaque option avec
while($data = mysql_fetch_array($req)){
// on affiche chaque champ
echo '<option name="'.$data['Field'].'">'.$data['Field'].'</option>'; }
//On libère mysql de cette première requête
mysql_free_result ($req);
//On ferme le select
?>
</select>
Entrez votre critère de sélection sur ce champ : <input type="text" name="critere" />
<input type="submit" name="Valider" value="OK" />
</form> <!-- On ferme le formulaire -->
<?php //On traite le formulaire
if(isset($_POST['Valider'])){ $champ=$_POST['champ']; $critere=$_POST['critere'];
// On prépare la requête
//requête différente selon qu'on veut tout le champ
//ou un champ avec une condition
if(($critere=='')||($critere==NULL)){
$sql='SELECT '.$champ.' FROM films'; }
else{
$sql = 'SELECT * FROM films WHERE '.$champ.'="'.$critere.'"'; }
/* On lance la requête (mysql_query) et on impose un message d'erreur si la requête ne passe pas (or die)*/
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
//Affichage du résultat
echo'<h2>Résultat</h2>';
//On scanne chaque résultat et affiche
while($data = mysql_fetch_array($req)){
/* on affiche les résultats C'est pas très propre mais la fonction print_r vous permet de tout voir sur votre objet tableau : Quand vous êtes complètement perdu sur ce que votre tableau est censé comporter : Tapez cette commande print_r($tableau), vous retrouverez facilement la structure du tableau (index et valeurs)*/
print_r($data);
echo'<br/><br/><br/>'; }
//On libère la mémoire mobilisée pour cette seconde requête dans SQL
mysql_free_result ($req);
//On ferme sql
mysql_close (); } ?>
</section>
</body>
</html>
Prenez le temps d'analiser la page et son fonctionnement
Il existe sur internet beaucoup de tutoriel sur ce sujet plus ou moins abordable suivant vos connaissances (ce TP vous donne déjà une première approche) .
Vous pouvez développer ou reprendre l'architecture en utilisant plusieurs tables pour effectuer des jointures
J'espère que ça vous a donné des idées de projet 😉