Résultat du sondage de Stackoverflow 2017

Le sondage 2017 du site web de support informatique stackoverflow vient de sortir. Le sondage est très/trop complet notamment sur des questions hors du domaine du développement (le développeur a t’il des enfants par exemple). Vous pouvez le trouver à cette URL.

Je sors quelques points que je trouve intéressant et donc ce n’est que mon regard personnel sur ce sondage, chacun est libre d’en sortir ses propres impressions.

 

 

 

Comment se définit le développeur:

Finalement on peut dire que les sondés sont globalement des développeurs qui font un peu de tout en Front/Back/Full, finalement c’est le « Desktop or entreprise applications » qui montre bien que ce type de développement est assez faible sur ce site. Peut être que les développeurs de ce genre d’applications sont expérimentés et n’ont plus besoin de poser des questions.

 

La bataille des IDEs:

Le Visual Studio payant et gratuit semble enfoncé les autres, le trio des éditeurs Sublime Text/Vim/Notepad++ semble être très utilisé au final, le reste est très classique au final.

Les langages des développeurs:

Beaucoup de développement web en Front, donc JS+HTML+CSS sontles premier. On trouve les inaltérables SQL/Shell en plus. La tendance reste Java/Python/C#/PHP/C++/C.  J’ai indiqué les langages ayant plus de 10%, vous trouverez surement votre langage dans le sondage.

 

Les Framework des développeurs:

Node.js / Angular /react indique bien que le développement des solutions javascript a le vent en poupe. Ce qui est surprenant encore c’est le .Net Core qui est très important, une information que je n’avais pas personnellement.

Base de données utilisées

 

La seconde place de SQL Server est pour moi une surprise, le reste me parait assez classique comme représentation.

Les plateformes cible des développeurs:

Attention, ce n’est pas avec quel OS ils développent, il y a une réponse spécifique sur ce point. On voit bien que le classique c’est Linux/Windows, un peu d’android, de cluster AWS, Mac OS. Rasberry Pi et WordPress sont présentés comme des cibles cela indique bien la force de leur spécificité.

 

Les regroupement  des technologies pour les développeurs:

Très utile cela indique bien les liaisons outils/technologies/plateformes pour comprendre qu’elles sont les compétences liées.

 

 

Publié dans Développement | Laisser un commentaire

Debug WordPress avec Eclipse PDT

Objectif: configuration de wordpress opérationnelle avec un debug dans Eclipse PDT

Etape 1 : Configuration d’EasyPhp/Wamp/Mamp

Pour activer le debuggeur xdebug dans les outils de développement, la toute première étape est de localiser le « bon » fichier php.ini. En effet, votre ordinateur peut contenir plusieurs fichiers pour gérer la version de test et la version de production, un fichier en sauvegarde ou un fichier php.ini si vous écrivez du PHP en utilisation en mode CLI (CLI=client).

Etape 1.1: Localiser et Ouvrir le fichier php.ini

Créer un fichier phpinfo.php à la racine du DocumentRoot d’apache contenant le code suivant:

<?php phpinfo();

Ouvrir la page correspondante dans le navigateur via par exemple l’URL: http://127.0.0.1/phpinfo.php

Vous obtenez l’ensemble des réglages du PHP dans Apache et surtout le « bon » fichier php.ini:

Il faut ouvrir ce fichier pour vérifier/modifier/ajouter les lignes suivantes:

  • activer la ligne qui indique le xdebug, cette ligne ne doit pas commencer par un ; (qui indique un commentaire) mais par zend_extension
  • la ligne  zend_extension doit indiquer un fichier valide de xdebug par exemple:
    zend_extension= »c:/wamp/bin/php/php5.6.2/zend_ext/php_xdebug-2-5.6-vc11-x86_64.dll »
  • xdebug.remote_enable = on

La modification des lignes ci-dessus dans le fichier php.ini sauvegardé et le redémarrage d’Apache doit permettre d’activer le xdebug. Pour le vérifier, ouvrez de nouveau l’URL vers le fichier phpinfo.php. Vous trouverez normalement une indication que le xdebug est bien activité et que le mode remote debug est aussi actif :

 

Etape 1.2:Installation en local de wordpress

Le téléchargement des fichiers de wordpress peut être réalisé à partir de ce site Web : https://fr.wordpress.org/

Il faut dé-zipper les fichiers et les placer dans un dossier WordPress du DocumentRoot d’Apache en les copiant:

Copier-wordpress-DocumentRoot

Le dossier DocumentRoot se trouve habituellement:

  • Pour Wamp dans le dossier wamp64\www
  • Pour Mamp dans le dossier /Applications/Mamp/htdocs
  • Pour EasyPhp dans EsayPhp\www

Ce dossier sera l’espace de travail (« workspace ») à indiquer à Eclipse PDT

 

Etape 1.3: Création de la base de données et d’un utilisateur de la base de données WordPress

Allez sur phpmyadmin, habituellement à l’adresse http://127.0.0.1/phpmyadmin/ ou pour EasyPhp http://127.0.0.1:8887/modules/phpmyadmin3522x121112094748

Puis choisissiez l’onglet Utilisateur

phpmyad-onglet-utilisateur

Puis « Ajouter un utilisateur »

Indiquez les informations suivantes pour créer un utilisateur qui dispose de tous les droits sur une base de données (retenez les informations saisies en les notant dans un coin):

phpmyad-ajout-utilisateur

Vous avez à partir de là, une base de données, un utilisateur et un mot de passe opérationnel que vous noterez pour l’installation de WordPress

Etape 1.4: Installez WordPress

En allant sur l’adresse suivante http://127.0.0.1 vous devriez trouver le dossier wordpress et pouvoir lancer l’installation de WordPress grâce aux informations de la base de données.

 

Etape 1.5:Réglages d’Eclipse PDT pour xdebug

Il y a plusieurs moyens de modifier les réglages d’Eclipse PDT pour que l’IDE prenne en compte le xdebug comme débuggeur par défaut. Dans certaines versions d’Eclipse PDT, le débuggeur configuré est la version payant de Zend Debugger. Il suffit souvent de désactiver ce dernier au profit de xdebug pour que cela fonctionne correctement.

Faire Menu Windows > Preferences puis ouvrir PHP > Debug dans la fenêtre des préférences puis « l’hyperlien » PHP servers… pour éditer le serveur par défaut « Default PHP Web Server ». Dans la fenêtre « Edit Server », sélectionnez l’onglet « Debugger » pour enfin choisir comme Debugger: XDebug. Finish et OK pour valider les modifications.

Nota: il est possible de trouver la liste des serveurs via Menu Windows > Preferences puis ouvrir PHP > Servers mais je trouve pratique de consulter les réglages du débugger dans PHP > Debug.

Ainsi par défaut, le réglage du serveur web par défaut est d’utiliser xdebug.

Vérifier

 

Etape 2: Création d’un projet PHP pour WordPress dans Eclipse PDT

Après installation de WordPress dans le DocumentRoot d’Apache dans le sous dossier WordPress, nous allons créer un projet PHP portant le même nom pour récupérer les fichiers PHP de WordPress dans Eclipse:

Faire Menu File > New > PHP Project:

File-New-Php Project

Dans la fenêtre de création d’un nouveau projet « New PHP Project » indiquer le nom du projet WordPress et l’option « Create new project in workspace », on peut vérifier que le dossier indiquer par l’interface correspond bien au dossier de l’installation de WordPress:

New-Project

L’importation d’un grand nombres de fichiers de WordPress dasn Eclipse PDT peut prendre jusqu’à quelques dizaines de minutes selon la taille du WordPress et la puissance de votre ordinateur.

WordPress contient quelques pseudo « erreurs » mal détectées par Eclipse, même si le projet est indiqué avec une petite croix rouge, il peut parfaitement fonctionner.

Etape 3: Debug d’un projet PHP dans Eclipse PDT

Etape 3.1: Création d’une configuration de Debug

Pour débugger un projet PHP, il faut en premier lieu créer une configuration de Debug, via le Menu Run > Debug Configuration …

Ou via click droit sur un programme PHP > Debug As > Debug Configurations …

Dans la nouvelle fenêtre « Debug Configurations », on peut créer une nouvelle configuration de Debug via le bouton « New Debug Configuration », indiquer un nom (un label) à cette configuration et surtout le fichier à débugger:

PS : on peut noter l’URL qui est affichée dans le bas de l’interface avec l’option « Auto Generate », si on décoche cette option, on peut ainsi modifier une partie de l’URL.

On peut vérifier que le débugger par défaut pour cette configuration est bien indiqué dans l’onglet Debugger : 

On peut laisser un point d’arrêt automatique via l’option « Break at First Line » ou au contraire vouloir laisser l’option décoché pour utiliser d’autres points d’arrêt (voir plus bas).

Etape 3.2: Lancer le Debugger

Maintenant on peut lancer le « Debugger » avec le bouton « Debug » en bas à droite.
Ce qui devrait ouvrir l’URL dans un navigateur intégré à Eclipse PDT et nous proposer de basculer dans la perspective « Debug » d’Eclipse. Il faut confirmer en indiquant que l’on souhaite qu’Eclipse PDT se souvienne de cette réponse pour éviter d’avoir cette fenêtre à chaque fois.

Cela va ouvrir la perspective « Debug » pour Eclipse PDT. Une perspective est un nouvel agencement des différentes fenêtres d’Eclipse PDT. Cette nouvelle organisation doit mettre en avant ce qui est utile au Debug: les variables, quelques dizaines de lignes de codes, si le serveur Apache est en pause sur un fichier et à quel ligne et dans un coin le navigateur intégré d’Eclipse PDT:

Dans l’exemple ci-dessus, le debugger s’est automatiquement mis en pause sur la première ligne de PHP (cf le choix « Break at First Line » est actif dans la Configuration de Debug plus haut).

Pour contrôler l’exécution du programme PHP en mode debug, soit d’exécuter ligne par ligne le programme PHP, on peut utiliser la barre de menu suivante:

  1. Le bouton 1 permet d’activer/désactiver tous les points d’arrêts
  2. Le bouton 2 permet de faire exécuter toutes les lignes de PHP jusqu’au prochain point d’arrêt, si il n’y a plus de point d’arrêt exécute jusqu’à la fin le programme
  3. Le bouton 3 permet d’arrêt la session de debug sans obtenir de résultat
  4. Le bouton 4 permet de débugger en entrant dans les fonctions PHP
  5. Le bouton 5 permet de débugger en exécutant les fonctions PHP sans entrer dedans

Etape 3.3: Les points d’arrêts

Quand on debugger, ce qui est souvent utile  de faire exécuter le programme PHP depuis le début, autrement-dit depuis le lancement du programme PHP, jusqu’à un endroit critique du programme PHP.

On place donc habituellement un point d’arrêt sur une ligne de code juste avant l’ensemble des lignes qui sont à débugger.

La session de Débug démarre, puis on utilise le bouton 2 (Resume ou touche F8) qui déclenche l’exécution du programme PHP jusqu’au premier point d’arrêt. Puis arrivé sur les lignes de code problématiques, on utilise les boutons 4 (Step Into ou touche F5) et 5 (Step Over F6) pour exécuter ligne à ligne, un peu à la manière d’un ralenti.

Une fois les lignes problématiques passées, nous exécutons le reste du programme avec le bouton 2 (Resume ou touche F8) pour obtenir l’affichage de la page dans le navigateur.

Etape 3.4: Relancer le Debug

Une fois la session de debug terminée, on peut relancer le Debug via clic droit > Run As > PHP Web Application

Attention, Eclipse PDT n’accepte d’avoir qu’une seule session de debug, si votre session n’est pas terminée, vous pouvez l’arrêter via le bouton 3 (Terminate ou touche CTRL+F2).

On peut par contre debugger plusieurs pages dans la session de débug, en appelant de nouvelles pages sur le même projet PHP. On peut aussi utiliser un navigateur extérieur pour voir la session de Debug dans Firefox/Chrome ou tout autre navigateur.

 

Etape 3.5: Mettre un point d’arrêt dans le code

Jusque là on lance le debug de tout WordPress mais on pourrait avoir envie de n’avoir le debugger que dans une certaine partie du code par exemple dans les pages du template.

 

On peut mettre un point d’arrêt (breakpoint en VO) en cliquant « en face » de la ligne que l’on souhaite debugger, un cercle va apparaitre à gauche du numéro de ligne pour indiquer que l’on a un point d’arrêt. Pour retirer un point d’arrêt re-cliquer dessus.

Eclipse-breakpoint

Etape 4: WordPress mode debug

 

Modifier le fichier wp_config.php pour avoir définir ces 2 variables a

// Active le mode WP_DEBUG 
define( 'WP_DEBUG', true );

// Création du fichier logging dans le fichier /wp-content/debug.log 
define( 'WP_DEBUG_LOG', true );

// Disable display of errors and warnings 
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );

// Use dev versions of core JS and CSS files (only needed if you are modifying these core files)
define( 'SCRIPT_DEBUG', true );

// Affiche les requêtes SQL
define( 'SAVEQUERIES', true );

 

Etape 5: Liste des pages d’un template WordPress:

  • single.php affichage d’un article seul
  • page.php affichage d’une page seule page<nom>.php qui affichera directement la page qui s’appelle <nom>
  • home.php gestion de la page d’accueil
  • tag.php affichage des pages tags (tag-<nom du tag>.php pour afficher les page liées au tag.
  • archive.php affichage des archives (par catégorie, par label, par auteur, etc.).
  • category.php affichage par catégorie ( category-<nom catégorie>.php)
  • search.php affichage des résultats d’une recherche.
  • 404.php page de gestion de l’erreur 404
  • <nom page>.php par exemple mentions-legales.php
  • author.php affichage d’un auteur et des ses ressources liées
  • date.php affichage par date précise (année, mois ou jour) des articles
  • loop.php gestion de la boucle principale de WordPress
  • one-column-page.php pour affichage sur une seule colonne donc sans sidebar

Pour voir le système de choix des enchaînements de pages dans les tablettes de nombreux diagrammes sont disponibles sur le Web par exemple : ici ou sur le site WordPress.

Voici quelques informations sur les fonctions classiques d’un thème et l’organisation d’un page en sous pages:

 

 

Publié dans CTN | Laisser un commentaire

Arduino M0 pro et UART additionnel

Dans le cadre d’un développement sur un Arduino M0 Pro, je me retrouve a devoir brancher en protocole UART un module bluetooth et un lecteur RFID tout les deux en UART.

Comme je débute en Arduino, je branche le module bluetooth sur RT( broche 0) /TX (broche 1) de la carte :

 

Donc se pose la question d’avoir une entrée UART sur d’autres broches. J’avoue que je traine sur google et que je trouve enfin la bonne explication pour transformer les broches  10 en TX et 11 en RX.

Vous trouverez sur ce lien toutes les explications chez Adafruit mais pour ceux qui cherchent comme moi, voici le résumé avec le code:

#include "wiring_private.h"

Uart Serial2(&sercom1, 11, 10, SERCOM_RX_PAD_0, UART_TX_PAD_2);

void SERCOM1_Handler()
{
 Serial2.IrqHandler();
}

void setup()
{
  Serial2.begin(9600);
  pinPeripheral(10, PIO_SERCOM);
  pinPeripheral(11, PIO_SERCOM);
}


void loop()
{
 if (Serial2.available()){
   byte byteRead = Serial2.read();
   Serial2.write(byteRead);
   Serial.write( byteRead ); 
 }
}

Et voila, j’avoue que cela m’a permis d’entrer dans des détails du « M0 pro » et de son contrôleur ATSAMD21  mais enfin j’ai compris comment on peut refaire un UART de plus en cas de besoin.

Voila le montage final avec UART sur PIN 0 et 1, SDA & SCL branché et enfin le nouveau UART PIN 10 et PIN 11

Publié dans Développement | Laisser un commentaire

Protégé : Formation python Quatrième partie

Cet article est protégé par un mot de passe. Pour le lire, veuillez saisir votre mot de passe ci-dessous :

Publié dans EuroMov | Saisissez votre mot de passe pour accéder aux commentaires.

Formation python Troisème partie

 EXERCICE NEUF

Demander une information depuis la ligne de commande, pour filtrer les informations et ne garder que celle dont le numero_ligne est supérieur au numero_ligne_initial indiqué par l’utilisateur.

Pour demander une variable, voici la commande

numero_ligne_initial = input('Numéro de ligne initial: ')
numero_ligne_initial = int(numero_ligne_initial)

Normalement votre console va contenir ce message, avec le curseur pour attendre que vous indiquiez à partir de quel ligne on va traiter l’information

Numéro de ligne initial: _

 

Filtrer les informations à partir d’un numéro de ligne ->

 

 

 


HUITIEME TRUC

Les bibliothèques additionnelles sont très importantes dans python. Par défaut, python ne charge pas toutes les bibliothèques car cela prendrais trop de temps, cela chargerais en mémoire trop d’informations et même il y a risque d’incompatibilités entre certaines bibliothèques. Donc on charge que ce que l’on a besoin et on les importes individuellement.

Par exemple pour faire un graphisme, la bibliothèque que je propose est matplotlib.

Pour l’installer, il faut soit appeler en ligne de commande le logiciel pip par exemple via la commande du système d’exploitation (terminal sous MacOs, cmd sous Windows :

pip install requests

ou on trouve aussi la commande exprimé comme ceci:

python -m pip install <nom de la bibliothèque>

Ce que je conseille sinon c’est ce petit programme python qui exécute pip (qui est développé en python), à exécuté dans l’interpreteur python:

Python 3.6.2 (v3.6.2:5fd33b5, Jul 8 2017, 04:57:36) [MSC v.1900 64 bit (AMD64)]
 on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>import pip
>>>pip.main(['list'])
>>>pip.main(['install','<nom de la bibliothèque>'])

Mais ce qui est vraiment pratique avec PyCharm c’est que l’on peut faire via l’IDE tout cela:

Allez sur le Menu File > Settings…

NOTA: sous Mac Os le menu settings est déplacé dans le menu le plus à gauche portant le nom de l’application soit ici PyCharm > Settings…

Choisissez « Project: <votre projet> » puis « Project Interpreteur » et complètement à droite le bouton « + » puis vous pouvez chercher une bibliothèque (un package en VO) par exemple « matplotlib » pour l’installer.

Une fois l’installation terminé, on peut constater que matplotlib n’a pas été installé tout seul mais des bibliothèques additionnelles ont été aussi installé pour le faire fonctionner:

On peut constater que la bibliothèque numpy qui est très utile pour le calcul scientifique est aussi installé car elle est nécessaire à matplotlib.

 


NEUVIÈME TRUC

 

Pour l’utilisation de matplotlib et numpy pour faire une figure et des calculs, il faut en premier lieu importer les bibliothèques. Pourquoi indiquer dans un programme ce que l’on veut importer précisément, on pourrait penser que python va charger toutes les bibliothèques que l’on a installer, oui mais dans ce cas là on va avoir un long temps de chargement avant que notre programme ne s’exécute.

Pour importer l’objet qui gère dans la bibliothèque matplotlib l’objet qui gère les diagrammes, on peut écrire ceci:

from matplotlib import pyplot

Mais on trouve la version plus abrégé suivante:

import matplotlib.pyplot

Sauf qu’après on se retrouve à devoir faire préfixer toutes les fonctions de cet objet, par exemple ici la fonction figure() par le nom de la bibliothèque + le nom de l’objet:

matplotlib.pyplot.figure()

Donc on peut faire un alias (le mot après as) pour remplacer le préfixe par quelquechose de plus court

import matplotlib.pyplot as plt

et du coup l’appel se fait avec la version écourtée:

plt.figure()

Par exemple pour numpy la bibliothèque de calcul scientifique, son alias est souvent np.

 

Mais revenons à ce que nous avons besoin d’importer pour faire une courbe :

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

Voici un petit morceau de programme pour tracer une courbe simple:

donnees = [18,22,4,15,15]
fig = plt.figure()
ax = fig.gca()
ax.plot( donnees , label='parametric curve')
plt.show()

Essayer d’afficher à l’écran cette courbe et modifier les données pour construire un autre exemple.

On peut faire une courbe avec deux dimensions :

donneesX = [1,2,3,15,18]
donneesY = [18,22,4,15,15]
fig = plt.figure()
ax = fig.gca()
ax.plot( donneesX, donneesY , label='parametric curve')
plt.show()

 


 EXERCICE DIX

Cette courbe est le début du vol du planeur enregistré par le GPS d’un smartphone.

Essayons de construire un programme pour l’afficher avec les données du fichier traitement_fichier.txt.

En premier lieu, importer matplotlib et numpy. Ensuite il faut créer trois tableaux pour stocker les informations:

#initialisation des tableaux de données
longitude = []
latitude = []
altitude = []

Puis après avoir passé la première ligne du fichier traitement_fichier.txt qui contient les entête des colonnes. Nous pouvons ajouter les valeurs lu comme str en valeur de type float (nombre à virgule) via ces lignes:

#construction des tableaux de données
latitude.append(float(data[1]))
longitude.append(float(data[2]))
altitude.append(float(data[3]))

Bien sur éviter de lire la colonne data[0] qui contient les timestamps peut utile pour ce diagramme.

A la fin de notre programme après avoir bien construit les 2 tableaux de données voici le code pour afficher le diagramme:

#dessin de la figure
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot(longitude, latitude, altitude, label='parametric curve')
plt.show()

A vous de jouer.

Affichage des données longitude, latitude, altitude ->

 

 


DIXIÈME TRUC

 

Si vous ne codez pas, tout cela ne va pas vraiment être utile.

Mettez des commentaires pour expliquer les morceaux du code.

Indiquez clairement ce que fais une variable, numero_ligne ou numeroLigne.

Faites des fichiers intermédiaires pour pouvoir rejouer l’intégralité ou une partie du processus.

Utilisez le déboggage pour tracer l’enchainement du code et l’état des variables.

 

Quatrième partie de la formation ⇒

 

 

Publié dans EuroMov | Laisser un commentaire

Protégé : Formation python Seconde partie

Cet article est protégé par un mot de passe. Pour le lire, veuillez saisir votre mot de passe ci-dessous :

Publié dans EuroMov | Saisissez votre mot de passe pour accéder aux commentaires.

Protégé : Formation Python

Cet article est protégé par un mot de passe. Pour le lire, veuillez saisir votre mot de passe ci-dessous :

Publié dans EuroMov | Saisissez votre mot de passe pour accéder aux commentaires.

Process Explorer de Sysinternals

Pour le développement et même pour avoir une meilleure connaissance du fonctionnement de son PC sous Windows, un outil qui doit être installé à mon avis par défaut est Process Explorer.

Continuer la lecture

Publié dans Développement | Laisser un commentaire

Premier développement Seafile

Suite à l’utilisation de Seafile alternative open-source à Dropbox, je me suis posé la question du rajout de fonctionnalité dans cette solution.

Continuer la lecture

Publié dans Développement | Laisser un commentaire

TP4 – Technologies Web

1. Généralité sur la base de données

 1.1 Mysql vs phpMyAdmin

Pour manipuler une base de données stockée dans un logiciel de gestion de base de données (SGBD), on peut utiliser plusieurs outils d’administration pour créer, effacer, modifier les tables et les données qu’il stocke.

Mysql est un SGBD très populaire mais ses outils d’administrations sont souvent complexe. Une équipe de développeur à conçu un outil écrit en PHP pour l’administration de Mysql, cet outil est phpMyAdmin.

Une version concurrente de Mysql a été réalisé par des anciens de l’entreprise de MySql et s’appelle MariaDB, donc il a énormément de similitude entre ces 2 outils. Nous préférons utiliser MySql car historiquement il y a plus de documentation sur cette version.

Pour Wamp/Mamp/EasyPhp, cet outil est habituellement accessible  via ce genre d’adresse http://127.0.0.1/phpmyadmin/ ou http://127.0.0.1:8888/phpmyadmin/ ou http://127.0.0.1:8887/phpMyAdmin/. Ouvrez la page par défaut de votre Mamp/Wamp/EasyPhp un lien est souvent fourni pour ouvrir cet outil.

Pour accéder à une base de données, le logiciel MySql va vous demander un nom d’utilisateur (login) et un mot de passe. Les installations classiques utilisent habituellement comme login: admin et comme mot de passe: mysql
Parfois, il n’y a pas de mot de passe à voir dans la documentation de votre Mamp/Wamp/EasyPhp etc.

Pour le serveur du master, le phpmyadmin est accessible à cette adresse  http://www.master-ctn.mines-ales.fr/phpmyadmin/
Votre login et votre mot de passe sont identiques à celui indiqué pour accéder au serveurs avec Filezilla.

 

 

 1.1 Vocabulaire de la base de données

Une base de données regroupe un ensemble de tables de données (équivalent au classeur Excel).

Une table de données regroupe et structure un type d’information (équivalent à une feuille Excel)

Cas pratique, une liste d’élève du Master CTN qui dispose de plusieurs adresses emails : Première table listant les élèves: (nom de la table eleve): avec les champs id, nom, prenom, promotion :

id   nom     prenom    promotion
1    Dupond  Alfonse   2008
2    Duval   Joseph    2008
3    Smith   John      2009

Nota : id est le champ clé de la table, il permet d’identifier de manière unique chaque enregistrement (VF : chaque ligne). Si on utiliser le champs nom comme clef, on ne pourrait avoir 2 personnes ayant le même nom.

Seconde table listant leurs adresses emails: (nom de la table email) avec les champs id, mail, id_eleve

id     mail                id_eleve 
1      a.dupond@ema.fr     1 
2      dupond@yahoo.fr     1 
3      j.smith@ema.fr      3

Nota : id_eleve et le champ clé étrangère car ce champs symbolise la liaison avec le champ id de la table eleve

Nota 2 : Dans notre exemple les champs (les colonnes) id de la table élève et de la table email sont prévues pour être automatiquement incrémenté, identifiant chaque ligne de manière unique.

2. Création du schéma de la base de données.

Dans l’outil phpMyAdmin :

Créer une nouvelle base de données appelé base_contact

  • Onglet « Bases de données » > Créer une base de données
  • Dans la partie gauche de l’interface de phpMyAdmin, choisir cette base de données

 

Créer une nouvelle table appelée eleve (sans accent) avec 4 colonnes (4 champs)

  •  id est un IDentifiant de type INT indiquant que l’on va stocker des nombres entiers, il faut par contre utiliser la barre de défilement horizontal pour trouver l’information A_I (auto incrémentation) pour que ce champ soit automatiquement incrémenté. Ce champ est appelé une clé car il est unique pour chaque enregistrement (ligne) de la table.
  • nom et prenom sont des champs pouvant recevoir tout type de texte (nombre, symbole, lettres, etc.) sur une seule ligne en quantité VARiable de 0 à 50 CARactère (en anglais Character) VARCHAR
  • promotion va être indiqué en tant que CHAR (caractère) de taille fixe 4, il faudra forcément avoir 4 symboles 2004, 2005, 2006, 2007. Impossible d’avoir 98,99,00,01,02
  • Appuyer sur le bouton « Sauvegarder » pour créer la table, noter que l’on n’utilise aucun symboles ou accents pour les noms des champs de la base de données

Au moment où vous cliquez sur le bouton A_I, phpmyadmin va vous proposer de fabriquer une index (une information technique de Mysql pour retrouver plus rapidement cette colonne plus particulièrement). En fait Mysql anticipe qu’il va y avoir pas mal de question sur cette colonne. Valider la proposition:

 

 

Insérer des données dans cette table via le bouton « Insérer » en s’inspirant du cas pratique indiqué au dessus :

Faite une dizaine d’enregistrement dans la table eleve.

Créer une nouvelle table appelée email (sans accent) avec 3 colonnes

  •  id est un IDentifiant de type INT indiquant que l’on va stocker des nombres entiers, il faut par contre utiliser la barre de défilement horizontal pour trouver l’information A_I (auto incrémentation) pour que ce champ soit automatiquement incrémenté. Ce champ est appelé une clé car il est unique pour chaque enregistrement (ligne) de la table.
  • mail est un champs pouvant recevoir tout type de texte (nombre, symbole, lettres, etc.) sur une seule ligne en quantité VARiable de 0 à 100 CARactère (en anglais Character) VARCHAR
  • id_eleve est de type INT mais pas avec l’option A_I car il fait référence à la clé de la table eleve. id_eleve est une clé étrangère liant la table eleve à la table email.
  • Insérer des données dans cette table via le bouton « Insérer » en s’inspirant du cas pratique indiqué au dessus
  • Il faudrait disposer au final d’un élève avec plusieurs adresses email, un élève avec une seule adresse email et un élève sans aucune adresse email.

2. Interroger Mysql en SQL

Ouvrer l’onglet SQL en choisissant la base de données base_contact :

Essayez la requête suivante et expliquez son effet:
SELECT prenom,nom FROM eleve ;

Essayez la requête suivante et expliquez son effet :
SELECT * FROM eleve ;

Essayez la requête suivante et expliquez son effet:
SELECT id, nom FROM eleve limit 3,2;

Essayez la requête suivante et expliquez son effet:
SELECT id, nom FROM eleve limit 1,2;

Essayez la requête suivante et expliquez son effet:
SELECT * FROM eleve WHERE Nom = ‘Dupond’ ;

Essayez la requête suivante et expliquez son effet:
SELECT * FROM eleve WHERE Promotion = ‘2008’ ;

Essayez la requête suivante et expliquez son effet:
SELECT * FROM eleve WHERE Promotion = ‘2008’ AND Nom =’Dupond’ ;

COUNT permet de compter le nombre de lignes incluses dans une table, essayer l’exemple:
select count(*) FROM eleve;

Afficher le nombre d’élèves dont le nom commence par D :
select count(*) FROM eleve WHERE nom LIKE ‘D%’;

Afficher (que) les élèves qui ont des emails
SELECT nom,prenom,mail FROM eleve, email WHERE eleve.id=email.id_eleve;

Insérer un nouvel élève
INSERT INTO eleve VALUES(NULL, ‘Gineau’, ‘Nicolas’, ‘2010’);

Supprimer un élève
DELETE FROM eleve WHERE nom=’Gineau’;

Modifier (mettre à jour) le nom d’un élève
UPDATE eleve SET nom=’Dupont’ WHERE nom= ‘Dupond’

Afficher le nombre d’emails par élève
SELECT id_eleve, mail, count(mail) FROM email GROUP BY id_eleve

Faire et expliquer
SELECT * FROM eleve, email WHERE eleve.id = email.id_eleve

Faire et expliquer
SELECT * FROM eleve LEFT JOIN email ON eleve.id = email.id_eleve

Faire une requête SQL qui affiche le nom de l’élève et une de ses adresses emails sans
aucune autre information technique

Faire une requête SQL qui affiche le nom de l’élève et le nombre de ses adresses emails sans aucune autre information technique.

 

3. Création d’un utilisateur de Mysql

Pour accéder à une base de données, il faut disposer d’un compte utilisateur qui dispose de droit sur cette base de données. La création d’un nouvel utilisateur se fait via l’onglet Privilèges ; parfois renommé Utilisateur dans les dernières versions de phpMyAdmin.

Utiliser le bouton « Ajouter un utilisateur » Dans la nouvelle page, il faut indiquer un nom d’utilisateur par exemple user_contact, le client est localhost (ou 127.0.0.1), le mot de passe peut être fabriqué avec le bouton « générer » ou entrer deux fois pour vérification (dans l’exemple ci-après j’utilise VqQEK98bBSGCQ5b2 comme mot de passe).

Cochez la case « Donner les privilèges passepartout (utilisateur\_%) » mais habituellement, l’option « Créer une base portant son nom et donner à cet utilisateur tous les privilèges sur cette base » est utilisée pour fabriquer un utilisateur et une base de données, l’utilisateur ayant tout les droits sur cette base de donnée.

La création de l’utilisateur se fait avec le bouton « Exécuter » qui se trouve tout en base de la page.

4. Interroger Mysql depuis une page PHP

Le programme ci-dessous va fabriquer 3 variables contenant le nom de l’utilisateur de base de données, le mot de passe associé et la base de données que l’on souhaite accéder:

<html>
<body>
<?php
$username = "user_contact";
$password = "VqQEK98bBSGCQ5b2";
$database = "base_contact";

// Connexion à Mysql
$link = mysqli_connect( "localhost" ,$username,$password);

// Sélection de la base de données
mysqli_select_db( $link , $database );

// Création d'une variable pour interroger Mysql
$query = "select nom,prenom from eleve";

// Obtention du résultat dans la variable $result
$result = mysqli_query( $link , $query);

// Boucle pour extraire chaque enregistrement du résultat
while ($row = mysqli_fetch_array( $result , MYSQLI_ASSOC )) {
?>
    <p>
    <?php
         echo( $row["nom"] );
    ?>
    </p>
<?php
}

// Fermeture de la connexion à Mysql 
mysqli_close( $link );
?>
</body>
</html>

 

4 fonctions sont utilisées pour accede à mysql

  • mysql_connect ouvre une connexion avec le logiciel de base de donnés (le SGBD)
  • mysql_select_db permet de choisir une base de données parmi plusieurs
  • mysql_query permet de poser une question en SQL à la base de données
  • mysql_close permet de fermer la connexion avec le logiciel de base de données

Pourquoi le nom est le seul affiché ? Comment corriger cette page pour afficher le prénom et la promotion de chaque élève ?

Sachant que la requête SQL suivante permet de créer un nouvel enregistrement (une nouvelle ligne) dans la table de la base de données, comment faire pour créer un nouvel élève depuis un formulaire:

$query = "insert into eleve( nom, prenom, promotion) values ('Doe' , 'John' , '2014' ) ";
$result = mysqli_query( $link , $query);

Nota: L’explication sur la concaténation ci-dessous peut être utile.

5. Création d’une variable par concaténation

Régulièrement, en PHP, on doit pouvoir fabriquer une variable en « ajoutant » le contenu d’une variable dans une autre variable. Cette opération s’appelle la concaténation.

Il y a plusieurs solutions pour réaliser la concaténation.

L’opérateur de concaténation « . » :

$nom = "Doe";
$prenom = "John";
$nom_prenom = $nom . $prenom;
echo ( $nom_prenom ); // affiche: DoeJohn

Inclusion dans double quote version simple:

$nom = "Doe";
$prenom = "John";
$nom_prenom = "$nom $prenom";
echo ( $nom_prenom ); // affiche: Doe John

Inclusion dans double quote version avancée:

$nom = "Doe";
$prenom = "John";
$nom_prenom = "${nom} ${prenom}";
echo ( $nom_prenom ); // affiche: Doe John

Concaténation avec plusieurs chaines:

$nom = "Doe";
$prenom = "John";
$nom_prenom = $nom . "-". $prenom;
echo ( $nom_prenom ); // affiche: Doe-John

Opération de cherche et remplace successif:

$nom = "Doe";
$prenom = "John";
$nom_prenom = sprintf( "Votre nom: %s ,votre prenom: %s" , $nom , $prenom );
echo ( $nom_prenom ); // affiche: Votre nom:Doe , votre prenom: John

6. Sauvegarder vos tweets dans la base de données

Créer une nouvelle table tweet avec un champ ID de type INT auto incrémenté, un champ pour stocker la date et l’heure de création d’un tweet par exemple create_at avec comme type DATETIME, un champ pour stocker un nombre par exemple nbr_critere de type INT, un champ critere de type VARCHAR 150 caractères.

Modifier votre programme PHP qui accède à l’API twitter, compte le nombre de tweets sur un critère et stocke le nombre de tweets ayant le critère, le critère et la date de création dans Mysql.

Voici un morceau de code pour vous aider :

$query = sprintf("insert into tweet(create_at, nbr_critere, critere) values ( NOW() , %s , '%s' )"
         , $nbr , $critere ) ;
$result = mysqli_query( $link , $query);

ou dans une version différente:

$query = "insert into tweet(create_at, nbr_critere, critere) values ( NOW() , $nbr , '$critere' )";
$result = mysqli_query( $link , $query);

 

Publié dans CTN | Laisser un commentaire