Formations privées

Rue Albert 1er, 7

6810 Pin - Chiny

(/fax: 061/32.00.15

Formation PHP - MySql en ligne

FORMATIONS

Le MAGASIN YBET

PRODUITS et SERVICES

Formations informatiques privées

Activités et présentation

Logiciels de gestion

Access - Excel

Rayon d'action  

Logiciel compta CIEL
YBET informatique Forum Création de site Vente informatique en ligne

Warning: include(..includes/start-product.php) [function.include]: failed to open stream: No such file or directory in /home/ybet/www/hardware/produit-vertical.php on line 26

Warning: include() [function.include]: Failed opening '..includes/start-product.php' for inclusion (include_path='.:/usr/share/php5') in /home/ybet/www/hardware/produit-vertical.php on line 26
ATHLON 64 X2 255-3.1 GHZ
Athlon Dual Core série 255


Prix: 61.92 € TTC
ATHLON II X2 SéRIE 245
amd Athlon dual core II (socket AM2+/AM3) 245 à 2,9 Ghz


Prix: 73.24 € TTC
PHENOM II X3 720
AMD Phenom II 720 Black Edition AM2+ / AM3


Prix: 159.08 € TTC
PHENOM II X4 940 3GHZ
AMD Phenom II 940 Black Edition AM2+, cache 8 MB 125 Watt


Prix: 211.74 € TTC
Les chapitres de la formation en ligne PHP - MySQL
1. Introduction au Php
2. Installer et utiliser easyphp
3. Première commande PHP
4. Fonctions en PHP
5. Les tableaux
6. Fonctions sur les variables
7. Formulaires Mail
8. Base de donnée MySQL avec easyphp
9. Première application de Mysql
10. Gestion des tables par PHP
10.a Exercice: formulaire de contact
11. Mise en page PHP - HTM: include() - require()
12. Création automatique de la table utilisateur
13. Formulaire et vérification des données
14. Insertion des nouveaux membres
15. Gestion des catégories
16. Liste de choix déroulante
17. Modification des tables MySQL
18. Enregistrer un fichier via un formulaire
19. Formulaire d'insertion
20. Affichage des petites annonces
21. Filtrage des annonces (1)
23. Exercice: gérer des news
24. Utilisation des Cookies
25. Gestion fichiers et Dossiers (source et FTP)
26. Cryptage et décryptage de mots de passe
27. Base relationnelle, méthodes Left et Join.
Divers
Formation référencement en ligne, positionnez votre site sur Google, MSN, Yahoo, ...
Les feuilles de styles, utilisation du CSS.
FrontPage et l'HTML, cours en ligne
Le fichier Apache .htaccess, configuration serveur, URL Rewriting, accès répertoires.

27. Base de donnée relationnelle MySQL

1 Introduction - 2. Petit exemple de départ - 3. La méthode Where - 4. La méthode Join

Avant de voire les requêtes spécifiques, voyons d'abord ce qu'est une base de donnée relationnelle. Il y a d'abord "relation", le terme devrait déjà aider mais voyons plutôt une petite explication plus concrète:

Supposons un module de facturation. Il reprend d'un coté des clients, de l'autre côté des factures. A chaque facture est attachée un client. Dès lors, plutôt que d'encoder à chaque fois les coordonnées du client pour chaque nouvelle livraison, on va créer deux tables MySQL, l'une reprend la facture en elle même, l'autre la fiche du client. L'astuce est de créer une liaison entre les deux. Elle se fait généralement via un champ commun, par exemple le code. Celui-ci est repris dans les deux tables, ce qui permet de relier les deux tables entre-elles lorsque c'est nécessaire. De même, on peut créer une relation entre les codes des produits et leur fiche.

Le gros avantage est lié non seulement au gain de temps lors de l'encodage, mais aussi au gain de place dans les tables ou même à la possibilité de changer l'adresse du client sans devoir retaper toutes les anciens documents. Par contre, la clé de la relation doit être unique, pas question que la même facture soit reliée à deux clients différents.

MySQL est nativement relationnel (au même titre qu'Access, DBase, ... ou même MsSQL de Microsoft) mais nous avons déjà vu que PHP et MySQL ne sont pas en fait liés. Le langage de programmation a simplement créer des fonctions spécifiques lui permettant d'exécuter des requêtes, une sorte de symbiose plus ou moins réussie entre deux logiciels du monde "libre".

Les relations étant relativement complexes, avec de nombreuses options, cette partie de la formation est volontairement épurée de bon nombre de cas spéciaux. Si elle ne sera pas tout à fait complète, elle devrait permettre de créer et d'utiliser rapidement des commandes et des tables relationnelles

2. Petit exemple de départ

Cette partie va reprendre deux tables à créer sous easyPhp (PhPMyadmin) ou dans la base de donnée fournie avec votre hébergement. En local, créez la base de donnée RELATION.

La première table reprend l'utilisateur:

Table USER

  • user_id: int, 10, clé primaire, auto increment
  • user_nom: texte, 40
  • user_password: texte, 40

la deuxième reprend ses messages.

  • message_id: int, 10, clé primaire, auto increment
  • message_contenu: texte, 50
  • message_user_id: int 10, idex

La relation ressemble à ceci. Remarquez que nous n'utilisons pas le champ message_user_id comme clé primaire mais comme index. Ceci n'est pas obligatoire mais va augmenter la vitesse de traitement puisque les index et clés primaires sont déjà pré-organisés par la base de donnée. Par contre, un index permet d'entrer la même valeur dans différents enregistrements.

Entrez manuellement quelques valeurs (3 minimum) dans les 2 champs et mettant au moins un nombre égal dans user_id et message_user_id.

L'entre d'un message par un utilisateur va donc remplir 3 champs dans la table MESSAGE, par contre l'affichage va permettre d'afficher également le nom de l'utilisateur. Le premier avantage, si l'utilisateur change de nom (ou de pseudo), ses messages lui seront toujours associés. Comme nous avons créé user_id comme clé primaire, nous savons déjà que la valeur de ce champ sera unique dans la table user.

L'ouverture de la base de donnée se fait par la liste de commandes ci-dessous, elle peut éventuellement être inscrite dans un fichier en include:

<?php

if(!mysql_connect('localhost','root')){
Echo'Connection Impossible';
exit();
} else{
// Echo'Connexion réussie';
}
Mysql_select_db('relation');

?>

Deux méthodes peuvent au départ être utilisée, la mauvaise (disons plutôt l'ancienne donc à éviter):

Select user_nom, message from user, message  where user.user_id=message.message_user_id

L'autre méthode va utiliser le JOIN et la requête va être de type

SELECT ...
FROM <table de gauche> LEFT JOIN <table de droite>
ON <Condition de liaison>

Par principe, mais surtout pour éviter des problèmes si des champs ont le même nom dans les différentes tables liées et pour augmenter la vitesse de traitement, sélectionnez les champs à utiliser et nom pas "SELECT *". 

3. La méthode Where

Cette méthode n'est pas la meilleure, notamment parce que la clause WHERE va mélanger des conditions de liaisons de tables et des conditions de valeurs des champs mais débutons par celle-ci. Elle ne doit plus être utilisée. Reprenons nos tables ci-dessus.

$requete="select user_nom,message_id,message_contenu from message,user where user.user_id=message.message_user_id";
$valeur=mysql_query($requete);
while ($tableau=mysql_fetch_array($valeur)){ 
echo$tableau['user_nom']."- numéro message: ".$tableau['message_id']." - contenu:".$tableau['message_contenu']."<br />";
}

La première partie est finalement le plus important, c'est la requête qui va afficher toutes les messages de la table message en affichant le nom de l'utilisateur repris dans la table user via la relation user.user_id=message.message_user_id. Remarquez que le pour délimiter les champs en fonction de leur table, nous avons ajouter le "nom de la table." devant. Ceci peut également être fait dans les noms des champs si deux noms de champs sont identiques dans les différentes tables.

Quoique intéressante, cette requête affiche toutes les valeurs. Supposons que nous voulons uniquement les messages de l'utilisateur numéro 1, la requête va reprendre une deuxième condition dans le where.

$requete="select user_nom,message_id,message_contenu from message,user where user.user_id=message.message_user_id && user.user_id=1";

C'est le gros problème de cette méthode au niveau lecture de la requête, les conditions de jointures sont complètement mélangées avec les conditions restrictives des valeurs, mais elle fonctionne.

4. La méthode JOIN

C'est la méthode la plus propre, elle va séparer les liaisons des conditions de valeurs. Plusieurs types de jointures existent, notamment LEFT JOIN (par la gauche), RIGHT JOIN (par la droite) et INNER JOIN. Avant de commencer, nous allons créer une troisième table:

Table renseignement

  • renseignement_id, INT 10, autoincrement, clé primaire
  • renseignement_nom, VARCHAR 50, index
  • renseignement_date, date
  • renseignement_texte, VARCHAR 100

Elle reprend finalement des renseignements généraux sur l'utilisateur et est liée à la table user par le champ renseignement_nom. 

4.1. INNER JOIN

C'est la jointure par défaut qui compare deux tables et retourne tous les enregistrement comportant une concordance de liaison.

Reprenons notre exemple ci-dessus et remplaçons la requête par:

$requete = "select user_nom, message_id,message_contenu from message INNER JOIN user ON user.user_id = message.message_user_id";

Ceci est exactement équivalent à la méthode where sans conditions de champs. Si nous exécutons en plus une condition de valeur (par exemple, users_id=1, la requête SQL en PHP devient:

$requete = "select user_nom, message_id, message_contenu from message INNER JOIN user ON user.user_id = message.message_user_id where user.user_id=1";

Effectivement, la méthode INNER JOIN est finalement équivalente à la condition Where standard, si ce n'est la séparation des conditions de valeurs et de liaison.

Les deux méthodes suivantes vont nous permettre de peaufiner les requêtes en signalant les directions des jointures. Elles seront plus précises, mais plus complexes. Par contre, elles vont permettre de créer des liaisons entre 3 tables avec comme relations table1 <-> table2 <-> table3, avec aucune liaisons entre les tables 1 et 2.

4.2. LEFT JOIN

Pour une liaison par la gauche, nous allons utiliser la commande LEFT Join. En plus des concordances, la commande va afficher toutes les lignes de la table de gauche, même s'il n'y a pas de concordances. Dans notre cas, les utilisateurs sans messages seront donc également affichées.

$requete = "select user_nom, message_id, message_contenu from user LEFT JOIN message ON user.user_id = message.message_user_id";

Un petit exemple d'affichage donnerait:

users 1- numéro message: 1 - contenu:message 1
users 1- numéro message: 2 - contenu:message2 de 1
utilisateur 2- numéro message: 3 - contenu:message 3
users 3- numéro message: - contenu:

4.3. Left Join sur trois tables.

Nous allons cette fois compliquer un peu en utilisant les données de 3 tables.

Le principe est d'utiliser 

SELECT * FROM message
LEFT JOIN user ON (instruction)
LEFT JOIN renseignement ON (instruction)

Message est la table principale (tout affiché à cause du Left Join), elle est reliée à la table user, elle même reliée à la table renseignement.

$requete ="select * from message 
LEFT JOIN user ON user.user_id = message.message_user_id
LEFT JOIN renseignement on user.user_nom=renseignement.renseignement_nom";

Pour une table de 3 utilisateurs (users1,2 et 3 avec 2 messages pour le premier et 1 pour l'utilisateur 2 (pas pour le troisième), ceci donne:

users 1- numéro message: 1 - contenu:message 1
users 1- numéro message: 2 - contenu:message2 de 1
users 2- numéro message: 3 - contenu:message 3

4.4. Mélange.

Pour cette partie, nous allons relier nos trois tables en utilisant les parties LEFT et RIGHT JOIN. Avant toute chose, des tables complétées ou non vont afficher des résultats tout à fait différents: le contenu des liaisons sont être complètement complété. En plus, inverser la commande RIGHT avec LEFT va aussi changer les résultats. 

Cours Access

Dans la même série de formations en ligne.

Le tableur Excel

Apprenez à créer rapidement des tableaux, ... mais aussi des fontions spécifiques de tris et filtrages

Présentations PowerPoint

Ludiques ou professionnelles, découvrir les possibilités de PowerPoint

Les prix YBET informatique 

Quelques exemples de prix pratiqués au magasin à Pin (Chiny)


> Mise en ligne du site - Référencement d'un site

> Le Javascript 

<26 . Cryptage des mots de passe 

YBET Informatique: formation débutant ou avancé

dans notre salle de formation ou en entreprise

Renseignements, tarifs et inscriptions sur notre page formations informatiques

Magasin Informatique YBET à Chiny

Mise en ligne: 27/03/2008