Introduction Javascript Javascript et les formulaires L
Transcription
Introduction Javascript Javascript et les formulaires L
Introduction
IFT1147
Programmation Serveur Web avec PHP
PHP ne permet pas seulement de
générer du code HTML.
On peut, entre autres, créer et traiter
Au delà du HTML
…
création dynamique de Javascript,
d’images et de fichiers PDF
Du code Javascript
Des images et des fichiers PDF
Des documents XML
Des applications indépendantes avec
interface graphique
IFT1147 - Au delà du HTML
Javascript
PHP et Javascript
Javascript est un langage de
programmation qui s’exécute à l’intérieur
du navigateur.
JS permet de créer des pages interactives
qui sont plus indépendantes du serveur
Web.
Toute utilisation de JS doit s’assurer de sa
compatibilité avec divers navigateurs.
Comment créer une collaboration
entre la programmation côté
serveur et celle côté client …
IFT1147 - Au delà du HTML
4
L’événement onSubmit
Javascript et les formulaires
JS permet de vérifier la validité des
entrées d’un formulaire côté client, avant
de les soumettre au serveur.
L’usager n’a alors pas à recharger la
page seulement pour obtenir un
message d’erreur.
Une deuxième validation côté serveur
reste toujours obligatoire !
IFT1147 - Au delà du HTML
2
5
On peut valider un formulaire en
associant une fonction JS (qui retourne
une valeur booléenne) à l’événement
onSubmit du formulaire.
Le formulaire sera envoyé seulement si
la fonction retourne true.
IFT1147 - Au delà du HTML
6
1
JS et les expressions régulières
Recette pour une vérification
Une expression régulière est un objet en
Javascript et elle peut être créée par
var expReg = /abcdf$/;
function verifierFormulaire() {
var pattern =/abcdf/;
if (pattern.test(document.monForm.cp.value)) {
return true;
La méthode test() permet de vérifier
si une chaîne de caractères satisfait à
l’expression régulière
if (expReg.test("asdfasf"))
} else {
window.alert("Message d’erreur");
return false;
}
}
IFT1147 - Au delà du HTML
7
IFT1147 - Au delà du HTML
JS et PHP
Deuxième recette de vérification
$regExp ="^[A-Z] ";
Il est pratique de générer le code de
vérification JS automatiquement en PHP.
Ainsi, lorsqu’on modifie le formulaire et
l’expression régulière en PHP,
automatiquement, le code JS est mis à
jour.
Il suffit pour cela d’imprimer l’expression
régulière JS à partir de celle de PHP.
IFT1147 - Au delà du HTML
8
function verifierFormulaire() {
var pattern =/<?= $regExp ?>/;
if (pattern.test(document.monForm.cp.value)) {
return true;
} else {
window.alert("Message d’erreur");
return false;
}
}
9
De Javascript à PHP
IFT1147 - Au delà du HTML
10
Déphasage de l’exécution
Et si on voulait utiliser la valeur d’une
variable JS dans un script PHP ?
La bonne nouvelle:
C’est possible.
La mauvaise nouvelle:
Les exécutions de JS et PHP sont
déphasées et se déroulent à des endroits
différents !
Le code PHP génère le code HTML (et JS)
côté serveur.
Ensuite, ce code est envoyé au
navigateur, côté client.
L’exécution du code JS se déroule donc
après l’exécution du code PHP et
l’instance PHP ne peut pas être jointe en
JS.
IFT1147 - Au delà du HTML
IFT1147 - Au delà du HTML
11
12
2
De Javascript à PHP : solution
Javascript à PHP : exemple
La seule façon de faire parvenir la valeur
d’une variable JS à PHP est de générer
une nouvelle requête HTTP (il faut créer
un nouveau processus PHP).
Il faut donc intégrer la valeur de la
variable de façon astucieuse à la page et
Générer une soumission de formulaire ou
Créer une redirection
IFT1147 - Au delà du HTML
<script type="text/javascript">
function envoyer() {
document.monForm.nbSec.value=nb;
document.monForm.submit();
}
</script>
[…]
<a href="javascript:envoyer()"> … </a>
[…]
<form name="monForm" method="post" action="p.php">
<input type="hidden" name="nbSecondes" value="0">
</form>
13
IFT1147 - Au delà du HTML
14
PHP et les images
Création d’images
PHP peut générer dynamiquement (selon
les options de compilation) des images
en format png, jpg et gif.
Il y a, de façon générale, deux options:
Sauvegarder l’image sur le disque et créer
un lien qui pointe vers ce fichier.
Retourner l’image directement à partir du
code PHP.
IFT1147 - Au delà du HTML
Sauvegarde dans des fichiers
Script PHP qui retourne une image
Apache doit pouvoir créer de nouveaux
fichiers dans le répertoire qui contiendra
les images dynamiques.
Les noms de fichiers doivent être
uniques.
Il faut, de temps en temps, faire le
ménage, i.e. effacer les anciens fichiers,
dans ce répertoire (crontab).
IFT1147 - Au delà du HTML
16
Il faut indiquer au navigateur par
l’instruction header qu’il ne recevra pas
du texte en format HTML, mais bien une
image.
Il peut y avoir des problèmes de gestion
de la mémoire cache dans certains cas;
solution: inclure un paramètre aléatoire
« inutile » en GET.
17
IFT1147 - Au delà du HTML
18
3
Quelques fonctions d’image
Fonctions de base ou librairies ?
imageCreate() crée une nouvelle image
imageColorAllocate() crée une couleur
ImageFilledRectangle() dessine un
rectangle rempli
ImageString() imprime un texte dans
l’image
…
IFT1147 - Au delà du HTML
19
JpGraph
IFT1147 - Au delà du HTML
20
Apprendre JpGraph
JpGraph est une librairie populaire pour
la création de graphiques statistiques.
http://www.aditus.nu/jpgraph/
L’utilisation de JpGraph est seulement
gratuite pour utilisation non commerciale.
IFT1147 - Au delà du HTML
Les fonctions disponibles directement en
PHP sont des fonctions de base.
Créer une image complète demande
beaucoup de code PHP.
Plusieurs librairies de plus haut niveau
ont été développées afin de simplifier le
travail; il faut vérifier leurs licences avant
de les utiliser.
21
Exemple d’utilisation de JpGraph
Le meilleur document pour apprendre
JpGraph est la documentation fournie.
Il suffit de télécharger JpGraph: vous
obtiendrez, en plus des classes PHP,
plusieurs centaines d’exemples et de
fichiers HTML de documentation.
IFT1147 - Au delà du HTML
22
Création de documents PDF
$graph = new Graph(300,200,'auto');
$graph->SetShadow();
$graph->SetScale("textlin");
$graph->title->Set("Fruits favoris");
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->SetTickLabels($labels);
$bp = new BarPlot($data);
$bp->value->Show();
$bp->SetShadow();
$graph->Add($bp);
//sauvegarder
$fileName = tempnam("dynamic", "jpgraph");
$graph->Stroke($fileName);
IFT1147 - Au delà du HTML
23
4
Utilisation
PHP et PDF
Le langage HTML ne se prête pas très
bien à la génération de documents
imprimables.
Pour tout document qui doit être
imprimé (par exemple des factures), le
langage PDF est un meilleur choix.
Le langage PDF est ouvert et sa
documentation disponible gratuitement.
IFT1147 - Au delà du HTML
Il est possible de générer des documents
PDF dynamiquement à partir de PHP.
Les librairies les plus utilisées sont
25
Quel librairie choisir ?
PHP et XML
IFT1147 - Au delà du HTML
26
Exemple d’utilisation de FPDF
PDFLib est très rapide mais son
installation demande une recompilation
de PHP. C’est une librairie commerciale.
Les deux autres librairies sont écrites en
PHP et sont disponibles gratuitement.
R&OS semble être très facile à utiliser
dans une majorité de cas (en particulier
pour générer des tableaux).
IFT1147 - Au delà du HTML
PDFlib (http://www.pdflib.com)
FPDF (http://www.fpdf.org)
R&OS pdf class (http://www.ros.co.nz/pdf/)
$pdf = new FPDF('P', 'mm', 'Letter');
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Bonjour !');
$pdf->SetFont('Arial','B',40);
$pdf->Cell(40,100, 'utilisation de fpdf');
$pdf->Output();
27
IFT1147 - Au delà du HTML
28
XML
XML : Extensible Markup Language
XML est un langage de description de
données.
XML se sert, comme HTML, de balises,
mais l’usager peut les définir lui-même.
Contrairement à HTML, toutes les balises
doivent être fermées en XML.
IFT1147 - Au delà du HTML
30
5
Documents valides
Exemple de document XML
Tout document XML doit être « bien
formé » (well-formed).
De plus, on peut définir des langages
précis en se servant de
<?xml version="1.0"?>
<acteurs>
<acteur>
<nom>Cote</nom>
<prenom>Michel</prenom>
<naissance>1950-06-25</naissance>
</acteur>
<acteur>
<nom>Cruise</nom>
<prenom>Tom</prenom>
<naissance>1962-07-03</naissance>
</acteur>
</acteurs>
DTD (Document Type Definition)
XML Schema (plus précis et plus récent que
les DTD)
IFT1147 - Au delà du HTML
31
IFT1147 - Au delà du HTML
Arbre du document XML
XML et PHP
Le support XML pour PHP est encore
assez récent et des changements sont à
prévoir !
En particulier, la documentation sur
php.net laisse à désirer …
PHP5 supportera mieux XML
acteurs
acteur
acteur
nom
prenom
naissance
nom
prenom
naissance
Cote
Michel
1950-06-25
Cruise
Tom
1962-07-03
IFT1147 - Au delà du HTML
33
IFT1147 - Au delà du HTML
SAX et DOM
34
Lecture d’un document avec SAX
La lecture de documents XML peut être
séparée en deux familles: SAX et DOM
SAX est basé sur des événements,
comme l’ouverture ou la fermeture d’une
balise.
DOM génère une représentation
complète du document XML en mémoire.
SAX consomme moins de mémoire que
DOM … il est donc préférable pour des
documents volumineux.
Il faut définir des fonctions à exécuter
lorsque la lecture rencontre
IFT1147 - Au delà du HTML
32
35
L’ouverture d’une balise
La fermeture d’une balise
Le contenu d’une balise
IFT1147 - Au delà du HTML
36
6
Exemple SAX
Lecture d’un document avec DOM
L’utilisation de DOM est généralement
plus simple que SAX.
Il suffit de charger le document en
mémoire.
On peut parcourir la représentation du
document en accédant à la racine et en
suivant, par la suite, les relations
d’enfant, de frère etc.
$parser = xml_parser_create();
xml_parser_set_option($parser,
XML_OPTION_CASE_FOLDING, 0);
xml_set_element_handler($parser,
"startTagHandler", "endTagHandler");
xml_set_character_data_handler($parser,
"cdataHandler");
xml_parse($parser,
file_get_contents('acteurs.xml'));
xml_parser_free($parser);
IFT1147 - Au delà du HTML
37
Exemple DOM
39
XSLT - déroulement
Document
XML
XSLT : Extensible Style Language
Transformations
XSLT permet de transformer un
document XML
XSLT est plus qu’une feuille de style: on
peut trier, créer des formats de
documents différents (HTML, PDF) etc.
IFT1147 - Au delà du HTML
40
Exemple de document XSL
Document
XSLT
Document
HTML
IFT1147 - Au delà du HTML
38
XSLT
$xmldoc = domxml_open_file("acteurs.xml",
DOMXML_LOAD_DONT_KEEP_BLANKS);
$docRoot = $xmldoc->document_element();
$acteurs = $docRoot->child_nodes();
foreach ($acteurs as $currentActeur) {
$nomNode = $currentActeur->first_child();
echo $nomNode->get_content();
$prenomNode = $nomNode->next_sibling();
echo $prenomNode->get_content();
}
IFT1147 - Au delà du HTML
IFT1147 - Au delà du HTML
41
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<h2>Acteurs</h2>
<table>
<xsl:for-each select="acteurs/acteur">
<tr>
<td><xsl:value-of select="nom"/></td>
<td><xsl:value-of select="prenom"/></td>
<td><xsl:value-of select="naissance"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
IFT1147 - Au delà du HTML
42
7
Exemple de transformation XSLT
PHP en ligne de commande
$xmldoc = domxml_open_file("acteurs.xml");
$xsldoc = domxml_xslt_stylesheet_file (
"acteurs.xsl");
PHP n’est pas limité au Web …
$result = $xsldoc->process($xmldoc);
echo $result->dump_mem();
IFT1147 - Au delà du HTML
43
Pourquoi ?
Documentation
PHP est un langage de programmation
relativement rapide à apprendre.
PHP est disponible sur beaucoup de
plateformes.
Il est donc « naturel » de vouloir l’utiliser
en ligne de commande, afin de
remplacer des scripts en Perl, bash, etc.
http://www.php.net/manual/en/features.
commandline.php
Interfaces graphiques:
http://gtk.php.net/
IFT1147 - Au delà du HTML
IFT1147 - Au delà du HTML
45
46
8