• Aucun résultat trouvé

TD PHP/MySQL : Base de données de type Annuaire Votre base de données MySQL à UMLV s'appelle

N/A
N/A
Protected

Academic year: 2022

Partager "TD PHP/MySQL : Base de données de type Annuaire Votre base de données MySQL à UMLV s'appelle"

Copied!
7
0
0

Texte intégral

(1)

TD PHP/MySQL : Base de données de type Annuaire

Votre base de données MySQL à UMLV s'appelle votrelogin_db et est sur le serveur (hôte) sqletud.

Soit les tables suivantes : Table "t_personne" à 6 champs:

- num : tinyint, primaire, not null, auto-incrementation - nom : varchar(20), not null

- prenom : varchar(20), null

- titre : enum, taille/valeurs : '1','2','3' // 1 pour M. ; 2 pour Mme ; 3 pour Mlle.

- date_n : date, null // format iso AAAA-MM-JJ - service: varchar(4), null

Table "t_service" à 2 champs :

- code_service : varchar (4), not null, primaire - lib_service : varchar(20), not null

Table "t_loisir" à 2 champs :

- code_loisir : varchar (3), not null, primaire - lib_loisir : varchar(20), not null

CREATE TABLE t_loisir(

code_loisir VARCHAR(3) PRIMARY KEY, lib_loisir VARCHAR(20) NOT NULL);

INSERT INTO t_loisir VALUES('spo', 'Sporté');

INSERT INTO t_loisir VALUES('mus', 'Musique'), ('jeu', 'Jeux'), ('voy', 'Voyages');

Pages php à créer

1. Modifiez le formulaire de saisie form_BD.html pour que la liste des services provienne du contenu de la table t_service.

Le formulaire aura comme action l'appel d'une page recherche.php en méthode GET.

Rappel sans connexion BDD

<form action="insertion_service.php" method="get">

<p>Service

pers personnel prod productique comm commercial dvlp développement logi logistique

spo Sport mus Musique jeu Jeux voy Voyages

(2)

<select name="service">

<option value="" selected="selected">-- service --</option>

<option value="comm">Communication</option>

<option value="dvlp">Développement</option>

<option value="pers">Personnel</option>

<option value="prod">Production</option>

</select></p>

Insérer la connexion

<form action="insertion_service.php" method="get">

<?php

/* connexion à la base de données (a faire dès le début, en tout cas pas dans un formulaire, sinon message invisible) */

include('connexion.inc.php');

?>

//…///

Service <select name="service">

<option value="" selected="selected">-- service --</option>

<?php

$requete= "SELECT * FROM t_service;";

//$result=mysql_query($requete);

$result=mysqli_query($link,$requete);

while($ligne=mysqli_fetch_array($result)) echo '<option

value="'.$ligne['code_service'].'">'.$ligne['lib_service'].'</option>'."<br />\n";

?>

</select>

</p><p>

Loisirs <br />

<?php

$requete= "SELECT * FROM t_loisir;";

//$result=mysql_query($requete);

$result=mysqli_query($link,$requete);

while($ligne=mysqli_fetch_array($result)) {

echo '<input type="checkbox" name="loisirs[]" value="';

echo $ligne['code_loisir'];

echo '" />'.$ligne['lib_loisir']."<br/>\n";

}

//mysql_close();

mysqli_close($link);

?>

</p>

<p>

<input type="reset" name="reset" value="Effacez" />

<input type="submit" name="submit" value="Validez" />

</p>

</form>

</body>

</html>

(3)

Connexion.inc.php

<?php

/* Connexion au serveur et à la base de données */

// Avec fonctions mysql

include('parametre.inc.php') ; // ne pas nommer ce fichier par un nom si évident

! // require possible (arret script)

mysql_connect($host,$user,$pwd) or die('Connexion impossible au serveur...');

// ou mysql_connect(HOST,USER,PWD);

mysql_select_db($db) or die('Connexion impossible à la base de données...');

// Avec fonctions mysqli

$link=mysqli_connect($host,$user,$pwd,$db) or die('Connexion impossible à la base de données...');

// possible aussi sous forme de fonction connexion

// -> plus de souplesse au niveau du passage de paramètres

?>

parametre.inc.php

<?php

/* Paramètres de connexion */

$host="sqletud.univ-mlv.fr"; // en local

// ou sous forme de constante define('HOST','sqletud.univ-mlv.fr');

$user="login";

$pwd="password";

$db="login_db";

?>

2. Effectuez la même opération pour les loisirs afin que la liste des loisirs provienne du contenu de la table t_loisir..

<form action="insertion_loisir.php" method="get">

<input type="checkbox" name="loisirs[]" value="spo" /> Sports<br />

<input type="checkbox" name="loisirs[]" value="mus" /> Musique<br />

<input type="checkbox" name="loisirs[]" value="jeu" /> Jeux<br />

<input type="checkbox" name="loisirs[]" value="voy" /> Voyages<br />

</form>

<p>

<form action="insertion_loisir.php" method="get">

<?PHP

include('connexion.inc.php');

$requete= "SELECT * FROM t_loisir ";

$result=mysql_query($requete);

while($ligne=mysql_fetch_array($result)) echo '<input type="checkbox" name="loisirs[]"

value="'.$ligne['code_loisir'].'" /> '.$ligne['lib_loisir']."<br />\n";

mysql_close();

?>

</p>

</form>

Insertion dans une table à partir d'un formulaire

3. Créez un formulaire form_loisir.html permettant de saisir un code loisir et un libellé de loisir. Ce formulaire devra appeler le programme php « insertion_loisir.php ».

(4)

form_loisir.html

<form action="insertion_loisir.php" method="get">

<p>

Insérer un nouveau loisir dans la base de données<br />

<input type="text" name="code_loisir" />Code du loisir<br />

<input type="text" name="lib_loisir" />Libellé du loisir<br />

</p>

<p>

<input type="reset" name="reset" value="Effacez" /> <input type="submit"

name="submit" value="Insérez" />

</p>

</form>

4. Créez la page insertion_loisir.php qui insère un nouvel enregistrement dans la table t_loisir à partir de la saisie d'un nouveau loisir dans le formulaire form_loisir.html.

Elle affiche un message de confirmation (ex : L'enregistrement de code nat et de libellé Natation a bien été ajouté) sinon un message d’erreur sera ajouté.

Améliorez le programme pour être sûr que le programme a été appelé en passant par le formulaire.

Affichez un message d’erreur si ce n’est pas le cas.

Insertion_loisir.php

<?php

/* connexion à la base de données (a faire dès le début, en tout cas pas dans un formualire, sinon message invisible) */

include('connexion.inc.php');

/* Vérification du passage par le formulaire */

if (!isset($_GET['submit']) || $_GET['submit']!='Insérez')

echo "<p>Merci de passer par le formulaire form_loisir.html !</p>";

else{

/* Récupération des variables du formulaire */

$code_loisir=$_GET['code_loisir'];

$lib_loisir=$_GET['lib_loisir'];

$submit=$_GET['submit'];

$requete="INSERT INTO t_loisir VALUES ('".$code_loisir."', '".$lib_loisir."')";

//$result=mysql_query($requete) ;

$result=mysqli_query($link,$requete) ;

// ou pour tester ... or die ("la requete $requete ne passe pas") if ($result)

echo "<p>L'enregistrement de code <b>$code_loisir</b> et de libellé

(5)

5. Créez une page synthese.php qui affiche les services et le nombre de salariés par service.

<?php

/* connexion à la base de données (a faire dès le début, en tout cas pas dans un formualire, sinon message invisible) */

include('connexion.inc.php');

$requete= "SELECT lib_service , count(num) AS 'nombre' ";

$requete= $requete."FROM t_service , t_personne ";

$requete= $requete."WHERE code_service = service ";

$requete= $requete."GROUP BY lib_service ";

$result=mysql_query($requete);

while($ligne=mysql_fetch_array($result))

echo $ligne['lib_service']." - ".$ligne['nombre']."<br />\n";

?>

(6)

6. Créez une page liste.php qui affiche la liste triée des salariés sous la forme suivante :

<?PHP

include('connexion.inc.php');

$requete="SELECT num, nom, prenom, titre, date_n, service FROM t_personne";

// ou avec jointure (lib au lieude code) "SELECT num, nom, prenom, titre, date_n, lib_service FROM t_personne, t_service WHERE service=code_service";

// ou SELECT * FROM t_personne, t_service WHERE service=code_service; mais pas de foreach possible sur la ligne

$requete=$requete." order by nom, prenom, date_n";

//$result=mysql_query($requete);

$result=mysqli_query($link,$requete);

$nb=mysqli_num_rows($result);

echo "<p>Nombre d'enregistrements : $nb</p>\n ";

if ($nb<>0) {

$changecouleur=FALSE; // initialisation de la couleur de class des rangées

echo "<table>\n";

/* en-tête du tableau */

echo "<tr>

<th>N°</th><th>Nom</th><th>prénom</th><th>Titre</th><th>Date</th><th>Service</th>

</tr>\n";

while($ligne=mysqli_fetch_assoc($result)){ // ou mysqli_fetch_array ou mysqli_fetch_row($result)

$changecouleur=!$changecouleur; // inversion de couleur

echo '<tr class="rangee';

if ($changecouleur) echo '1'; else echo '2';// variante avec opérateur ternaire echo $coul=($changecouleur)? 1:2;

echo '">';

echo

'<td>'.$ligne['num'].'</td><td>'.$ligne['nom'].'</td><td>'.$ligne['prenom'].'</td

>';

echo

'<td>'.$ligne['titre'].'</td><td>'.$ligne['date_n'].'</td><td>'.$ligne['service']

.'</td>';

/* variante avec boucle sur tous les champs

(7)

7. Créez la page recherche.php. Quand on met un nom (ou seulement le début de nom) dans la zone de saisie du formulaire, cette page affiche la liste des enregistrements recherchés sous forme d'un tableau.

Ce programme est appelé par le formulaire de saisie réalisé au début du TP.

Améliorez votre programme pour que le nom contienne une partie du non saisi !

<?php

/* connexion à la base de données (a faire dès le début, en tout cas pas dans un formualire, sinon message invisible) */

include('connexion.inc.php');

$nom=$_GET['nom'];

$requete="SELECT * FROM t_personne WHERE nom LIKE '$nom%'";

$result=mysqli_query($link,$requete);

$nb=mysqli_num_rows($result);

echo "<p>Il y a $nb enregistrement(s) trouvé(s)</p>";

// ici pas de présentation élaborée, mais on peut faire un tableau echo '<p>';

while($ligne=mysqli_fetch_assoc($result)) // ou mysqli_fetch_array ou mysqli_fetch_row($result)

echo $ligne['num'].' - '.$ligne['nom'].' - '.$ligne['prenom'].' - '.$ligne['service']."<br />\n";

mysqli_close($link);

?>

8. Autres possibilités :

- Gérer l'absence de réponse par un message adapté (Il n'y a personne de ce nom là...).

- Classer (en SQL) le tableau dans l'ordre de nom, prénom.

- Afficher le titre en abrégé (Mlle, Mme, M.) plutôt que 3, 2 et 1.

- Afficher la date de naissance en format français usuel (JJ-MM-AAAA).

- Ajouter une colonne avec l'âge (rubrique SQL calculée).

- Afficher les lignes du tableau en 2 couleurs alternées.

- Afficher les loisirs choisis (liste séparée par des virgules).

- Prévoir une modification et une suppression de personne (par bouton de formulaire ou lien) à côté du nom de la personne.

Références

Documents relatifs

Calculating Array Differences Essentially the opposite of array_intersect, the function array_diff returns those values located in the first array that are not located in any of

La classe doit proposer un ensemble de méthodes pour créer tous les types de champs possibles dans un formulaire HTML, et disposer chaque champ en fonction du mode de présentation qui

Le premier appel à mysql_fetch_object: renvoie la première ligne du résultat sous forme d’objet. Chaque nouvel appel renvoie la

Gestionnaires et informaticiens intéressés dans la création et le développement de pages Web dynamiques interfacées avec une base de données.. PRE-REQUIS Maîtrise du HTML

 mysql_query permet pas seulement d’exécuter des requêtes SELECT, mais aussi toute autre requête.  Évidemment, s’il ne s’agit pas d’une requête SELECT, on ne fera pas

Un attribut de type SET peut prendre pour valeur la chaîne vide, NULL ou une chaîne contenant une liste de valeurs qui doivent être déclarées lors de la.. définition de

You can use one of the append write modes (see Table 7-5), or you can simply open a file for reading and writing with one of the other modes that supports writing, and move the

• Dans les exemples, quand on fait du DML, vérifier le résultat avec un script MySQL, soit dans phpMyAdmin, soit dans un client MySQL.. • Une page pour l’affichage des