Construire une application sur l'architecture modèle-vue-contrôleur en PHP à partir d'un exemple simple : une liste de choses à faire, avec deux pages types : liste et détails.
Php 2 - Approfondissement MySQL, PDO et MVCPierre Faure
Introduction au langage de programmation PHP.
Présentation réalisée la première fois le lundi 10 mars 2014 à l'IIM : Institut de l'Internet et du Multimédia pour les années préparatoires.
Cette présentation a pour but d'approfondir les compétences PHP des élèves : utiliser des bases de données, comprendre PDO et le modèle MVC (basique).
Après présentation orale de ces slides, des exercices de mise en pratique ont été réalisés en Atelier avec les élèves.
L'exercice principal était de construire une plateforme similaire à twitter selon un modèle MVC.
Voici le plan de la présentation :
• Les bases de données : MySQL
- Principe
- phpMyAdmin
- Interagir avec une BDD
• Les fonctions
- La machine à carottes
- Exemple avec MySQL
- Les fonctions PHP
• Modèle Vue Contrôleur - MVC
- Principe
- Mise en pratique
• Quelques trucs à savoir a.$_FILES et $_POST
- $_SESSION
- L’indentation
- PHP + HTML = ?
Construire une application sur l'architecture modèle-vue-contrôleur en PHP à partir d'un exemple simple : une liste de choses à faire, avec deux pages types : liste et détails.
Php 2 - Approfondissement MySQL, PDO et MVCPierre Faure
Introduction au langage de programmation PHP.
Présentation réalisée la première fois le lundi 10 mars 2014 à l'IIM : Institut de l'Internet et du Multimédia pour les années préparatoires.
Cette présentation a pour but d'approfondir les compétences PHP des élèves : utiliser des bases de données, comprendre PDO et le modèle MVC (basique).
Après présentation orale de ces slides, des exercices de mise en pratique ont été réalisés en Atelier avec les élèves.
L'exercice principal était de construire une plateforme similaire à twitter selon un modèle MVC.
Voici le plan de la présentation :
• Les bases de données : MySQL
- Principe
- phpMyAdmin
- Interagir avec une BDD
• Les fonctions
- La machine à carottes
- Exemple avec MySQL
- Les fonctions PHP
• Modèle Vue Contrôleur - MVC
- Principe
- Mise en pratique
• Quelques trucs à savoir a.$_FILES et $_POST
- $_SESSION
- L’indentation
- PHP + HTML = ?
Cette conférence a été donnée en collaboration avec Guillaume Ponçon, auteur du livre "PHP5 Best Practices". Elle évoque les outils et méthodes permettant de développer avec PHP de manière professionnelle.
Objectif général :
Prendre en main l’une des bibliothèques JavaScript les plus utilisés pour créer des interfaces utilisateurs
Objectifs spécifiques :
Découper l’interface utilisateur avec les composants
Passer des informations (données ou instructions) d’un composant à son composant fils avec « props »
Gérer l’état local d’un composant avec « state »
Afficher une listes de composants avec map()
Afficher un composant en fonction de l’état de l’application
Interagir avec un utilisateur grâce à la gestion des événements
Interagir avec un utilisateur par le biais des formulaires
Communiquer avec un serveur HTTP avec AJAX
Afficher des vues en fonction de l’URL avec le routage
Mettre en forme un composant
Support Dot Net avec C#. Ce cours traite les points suivants :
- Architecture .Net
- Les bases de C#
- Objet et Classe
- Héritage
- Encapsulation
- Polymorphisme
- Les exceptions
- Les entrées sorties
- Les interfaces graphiques
- Le multi Threading
- Programmation réseaux (Sockets et DataGram)
- Accès aux bases de données
Objectif général : Prendre en main l’un des frameworks PHP les plus utilisés
Objectifs spécifiques
Faire correspondre une URL donnée à un traitement précis grâce au routage
Regrouper des traitements connexes grâce aux contrôleurs
Récupérer les données d’une requête http grâce à Request
Retourner des contenus aux formats texte, HTML, JSON, etc. grâce à Response
Intégrer des données dans des templates grâce à Blade
Interagir avec l’utilisateur grâce aux formulaires
Créer, mettre à jour et suivre les évolutions d’un schéma de base de données grâce aux migrations
Faciliter la communication avec une base de données grâce à Eloquent
Bonnes pratiques de developpement en PHPPascal MARTIN
Du haut de ses 14 ans, PHP est devenu une technologie utilisée pour de gros projets ; ce qui signifie besoins importants en termes de qualité, de robustesse, et d'outils de développement fiables.
Contrôle de sources, normes de codage, utilisation de Frameworks, documentation, tests unitaires / fonctionnels automatisés, intégration continue, déploiement, ...
Cette présentation a pour but d'introduire quelques bonnes pratiques de développement, ainsi que des outils permettant de les mettre en place sur des projets PHP.
Introduction à la sécurité des applications web avec php [fr]Wixiweb
Présentation de la conférence Sécurité web / PHP aux #NWXTECH2 par Maxime Mauchaussée / Wixiweb.
Découvrez les principes de bases de la sécurité PHP : les injections SQL, les failles XSS et CSRF et voyez comment vous en protéger simplement.
CReVote: un système de vote électronique résistant à la coercition basé sur l...pacomeambassa
2
éme
Atelier Annuel sur la Cryptographie, Algèbre et Géométrie (CRAG-2), University
of Ngaoundéré, Ngaoundéré, Cameroon, December 03 - 07, 2012. Talk "CReVote : Un
système de vote électronique résistant à la coercition basé sur les courbes elliptiques"
Atelier Annuel sur la Cryptographie, Algèbre et Géométrie (CRAG-1), University of
Cette conférence a été donnée en collaboration avec Guillaume Ponçon, auteur du livre "PHP5 Best Practices". Elle évoque les outils et méthodes permettant de développer avec PHP de manière professionnelle.
Objectif général :
Prendre en main l’une des bibliothèques JavaScript les plus utilisés pour créer des interfaces utilisateurs
Objectifs spécifiques :
Découper l’interface utilisateur avec les composants
Passer des informations (données ou instructions) d’un composant à son composant fils avec « props »
Gérer l’état local d’un composant avec « state »
Afficher une listes de composants avec map()
Afficher un composant en fonction de l’état de l’application
Interagir avec un utilisateur grâce à la gestion des événements
Interagir avec un utilisateur par le biais des formulaires
Communiquer avec un serveur HTTP avec AJAX
Afficher des vues en fonction de l’URL avec le routage
Mettre en forme un composant
Support Dot Net avec C#. Ce cours traite les points suivants :
- Architecture .Net
- Les bases de C#
- Objet et Classe
- Héritage
- Encapsulation
- Polymorphisme
- Les exceptions
- Les entrées sorties
- Les interfaces graphiques
- Le multi Threading
- Programmation réseaux (Sockets et DataGram)
- Accès aux bases de données
Objectif général : Prendre en main l’un des frameworks PHP les plus utilisés
Objectifs spécifiques
Faire correspondre une URL donnée à un traitement précis grâce au routage
Regrouper des traitements connexes grâce aux contrôleurs
Récupérer les données d’une requête http grâce à Request
Retourner des contenus aux formats texte, HTML, JSON, etc. grâce à Response
Intégrer des données dans des templates grâce à Blade
Interagir avec l’utilisateur grâce aux formulaires
Créer, mettre à jour et suivre les évolutions d’un schéma de base de données grâce aux migrations
Faciliter la communication avec une base de données grâce à Eloquent
Bonnes pratiques de developpement en PHPPascal MARTIN
Du haut de ses 14 ans, PHP est devenu une technologie utilisée pour de gros projets ; ce qui signifie besoins importants en termes de qualité, de robustesse, et d'outils de développement fiables.
Contrôle de sources, normes de codage, utilisation de Frameworks, documentation, tests unitaires / fonctionnels automatisés, intégration continue, déploiement, ...
Cette présentation a pour but d'introduire quelques bonnes pratiques de développement, ainsi que des outils permettant de les mettre en place sur des projets PHP.
Introduction à la sécurité des applications web avec php [fr]Wixiweb
Présentation de la conférence Sécurité web / PHP aux #NWXTECH2 par Maxime Mauchaussée / Wixiweb.
Découvrez les principes de bases de la sécurité PHP : les injections SQL, les failles XSS et CSRF et voyez comment vous en protéger simplement.
CReVote: un système de vote électronique résistant à la coercition basé sur l...pacomeambassa
2
éme
Atelier Annuel sur la Cryptographie, Algèbre et Géométrie (CRAG-2), University
of Ngaoundéré, Ngaoundéré, Cameroon, December 03 - 07, 2012. Talk "CReVote : Un
système de vote électronique résistant à la coercition basé sur les courbes elliptiques"
Atelier Annuel sur la Cryptographie, Algèbre et Géométrie (CRAG-1), University of
Une révision des principaux concepts du langage JavaScript : variables, fonctions, types, fermetures (closures), objets et prototypes, format JSON. De nombreux exemples téléchargeables sur GitHub.
Conception et développement d’une place de marché B2CNassim Bahri
Mon mémoire de PFE pour le projet Conception et développement d'une place de marché destiné au grand public(B2C).
Le concept de cette place de marché est assez simple puisqu’il joue le rôle d’un portail qui met en relation les entreprises avec une grande masse de clients. Ce dernier est composé de plusieurs vitrines dont chacune est relative à une entreprise qui sera responsable de la gérer suite à un contrat avec la poste.
Présentation de la plateforme J2EE issue de la formation J2EE réalisée par le club CFEM ( club futur entrepreneur en multimédia) au sein de l'institut supérieur d'informatique et multimédia de sfax (ISIMS)
- Qu'est ce que le big data ?
- Exemples d'utilisation
- Le web, l'open data et le web sémantique
- Les algorithmes
- Qu’est ce que ce la change concrètement ?
- Notre projet square predict
Conception et Réalisation d’un Système de Vote Electronique (Blondel Seumo)Gantner Technologies
Le thème soumis à notre étude dans le cadre du projet de fin d’études pour l’obtention d’une licence technologique en Informatique et Réseau, option Concepteur Développeur
Réseaux Internet s’intitule : « Conception et Réalisation d’un Système de Vote Electronique ».
L’application ainsi réalisée prend en compte deux aspects : sécurité et gestion. L’aspect sécurité qui donne la possibilité à chaque usager votant de s’inscrire à une
élection (le succès de son inscription marqué par la réception de son mot de passe par message), à l’administrateur d’enregistrer les partis politiques et de les affecter à l’élection de leur choix; de paramétrer une élection. L’aspect gestion donne la possibilité de lister les candidats à une
élection, d’avoir le nombre d’électeurs pour une élection, d’avoir le nombre d’électeurs ayant participés ou non à une élection, de donner le pourcentage de vote obtenu pour chaque candidat, le nombre d’électeur inscrit dans chaque ville, de visualiser la profession de foi de tous les candidats à l’élection. La possibilité d’avoir le pourcentage général des votes pour une élection, et la liste des candidats ayant déjà participé à une élection. Pour parvenir aux résultats, plusieurs outils ont été mis à profit.
(conception and realization of an electronic voting system by Blondel Seumo)
Vous avez déjà travaillé avec de vieux projet PHP (3,4), du “include-ception” ou tout simplement un framework non PSR-0? Voici un retour sur les étapes employé dans différent cas de migration de “legacy” vers Symfony 2.
Comment relire du code pourri sans se fatiguerDamien Seguy
Pour assurer une revue continue du code PHP, il faut deux outils : une référence de programmation, avec des recommendations claires et adaptées. Celle-ci peut se constituer aisément à partir des recommandations du manuel officiel, des bonnes pratiques et des traditions PHP. L'autre outil est un auditeur statique, qui repasse chaque ligne au peigne fin et traque inlassablement ce qui doit être amélioré. Nous verrons comment ils fonctionnent ensemble, et jusqu'où ils peuvent mener votre code sur le chemin de la qualité.
Quelle place pour le framework Rails dans le développement d'application web5pidou
Cette présentation a été réalisée dans le cadre des Rencontres Mondiales décentralisées du Logiciel Libre (RMLLd) qui se sont déroulées du 1er au 3 Juillet 2011 à Saint-Joseph (Ile de la Réunion).
Symfony2 - Un Framework PHP 5 PerformantHugo Hamon
L’arrivée de PHP 5.3 en milieu d’année 2009 a bouleversé la manière de développer des applications web. En effet, cette nouvelle version a apporté de nouveaux outils au langage tels que les espaces de nommage qui favorisent la réutilisabilité du code lorsqu’ils sont employés à bon escient. Les nouveaux frameworks de développement rapide ont aussi suivi le mouvement et reposent sur la base de PHP 5.3. C’est le cas de Symfony2 dont la version stable est prévue prochainement.
Cette présentation offre un tour d’horizon de la nouvelle architecture du framework qui s’articule autour de “bundles”, de librairies externes et de nombreux composants indépendants tels que le conteneur d’injection de dépendances. Nous dresserons un panorama des principales fonctionnalités offertes par le framework telles que la couche d’ORM Doctrine 2, le moteur de templating Twig et la gestion des formulaires. Nous nous intéresserons également à la gestion du cache HTTP, à la couche de sécurité ainsi qu’aux outils de débogage destinés à améliorer la productivité du développeur et la maintenance de l’application.
La plateforme Web Microsoft ne cesse d'évoluer. La sortie de Visual Studio 2013 s'accompagne d'ASP.NET MVC5 et Web API 2, qui apportent chacunes leurs lots de nouveautés ! Dans cette session, vous découvrirez toutes les nouvelles APIs et nouveaux outils pour développer des applications Web avec Visual Studio 2013.
Speakers : Simon Ferquel (Infinite Square), Julien Corioland (Infinite Square)
SOLID : les principes à l’origine du succès de Symfony et de vos applicationsVladyslav Riabchenko
SOLID est un acronyme représentant cinq principes de bases de la programmation orientée objet permettant le développement de logiciels fiables, évolutifs et robustes. Le framework Symfony est un excellent support pour illustrer chacun de ces principes. Nous verrons ainsi que SOLID est à l’origine de sa flexibilité, sa fiabilité mais aussi de sa maintenabilité et son évolutivité. Nous verrons également comment appliquer ces principes pour améliorer son code métier et perfectionner l’architecture de son application.
Le 17 janvier 2014, l'équipe Cellenza vous proposait une soirée communautaire vous permettant de découvrir ASP.NET MVC. Voici les slides de la session.
Découverte du moteur de rendu du projet SpartanMicrosoft
Dans cette session, nous découvrirons l'ensemble des nouveautés du moteur de rendu du dernier navigateur de Microsoft. Vous l'avez peut-être déjà découvert lors de l'évènement du 21 janvier. Venez cette fois-ci découvrir ce qu'il y a sous le capot du point de vue du développeur. Ce sera pour nous l'occasion de vous parler des dernières technologies HTML5 comme ECMAScript 6, des dernières avancées côté WebGL ou bien encore du support de Web Audio. Pour finir, vous verrez également les progrès que nous avons effectué du côté la barre de développement.
2. Séance précédente
• Projet: Listing des produits
• Projet: Listing de produits par catégorie
• Projet: Ajout de produits au panier
• Projet: Retirer des produits depuis le panier
• Les concepts fondamentaux de la programmation
orientée objet
• La programmation orientée objet en PHP
• Les exceptions
• Les fichiers
• Projet: Utilisation des concepts orientés objet
3. Séance d'aujourd'hui
• Projet: Passer la commande
• Sécuriser une application PHP/MySQL
• Projet: Sécuriser notre site e-commerce
• Architecture MVC
• Projet: Adoption de l'architecture MVC
• Simulation d’entretien technique PHP / MySQL
6. Quoi sécuriser ?
• Dans un code php il faut sécuriser les données
entrantes et sortantes:
• Données entrantes: Depuis un formulaire
(injection SQL)
• Données sortantes: Affichages depuis la base de
données (injection HTML, XSS)
6
7. Injection SQL
7
<?php
$requete = "SELECT * FROM user WHERE email = ' " . $_GET['email'] . " '
AND password = ' " . $_GET['password'] . " ' ";
?>
<?php $_GET['password'] = " ' OR 1 = '1 "; ?>
<?php
$requete = "SELECT * FROM user WHERE email = ' " . $_GET['email'] . " '
AND password = ' ' OR 1 = '1' ";
?>
8. Injection SQL: suppression
8
<?php
$requete = "DELETE FROM user WHERE id = ' " . $_GET['id'] . " ' ";
?>
<?php $_GET['id'] = "1 ' OR id > '0 "; ?>
<?php
$requete = "DELETE FROM user WHERE id = '1' OR id > '0' ";
?>
9. Injection SQL: Utilisation des caractères % et _
9
<?php
$requete = "SELECT * FROM user WHERE email LIKE ' " . $_GET['email'] .
" ' ";
?>
<?php $_GET['email'] = "a%"; ?>
<?php
$requete = "SELECT * FROM user WHERE email LIKE 'a%' ";
?>
10. Injection SQL: Solution !
10
Une fonction très pratique pour empêcher les injections
SQL est mysql_real_escape_string()
Cette fonction échappe les caractères suivants:
les guillemets simples '
les guillemets doubles "
les slashes /
les caractères NULL
En gros, elle neutralise tous les caractères susceptibles
d'être à l'origine d'une injection SQL
11. Injection SQL: Solution !
11
Exemple d’utilisation de la fonction
mysql_real_escape_string()
<?php
$email = mysql_real_escape_string($_POST['email']);
$requete = "SELECT * FROM user WHERE email = '$email' ";
?>
12. Injection SQL: Solution !
12
Exemple d’utilisation de la fonction addcslashes()
<?php
$chaine = "%salut_";
// Échappement des caractères % et _
$chaine = addcslashes($chaine, '%_');
echo $chaine; // Affiche %salut_
?>
13. Injection SQL: Solution finale!
13
<?php
function secureInput($string)
{
// On regarde si le type de string est un nombre entier (int)
if (ctype_digit($string))
{
$string = intval($string);
}
else
{
$string = mysql_real_escape_string($string);
$string = addcslashes($string, '%_');
}
return $string;
}
?>
14. Injections HTML ou XSS
14
<html>
<head>
<title>Injection HTML</title>
</head>
<body>
<?php echo "Salut, tu t'appelles ".$_GET['pseudo']; ?>
</body>
</html>
http://mon_url/index.php?pseudo=<i>zaki</i>
http://mon_url/index.php?pseudo=<i>zaki</i>
<script src="http://sitepirate.com/injection.js" >
15. Injections HTML ou XSS: Solution !
15
<html>
<head>
<title>Injection HTML</title>
</head>
<body>
<?php echo "Salut, tu t'appelles ".htmlentities($_GET['pseudo']); ?>
</body>
</html>
http://mon_url/index.php?pseudo=<i>zaki</i>
http://mon_url/index.php?pseudo=<i>zaki</i>
<script src="http://sitepirate.com/injection.js" >
18. MVC c’est quoi ?
18
Le pattern MVC signifie Modèle - Vue - Contrôleur, il permet de bien organiser le
code source, son but est de séparer la logique du code en trois parties que l'on
retrouve dans des fichiers distincts.
Cette fonction échappe les caractères suivants:
Modèle : cette partie gère les données de votre site, son rôle est d'aller récupérer
les informations « brutes » dans la base de données, de les organiser et de les
assembler pour qu'elles puissent ensuite être traitées par le contrôleur, on y
trouve donc les requêtes SQL.
Vue : cette partie se concentre sur l'affichage, elle ne fait presque aucun calcul et
se contente de récupérer des variables pour savoir ce qu'elle doit afficher, on y
trouve essentiellement du code HTML mais aussi quelques boucles et conditions
PHP très simples.
Contrôleur : cette partie gère la logique du code qui prend des décisions, c'est en
quelque sorte l'intermédiaire entre le modèle et la vue : le contrôleur va demander
au modèle les données, les analyser, prendre des décisions et renvoyer le texte à
afficher à la vue, le contrôleur contient exclusivement du PHP.
22. Questions entretiens PHP / MySQL
22
Quelle fonction retourne le nombre de secondes
écoulées depuis le 1er janvier 1970 ?
1. time
2. timestamp
3. mktime
4. microtime
23. Questions entretiens PHP / MySQL
23
Quelle fonction retourne le nombre de secondes
écoulées depuis le 1er janvier 1970 ?
1. time
2. timestamp
3. mktime
4. microtime
24. Questions entretiens PHP / MySQL
24
Dans quel tableau de données retrouve-t-on les
cookies du visiteur ?
1. $SETCOOKIE
2. $COOKIES
3. $_COOKIE
25. Questions entretiens PHP / MySQL
25
Dans quel tableau de données retrouve-t-on les
cookies du visiteur ?
1. $SETCOOKIE
2. $COOKIES
3. $_COOKIE
26. Questions entretiens PHP / MySQL
26
Quelle fonction permet de lire le résultat d'une
ressources MySQL renvoyée par mysql_query() ?
1. mysql_fetch_row()
2. mysql_data_seek()
3. mysql_affected_rows()
27. Questions entretiens PHP / MySQL
27
Quelle fonction permet de lire le résultat d'une
ressources MySQL renvoyée par mysql_query() ?
1. mysql_fetch_row()
2. mysql_data_seek()
3. mysql_affected_rows()
28. Questions entretiens PHP / MySQL
28
Comment peut-on trier un tableau en ordre inverse ?
1. $tableau = ksort($tableau);
2. rsort($tableau);
29. Questions entretiens PHP / MySQL
29
Comment peut-on trier un tableau en ordre inverse ?
1. $tableau = ksort($tableau);
2. rsort($tableau);
32. Questions entretiens PHP / MySQL
32
On évalue le code suivant:
$kiwi = 'vert';
$fruit = &$kiwi;
$fruit = array();
$fruit['kiwi'] = $kiwi;
Que contient $fruit ?
1. Rien
2. wiki
3. vert
4. La variable n'est pas définie.
33. Questions entretiens PHP / MySQL
33
On évalue le code suivant:
$kiwi = 'vert';
$fruit = &$kiwi;
$fruit = array();
$fruit['kiwi'] = $kiwi;
Que contient $fruit ?
1. Rien
2. wiki
3. vert
4. La variable n'est pas définie.
34. Questions entretiens PHP / MySQL
34
Ma page index.php contient le code suivant:
$a = 'a'.file_exists(__FILE__);
$a1 = 'wiki';
$a2 = 'kiwi';
echo ${$a};
Qu'est-ce qui s'affiche si on y accède ?
1. Une page blanche.
2. kiwi.
3. wiki
4. Une erreur PHP.
5. Aucune des solutions précédentes
35. Questions entretiens PHP / MySQL
35
Ma page index.php contient le code suivant:
$a = 'a'.file_exists(__FILE__);
$a1 = 'wiki';
$a2 = 'kiwi';
echo ${$a};
Qu'est-ce qui s'affiche si on y accède ?
1. Une page blanche.
2. kiwi.
3. wiki
4. Une erreur PHP.
5. Aucune des solutions précédentes
36. Questions entretiens PHP / MySQL
36
Comment forcer l'arrêt d'un script ?
Comment inclure un script à l'intérieur d'un autre ?
Comment faire une redirection ?
Comment conserver des variables de page en page ?
Peut-on modifier une constante ?
Comment déclarer une classe en PHP 5 ?
Comment faire de l'héritage en PHP 5 ?
Est-il possible de faire de l'héritage multiple en PHP ?
Comment initialiser les arguments d'une fonction par
défaut ?
Le code PHP est-il visible pour tous ?
Comment concaténer des chaînes des caractères ?
Quelle est la différence entre l’envoi de données en
POST et en GET ?
Quelle est la différence entre include et require ?