Différences entre les versions de « SPARQL Protocol and RDF Query Language/Travail pratique/PHP avec MySQL »

m
Relecture
m (Relecture)
{{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
| titre = MySQL
| précédent = [[../PHP les fonctions/]]
| suivant = [[../PHP avec SPARQL/]]
| niveau = ?0
}}
 
== Introduction ==
Dans ce TP, nous allons enregistrer nos CV dans la base de données MySQL que nous avons créé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 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 ==
Pour rappel:
* leLe 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 transmetteztransmettiez des données d'une page webWeb à 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'alimentationutiliser deune vos basesbase 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 permettrapermet 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 BDDbase 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 ===
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 :
<source lang="php">
<?php
?>
</source>
* la variable $base contient l'objet de connexion à votre base de données (ou 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)
** Et enfin 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 :
# dans le fichier form.php : écrire un include du fichier fonctions.php,
# placer la fonction à l'endroit opportun paravec la ligne suivante :
<source lang="php">
<?php
==== Fermer la connexion ====
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 prépare la commande SQL en la stockant dans la variable $sql,
# on l'exécute,
# on ferme la connexion avec la fonction PHP suivante.
<source lang="php">
<?php
 
=== Insérer des données ===
Dans le fichier php, pour faire une insertion, on écrira par exemple :
<source lang="php">
<?php
$age=$_POST['age'];
$sexe=$_POST['sexe'];
//On crééecrée une variable date du jour grâce à la fonction date() de PHP
$today = date("d.m.y");
//On se connecte
?>
</source>
* 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 renverraaurez un message d'erreur SQL disantindiquant que le nombre de données insérées ne coïncidentcoïncide pas avec le nombre de champs...
* Les autres définitions de valeurs de type texte sont contruitconstruites à l'aide de variablevariables PHP, d'où l'utilisation de simpleguillemets quotesimples (comme pour le HTML).
 
 
'''Exercice :''' SANS COPIER COLLER, vous allez :
* Reprendre votre projet Eclipse pour que le CV soit enregistré dandans 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.
{{solution|contenu=
Avec la nouvelle fonction connectMaBase, voici le fichier fonctions.php :
/*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ègreraintégrera les causes d'erreur sql)*/
mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error());
//récupérerécupère la clé du CV pour l'associer aux expériences
$last_CV_ID = mysql_insert_id();
 
=== 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 CVsCV concernant Toto par exemple.
<source lang="sql">
SELECT * FROM CVs WHERE nom= "Toto"
</source>
 
'''On récupère ainsi un tableau associatif qui a pour indice : le nom de chaque champ.'''
 
 
# 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.
# Si c'est un tableau : Onon parcourt $req avec une boucle while (car on ne sait pas toujours le nombre de champs, ni d'enregistrements envoyerenvoyés par notre base de données)
#* Aà 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']
# 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.
 
=== Rechercher des données ===
Nous avons un formulaire qui enregistre des CVsCV et une page page qui peut les afficher. Il nous faut maintenant une page pour retrouver des CVsCV. Cette page se nommeest 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.
 
Pour notre TP, nous allons laisser à l'utilisateur le choix de son critère de recherche : un l'utilisateur entrera son critère 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.
 
Cela signifie que l'on veut obtenir une variable $sql du type :
</source>
* 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.
 
<source lang="php">
</source>
 
'''Exercice''' :
'''Exercice''' : Vous allez maintenant fairecréer une page pour rechercher un CV. Dans une page PHP index.php, vous allez fairecréer le formulaire :
<source lang="text">
Rechercher dans [liste champs]|V| [________] [Chercher]
</source>
# FaireCré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
# 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 :
<source lang="php">
$sql = 'SELECT * FROM Experiences WHERE '.$champ. ' LIKE "%'.$critere. '%"';
 
[[Catégorie:SPARQL Protocol and RDF Query Language]]
{{Bas de page
| leçon = TP SPARQL
{{ébauche | idfaculté = informatique}}
| précédent = [[../PHP les fonctions/]]
| suivant = [[../PHP avec SPARQL/]]
}}
700

modifications