« SPARQL Protocol and RDF Query Language/Travail pratique/PHP avec MySQL » : différence entre les versions

Une page de Wikiversité, la communauté pédagogique libre.
Contenu supprimé Contenu ajouté
Aucun résumé des modifications
m Relecture
Ligne 1 : Ligne 1 :
{{Travail pratique présentation
{{ébauche informatique}}
| objectif1 = établir une connexion à une base de données MySQL

| objectif2 = modifier des données
| objectif3 = afficher des données
| objectif4 = rechercher des données
| durée = 1,5 heure
| matériel1 = un serveur Web Linux avec PHP.
}}
<div style="float:right; padding: 0 0 0 1em;">__TOC__</div>
{{Travail pratique
{{Travail pratique
| titre = MySQL
| titre = MySQL
Ligne 9 : Ligne 16 :
| précédent = [[../PHP les fonctions/]]
| précédent = [[../PHP les fonctions/]]
| suivant = [[../PHP avec SPARQL/]]
| suivant = [[../PHP avec SPARQL/]]
| niveau = ?
| niveau = 0
}}
}}


== Introduction ==
== Introduction ==
Dans ce TP, nous allons enregistrer nos CV dans la base de données MySQL que nous avons créé dans le [[SPARQL Protocol and RDF Query Language/Travail pratique/Initiation à MySQL|TP Initiation à MySQL]]
Dans ce TP, nous allons enregistrer nos CV dans la base de données MySQL que nous avons créée dans le TP "[[SPARQL Protocol and RDF Query Language/Travail pratique/Initiation à MySQL|TP Initiation à MySQL]]".


Ce TP a pour objectif de comprendre comment une base données est utilisée par un langage comme PHP pour pouvoir appliquer ensuite cette méthode avec SPARQL.
Ce TP a pour objectif de comprendre comment une base de données est utilisée par un langage comme PHP, pour pouvoir appliquer ensuite cette méthode avec SPARQL.

=== Durée du TP ===

'''?? heures'''

=== Matériel du TP ===
Il vous faut avoir fait tous les TPs précédent.


== A savoir avant de commencer ==
== A savoir avant de commencer ==
Pour rappel:
Pour rappel:
* le code HTML ne sert qu'à l'affichage.
* Le code HTML ne sert qu'à l'affichage.
* Le code PHP sert à créer un HTML dynamique
* Le code PHP sert à créer un HTML dynamique.


Cependant, PHP n'a pas le "pouvoir" de mémoriser des données entre deux chargements de page. A moins que vous transmettez des données d'une page web à l'autre, via un formulaire HTML !
Cependant, PHP n'a pas le "pouvoir" de mémoriser des données entre deux chargements de page. A moins que vous transmettiez des données d'une page Web à l'autre, via un formulaire HTML !


Si vous voulez conserver sur la durée les données entrées par les visiteurs de votre site via votre formulaire, de manière automatique et sans plus vous occuper de rien, vous devrez l'alimentation de vos bases de données.
Si vous voulez conserver sur la durée les données entrées par les visiteurs de votre site via votre formulaire, de manière automatique et sans plus vous occuper de rien, vous devrez utiliser une base de données.


== TP Base de données ==
== TP Base de données ==
De même que PHP vous permet de créer un langage HTML plus dynamique et personnalisé, il permet aussi de créer vos requêtes SQL de façon à automatiser l'alimentation de vos bases de données.


Pour le démontrer, nous allons créer un formulaire qui permettra de stocker les CV dans votre base de données.
De même que PHP vous permet de créer un langage HTML plus dynamique et personnalisé, il permettra aussi de créer vos requêtes SQL de façon à automatiser l'alimentation de vos bases.

Pour le démontrer, nous allons créer un formulaire qui permettra de stocker les CV dans votre BDD.

=== Connexion ===
=== Connexion ===
Pour utiliser une base de données, il faut se connecter à celle-ci. Chaque base de données SQL a sa propre méthode de connexion. Ici, nous n'allons étudier que la méthode avec une base de données MySQL.
Pour utiliser une base de données, il faut se connecter à celle-ci. Chaque base de données SQL a sa propre méthode de connexion. Ici, nous n'allons étudier que la méthode avec une base de données MySQL.


==== Configurer la connexion ====
==== Configurer la connexion ====
On met les paramètres de connexion dans une fonction dans notre fichier fonctions.php par exemple :
On met les paramètres de connexion dans une fonction, dans notre fichier fonctions.php par exemple :
<source lang="php">
<source lang="php">
<?php
<?php
Ligne 52 : Ligne 50 :
?>
?>
</source>
</source>
* la variable $base contient l'objet de connexion à votre base de données (ou BDD) avec:
* la variable $base contient l'objet de connexion à votre base de données (BDD) avec:
** le nom du serveur (ici localhost ou 127.0.0.1 c'est équivalents),
** le nom du serveur (ici localhost ou 127.0.0.1 c'est équivalents),
** le nom de l'utilisateur (ici root qui signifie administrateur de votre BDD)
** le nom de l'utilisateur (ici root qui signifie administrateur de votre BDD)
** Et enfin remplacer le texte VOTRE_MOT_DE_PASSE par votre mot de passe.
** remplacer le texte VOTRE_MOT_DE_PASSE par votre mot de passe.
* La ligne suivante lance la commande de sélection avec le nom de votre BDD et l'objet de connexion...
* La ligne suivante lance la commande de sélection avec le nom de votre BDD et l'objet de connexion...


==== Ouvrir la connexion ====
==== Ouvrir la connexion ====
Pour appeler la fonction, il vous faudra :
Pour appeler la fonction, il vous faudra :
# dans le fichier form.php écrire un include du fichier fonctions.php,
# dans le fichier form.php : écrire un include du fichier fonctions.php
# placer la fonction à l'endroit opportun par la ligne suivante:
# placer la fonction à l'endroit opportun avec la ligne suivante :
<source lang="php">
<source lang="php">
<?php
<?php
Ligne 69 : Ligne 67 :
==== Fermer la connexion ====
==== Fermer la connexion ====
Quand on rédige une commande SQL via PHP, on procède ainsi:
Quand on rédige une commande SQL via PHP, on procède ainsi:
# on se connecte à la base (en utilisant notre fonction de connexion),
# on se connecte à la base (en utilisant notre fonction de connexion)
# on prépare la commande SQL en la stockant dans la variable $sql,
# on prépare la commande SQL en la stockant dans la variable $sql
# on l'exécute,
# on l'exécute
# on ferme la connexion avec la fonction PHP suivante.
# on ferme la connexion avec la fonction PHP suivante
<source lang="php">
<source lang="php">
<?php
<?php
Ligne 81 : Ligne 79 :


=== Insérer des données ===
=== Insérer des données ===
Dans le fichier php pour faire une insertion, on écrira par exemple :
Dans le fichier php, pour faire une insertion, on écrira par exemple :
<source lang="php">
<source lang="php">
<?php
<?php
Ligne 88 : Ligne 86 :
$age=$_POST['age'];
$age=$_POST['age'];
$sexe=$_POST['sexe'];
$sexe=$_POST['sexe'];
//On créée une variable date du jour grâce à la fonction date() de PHP
//On crée une variable date du jour grâce à la fonction date() de PHP
$today = date("d.m.y");
$today = date("d.m.y");
//On se connecte
//On se connecte
Ligne 110 : Ligne 108 :
?>
?>
</source>
</source>
* La première valeur est laissée vide car c'est la place de l'ID qui doit s'auto-incrémenter.
* La première valeur est laissée vide, car c'est la place de l'ID qui doit s'auto-incrémenter.
** Si vous l'oubliez, il vous renverra un message d'erreur SQL disant que le nombre de données insérées ne coïncident pas avec le nombre de champs...
** Si vous l'oubliez, vous aurez un message d'erreur SQL indiquant que le nombre de données insérées ne coïncide pas avec le nombre de champs.
* Les autres définitions de valeurs de type texte sont contruit à l'aide de variable PHP d'où l'utilisation de simple quote (comme pour le HTML).
* Les autres définitions de valeurs de type texte sont construites à l'aide de variables PHP, d'où l'utilisation de guillemets simples (comme pour le HTML).




'''Exercice :''' SANS COPIER COLLER, vous allez :
'''Exercice :''' SANS COPIER COLLER, vous allez :
* Reprendre votre projet Eclipse pour que le CV soit enregistré dan votre nouvelle BDD.
* Reprendre votre projet Eclipse pour que le CV soit enregistré dans votre nouvelle BDD.
* Pour récupérer l’ID généré après un insert SQL utiliser la fonction : mysql_insert_id()
* Pour récupérer l’ID généré après un insert SQL, utiliser la fonction : mysql_insert_id()
*N’oubliez pas tester après chaque ajout dans le code.
*N’oubliez pas de tester après chaque ajout dans le code.
* Si vous ne trouvez pas l’erreur, utilisez les commentaires et le débuggueur
* Si vous ne trouvez pas l’erreur, utilisez les commentaires et le débuggueur.
{{solution|contenu=
{{solution|contenu=
Avec la nouvelle fonction connectMaBase, voici le fichier fonctions.php :
Avec la nouvelle fonction connectMaBase, voici le fichier fonctions.php :
Ligne 207 : Ligne 205 :
/*on lance la commande (mysql_query) et au cas où,
/*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)
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)*/
(Message qui intégrera les causes d'erreur sql)*/
mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error());
mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error());
//récupére la clé du CV pour l'associer aux expériences
//récupère la clé du CV pour l'associer aux expériences
$last_CV_ID = mysql_insert_id();
$last_CV_ID = mysql_insert_id();
Ligne 245 : Ligne 243 :


=== Afficher des données ===
=== Afficher des données ===
On a déjà utilisé la syntaxe SQL d'une simple requête pour récupérer des données dans un TP précédent: pour récupérer tous les CVs concernant Toto par exemple.
On a déjà utilisé la syntaxe SQL d'une simple requête pour récupérer des données dans un TP précédent : pour récupérer tous les CV concernant Toto par exemple.
<source lang="sql">
<source lang="sql">
SELECT * FROM CVs WHERE nom= "Toto"
SELECT * FROM CVs WHERE nom= "Toto"
Ligne 257 : Ligne 255 :
</source>
</source>


'''On récupère ainsi un tableau associatif qui a pour indice: le nom de chaque champ.'''
'''On récupère ainsi un tableau associatif qui a pour indice : le nom de chaque champ.'''




Ligne 264 : Ligne 262 :
# On prépare la commande SQL en la stockant dans la variable $sql.
# On prépare la commande SQL en la stockant dans la variable $sql.
# On exécute la requête, en récupérant le résultat dans une variable que nous appellerons $req.
# On exécute la requête, en récupérant le résultat dans une variable que nous appellerons $req.
# Si c'est un tableau : On parcourt $req avec une boucle while (car on ne sait pas toujours le nombre de champs, ni d'enregistrements envoyer par notre base de données)
# Si c'est un tableau : on parcourt $req avec une boucle while (car on ne sait pas toujours le nombre de champs, ni d'enregistrements envoyés par notre base de données)
#* A chaque itération la fonction mysql_fetch_array($req) instancie la variable $data
#* à chaque itération, la fonction mysql_fetch_array($req) instancie la variable $data
#* chaque champ de l'enregistrement est accessible via la commande : $data['champ']
#* chaque champ de l'enregistrement est accessible via la commande : $data['champ']
# Maintenant qu'on a tout récupéré dans des variables PHP, on libère la mémoire de MySQL mobilisée par cette requête.
# Maintenant qu'on a tout récupéré dans des variables PHP, on libère la mémoire de MySQL mobilisée par cette requête.
Ligne 301 : Ligne 299 :


=== Rechercher des données ===
=== Rechercher des données ===
Nous avons un formulaire qui enregistre des CVs et une page page qui peut les afficher. Il nous faut maintenant une page pour retrouver des CVs. Cette page se nomme un formulaire de recherche et ce formulaire peut contenir un ou plusieurs critères de recherche. Un critère peut être la mobilité d'un candidat, son niveau en langue ou encore son expérience.
Nous avons un formulaire qui enregistre des CV et une page qui peut les afficher. Il nous faut maintenant une page pour retrouver des CV. Cette page est un formulaire de recherche ; ce formulaire peut contenir un ou plusieurs critères de recherche. Un critère peut être la mobilité d'un candidat, son niveau en langue ou encore son expérience.


Pour notre TP, nous allons laisser à l'utilisateur le choix de son critère de recherche : un utilisateur entrera dans un formulaire son critère. C'est une option peu ergonomique car cela peut troubler les utilisateurs non informaticiens. Cependant, cela sera un bon exemple pour l'utilisation de SQL.
Pour notre TP, nous allons laisser à l'utilisateur le choix de son critère de recherche : l'utilisateur entrera son critère dans un formulaire. C'est une option peu ergonomique, car cela peut troubler les utilisateurs non informaticiens. Cependant, cela sera un bon exemple pour l'utilisation de SQL.


Cela signifie que l'on veut obtenir une variable $sql du type :
Cela signifie que l'on veut obtenir une variable $sql du type :
Ligne 310 : Ligne 308 :
</source>
</source>
* Il faut pouvoir proposer un formulaire où l'utilisateur entrera son choix de champ et la valeur attendue...
* Il faut pouvoir proposer un formulaire où l'utilisateur entrera son choix de champ et la valeur attendue...
* Il faut donc construire la liste de champs sous forme de liste déroulante en lisant le contenu de la BDD une première fois : car l’utilisateur n'est pas censé connaître le contenu de la BDD
* Il faut donc construire la liste de champs sous forme de liste déroulante en lisant le contenu de la BDD une première fois, car l’utilisateur n'est pas censé connaître le contenu de la BDD.


<source lang="php">
<source lang="php">
Ligne 338 : Ligne 336 :
</source>
</source>


'''Exercice''' : Vous allez maintenant faire une page pour rechercher un CV. Dans une page PHP index.php, vous allez faire le formulaire :
'''Exercice''' :
Vous allez maintenant créer une page pour rechercher un CV. Dans une page PHP index.php, vous allez créer le formulaire :
<source lang="text">
<source lang="text">
Rechercher dans [liste champs]|V| [________] [Chercher]
Rechercher dans [liste champs]|V| [________] [Chercher]
</source>
</source>
# Faire le formulaire ci-dessus dont voici la description :
# Créez le formulaire ci-dessus, dont voici la description :
#* [liste champs]|V| est un champ Select qui contient la liste des champs de la table Expériences.
#* [liste champs]|V| est un champ Select qui contient la liste des champs de la table Expériences.
#* [________] est un champ texte
#* [________] est un champ texte
#* [Chercher] est un bouton pour lancer la recherche
#* [Chercher] est un bouton pour lancer la recherche
# Vous afficherez les résultats en dessous du formulaire sous forme de lien pour afficher le CV correspondant
# Vous afficherez les résultats en dessous du formulaire sous forme de lien pour afficher le CV correspondant
#* Pour faire une recherche dans un texte vous devrez utiliser non pas une égalité en SQL mais la fonction LIKE comme ci-dessous :
#* Pour faire une recherche dans un texte, vous devrez utiliser non pas une égalité en SQL, mais la fonction LIKE comme ci-dessous :
<source lang="php">
<source lang="php">
$sql = 'SELECT * FROM Experiences WHERE '.$champ. ' LIKE "%'.$critere. '%"';
$sql = 'SELECT * FROM Experiences WHERE '.$champ. ' LIKE "%'.$critere. '%"';
Ligne 417 : Ligne 416 :


[[Catégorie:SPARQL Protocol and RDF Query Language]]
[[Catégorie:SPARQL Protocol and RDF Query Language]]
{{Bas de page
| leçon = TP SPARQL
| idfaculté = informatique
| précédent = [[../PHP les fonctions/]]
| suivant = [[../PHP avec SPARQL/]]
}}

Version du 29 décembre 2011 à 19:39

Après ce TP, vous saurez :
  • établir une connexion à une base de données MySQL
  • modifier des données
  • afficher des données
  • rechercher des données
Durée : 1,5 heure
Matériel :
  • un serveur Web Linux avec PHP.
Début de la boite de navigation du travail pratique
MySQL
Image logo représentative de la faculté
T.P. no 12
Leçon : SPARQL Protocol and RDF Query Language

TP de niveau 0.

Précédent :PHP les fonctions
Suivant :PHP avec SPARQL
En raison de limitations techniques, la typographie souhaitable du titre, « Travail pratique : MySQL
SPARQL Protocol and RDF Query Language/Travail pratique/PHP avec MySQL
 », n'a pu être restituée correctement ci-dessus.


Introduction

Dans ce TP, nous allons enregistrer nos CV dans la base de données MySQL que nous avons créée dans le TP "TP Initiation à MySQL".

Ce TP a pour objectif de comprendre comment une base de données est utilisée par un langage comme PHP, pour pouvoir appliquer ensuite cette méthode avec SPARQL.

A savoir avant de commencer

Pour rappel:

  • Le code HTML ne sert qu'à l'affichage.
  • Le code PHP sert à créer un HTML dynamique.

Cependant, PHP n'a pas le "pouvoir" de mémoriser des données entre deux chargements de page. A moins que vous transmettiez des données d'une page Web à l'autre, via un formulaire HTML !

Si vous voulez conserver sur la durée les données entrées par les visiteurs de votre site via votre formulaire, de manière automatique et sans plus vous occuper de rien, vous devrez utiliser une base de données.

TP Base de données

De même que PHP vous permet de créer un langage HTML plus dynamique et personnalisé, il permet aussi de créer vos requêtes SQL de façon à automatiser l'alimentation de vos bases de données.

Pour le démontrer, nous allons créer un formulaire qui permettra de stocker les CV dans votre base de données.

Connexion

Pour utiliser une base de données, il faut se connecter à celle-ci. Chaque base de données SQL a sa propre méthode de connexion. Ici, nous n'allons étudier que la méthode avec une base de données MySQL.

Configurer la connexion

On met les paramètres de connexion dans une fonction, dans notre fichier fonctions.php par exemple :

<?php
function connectMaBase(){
     $base = mysql_connect ('localhost', 'root', 'VOTRE_MOT_DE_PASSE');
     mysql_select_db ('moncv', $base) ;
}
?>
  • la variable $base contient l'objet de connexion à votre base de données (BDD) avec:
    • le nom du serveur (ici localhost ou 127.0.0.1 c'est équivalents),
    • le nom de l'utilisateur (ici root qui signifie administrateur de votre BDD)
    • remplacer le texte VOTRE_MOT_DE_PASSE par votre mot de passe.
  • La ligne suivante lance la commande de sélection avec le nom de votre BDD et l'objet de connexion...

Ouvrir la connexion

Pour appeler la fonction, il vous faudra :

  1. dans le fichier form.php : écrire un include du fichier fonctions.php
  2. placer la fonction à l'endroit opportun avec la ligne suivante :
<?php
connectMaBase();

Fermer la connexion

Quand on rédige une commande SQL via PHP, on procède ainsi:

  1. on se connecte à la base (en utilisant notre fonction de connexion)
  2. on prépare la commande SQL en la stockant dans la variable $sql
  3. on l'exécute
  4. on ferme la connexion avec la fonction PHP suivante
<?php
// on ferme la connexion
mysql_close();
?>

Insérer des données

Dans le fichier php, pour faire une insertion, on écrira par exemple :

<?php
//On récupère les valeurs entrées par l'utilisateur :
$pseudo=$_POST['pseudo'];
$age=$_POST['age'];
$sexe=$_POST['sexe'];
//On crée une variable date du jour grâce à la fonction date() de PHP
$today = date("d.m.y");
//On se connecte
connectMaBase();
//On prépare la commande sql d'insertion
$sql = 'INSERT INTO Utilisateurs VALUES("","'.$pseudo.'","'.$sexe.'","'.$age.'","'.$today.'")';
/*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 affichera les causes d'erreur sql)*/
mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error());
// on ferme la connexion
mysql_close();
?>

La partie la plus complexe pour vous est probablement la création de la requête SQL :

<?php
	//On prépare la commande sql d'insertion
	$sql = 'INSERT INTO Utilisateurs 					                      VALUES(NULL,"'.$pseudo.'","'.$sexe.'","'.$age.'","'.$today.'")';
?>
  • La première valeur est laissée vide, car c'est la place de l'ID qui doit s'auto-incrémenter.
    • Si vous l'oubliez, vous aurez un message d'erreur SQL indiquant que le nombre de données insérées ne coïncide pas avec le nombre de champs.
  • Les autres définitions de valeurs de type texte sont construites à l'aide de variables PHP, d'où l'utilisation de guillemets simples (comme pour le HTML).


Exercice : SANS COPIER COLLER, vous allez :

  • Reprendre votre projet Eclipse pour que le CV soit enregistré dans votre nouvelle BDD.
  • Pour récupérer l’ID généré après un insert SQL, utiliser la fonction : mysql_insert_id()
  • N’oubliez pas de tester après chaque ajout dans le code.
  • Si vous ne trouvez pas l’erreur, utilisez les commentaires et le débuggueur.

Afficher des données

On a déjà utilisé la syntaxe SQL d'une simple requête pour récupérer des données dans un TP précédent : pour récupérer tous les CV concernant Toto par exemple.

SELECT * FROM CVs WHERE nom= "Toto"

Pour chaque CV, PHP va nous envoyer plusieurs plusieurs informations (l'ID, le prénom, l’adresse...). Chaque enregistrement récupéré de la BDD sera utilisable sous la forme d'un tableau associatif.

On va utiliser la fonction suivante pour récupérer ce tableau  :

mysql_fetch_array($TrucRecupereSurSql)

On récupère ainsi un tableau associatif qui a pour indice : le nom de chaque champ.


Voici la méthode pour afficher des données depuis une base de données :

  1. On se connecte à la base (en utilisant notre fonction de connexion).
  2. On prépare la commande SQL en la stockant dans la variable $sql.
  3. On exécute la requête, en récupérant le résultat dans une variable que nous appellerons $req.
  4. Si c'est un tableau : on parcourt $req avec une boucle while (car on ne sait pas toujours le nombre de champs, ni d'enregistrements envoyés par notre base de données)
    • à chaque itération, la fonction mysql_fetch_array($req) instancie la variable $data
    • chaque champ de l'enregistrement est accessible via la commande : $data['champ']
  5. Maintenant qu'on a tout récupéré dans des variables PHP, on libère la mémoire de MySQL mobilisée par cette requête.
  6. On ferme la connexion SQL.


Exemple :

<?php
include("fonctions.php");
?>
<html>
	<body>
	<?php
	connectMaBase(); //On se connecte
	$sql = 'SELECT * FROM utilisateurs WHERE sexe="F"'; // On prépare la requête
	// 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é
	echo'<h2>TOUTES LES FILLES INSCRITES :</h2>';
	while ($data = mysql_fetch_array($req)) { //boucle
		// on affiche les résultats
		echo 'Pseudo : <strong>‘. $data['Pseudo'] .'</strong><br />';
		echo 'Son âge : '.$data['Age'].'<br />';
		echo 'Sa date d\'inscription : '.$data['DateInscription'].'<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 ();
	?>
	</body>
</html>

Rechercher des données

Nous avons un formulaire qui enregistre des CV et une page qui peut les afficher. Il nous faut maintenant une page pour retrouver des CV. Cette page est un formulaire de recherche ; ce formulaire peut contenir un ou plusieurs critères de recherche. Un critère peut être la mobilité d'un candidat, son niveau en langue ou encore son expérience.

Pour notre TP, nous allons laisser à l'utilisateur le choix de son critère de recherche : l'utilisateur entrera son critère dans un formulaire. C'est une option peu ergonomique, car cela peut troubler les utilisateurs non informaticiens. Cependant, cela sera un bon exemple pour l'utilisation de SQL.

Cela signifie que l'on veut obtenir une variable $sql du type :

$sql = 'SELECT * FROM utilisateurs WHERE '.$champ.' ="'.$critere.'"';
  • Il faut pouvoir proposer un formulaire où l'utilisateur entrera son choix de champ et la valeur attendue...
  • Il faut donc construire la liste de champs sous forme de liste déroulante en lisant le contenu de la BDD une première fois, car l’utilisateur n'est pas censé connaître le contenu de la BDD.
<!-- Commentaires HTML
On construit une liste déroulante ( un select et plusieurs options)
Chaque option sera remplie par une donnée récupérée par notre requête SQL
-->
<form method="post" action="admin.php">
	<select name="champ">
	<?php
		connectMaBase(); //On se connecte
		$sql = 'Show fields from utilisateurs'; //On prépare la requête SQL qui récupère les champs
		/* 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)){
			echo '<option name="'.$data['Field'].'">'.$data['Field'].'</option>'; // on affiche chaque champ
		}
		mysql_free_result ($req); //On libère mysql de cette première requête
	?>
	<!-- 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 -->

Exercice : Vous allez maintenant créer une page pour rechercher un CV. Dans une page PHP index.php, vous allez créer le formulaire :

Rechercher dans [liste champs]|V| [________] [Chercher]
  1. Créez le formulaire ci-dessus, dont voici la description :
    • [liste champs]|V| est un champ Select qui contient la liste des champs de la table Expériences.
    • [________] est un champ texte
    • [Chercher] est un bouton pour lancer la recherche
  2. Vous afficherez les résultats en dessous du formulaire sous forme de lien pour afficher le CV correspondant
    • Pour faire une recherche dans un texte, vous devrez utiliser non pas une égalité en SQL, mais la fonction LIKE comme ci-dessous :
$sql = 'SELECT * FROM Experiences WHERE '.$champ. ' LIKE "%'.$critere. '%"';