Upload
vincent-juillot
View
228
Download
0
Embed Size (px)
DESCRIPTION
Stage effectué dans l'entreprise E.I. Christophe Hiribarren en tant que développeur web.
Citation preview
JUILLOT VINCENT
AFPA de Pau
RRaappppoorrtt ddee ssttaaggee
Formation Développeur Logiciel
Année 2011
1
REMERCIEMENTS
Mes remerciements s’adressent, tout d’abord, à Monsieur Christophe Hiribarren qui
m’a aidé et soutenu tout au long de ce stage.
Je remercie également les formateurs de l’AFPA, Mireille et François, pour leurs
conseils, leurs enseignements et leurs disponibilités.
Je tiens à remercier tous mes proches et amis pour leurs conseils et leur soutien. Enfin,
je remercie Aude pour son soutien et sa présence de tous les jours.
2
Sommaire
REMERCIEMENTS .................................................................................................................. 1
INTRODUCTION ...................................................................................................................... 3
I - Présentation de la structure .................................................................................................... 4
II - Déroulement du stage et des actions conduites .................................................................... 6
a) Le stage et ma relation avec l’entreprise ......................................................................... 6
b) Projets de refonte ............................................................................................................. 6
c) Projet de création d’un site web pour un « Ensemble scolaire » ..................................... 7
Cahier des charges .............................................................................................................. 8
L’arborescence du site ...................................................................................................... 11
Story-board et Scénarios .................................................................................................. 12
III - Bilans techniques et propositions d’actions ...................................................................... 16
a) Bilan de mes projets de refonte ..................................................................................... 16
Projet Camping Manex .......................................................................................... 16
Projet Locations Leiza ........................................................................................... 16
Projet Auberge de la Corniche ............................................................................... 16
Projet Hôtel Bellevue ............................................................................................. 16
Projet Hiribarren .................................................................................................... 16
b) Bilan du projet de l’école Saint Etienne d’Espelette ................................................. 16
CONCLUSION ........................................................................................................................ 18
ANNEXES ............................................................................................................................... 19
Voici le Javascript diaporama ....................................................................................... 19
Voici le script utilisé pour le formulaire de contact ...................................................... 38
Voici les actions d’interactions avec la base de données et la page « actualités » du site
de l’école Saint Etienne : ...................................................................................................... 46
INDEX ..................................................................................................................................... 58
3
INTRODUCTION
Après de nombreuses recherches d’entreprise pour effectuer mon stage de fin d’études
à l’AFPA, j’ai choisi de privilégier une petite entreprise locale. Je me suis donc adresser à
Monsieur Hiribarren, chef de l’entreprise EI Christophe Hiribarren à Espelette. J’ai constaté
que le pôle développement était délaissé depuis quelques années et ce au profit d’une forte
demande en maintenance. Par conséquent, j’ai vu l’opportunité de proposer mes compétences
dans le domaine du développement de site web. De fait, mon objectif premier est de relancer
l’activité création de site web. L’entreprise ayant beaucoup de demandes dans ce domaine,
elle pourrait envisager de créer un poste en réponse à ces dernières.
En intégrant ce stage, je souhaitais acquérir de l’expérience en vue d’une future
embauche. De plus, il me semblait important de me perfectionner. Enfin, un des mes autres
objectifs était d’avoir un référencement notamment en créant mes propres sites web.
Dès mon premier jour de stage, je me suis investi afin d’offrir l’opportunité à
l’entreprise de développer son activité de création de sites sur le territoire. L’enjeu fut donc de
créer ou remettre à jour différents types de sites web afin de repositionner la structure et
d’acquérir une nouvelle clientèle.
Le présent rapport se compose de trois parties distinctes reprenant le déroulement et le
contenu de mon stage. Je présenterai, tout d’abord, l’entreprise. Puis dans un deuxième temps,
j’aborderai le contenu de mon stage de manière détaillée afin de présenter les projets réalisés.
Enfin, j’effectuerai un bilan de ces sept semaines de stage.
4
I - Présentation de la structure
L’entreprise EI Christophe Hiribarren est une petite structure familiale qui comporte
un couple d’employés. Basée au petit village d’Espelette situé à 30kms de Bayonne dans le
Pays Basque, cette structure existe depuis janvier 2001.
Adresse :
E.I. Christophe HIRIBARREN
205, Merkatu Plaza
64250 ESPELETTE
Contact :
Tél : 05.59.93.90.04
Fax : 05.59.93.92.34
E-mail : [email protected]
Elle exerce plusieurs activités :
o L’installation réseau chez les professionnels
o L’installation des « box » chez les particuliers
o Vente et réparation de matériel informatique et bureautique
o Création de site web
5
Malheureusement, les locaux n’étaient pas assez grands pour m’accueillir cependant
Monsieur Hiribarren m’a pris en stage dans le cadre du télétravail.
C’est une structure plutôt fleurissante qui comme toutes les petites entreprises connaît
quelques aléas. Actuellement, le patron finalise l’obtention d’un permis de construire pour
pouvoir bâtir des locaux de 100m². Ce qui me permettra peut-être par la suite de travailler sur
place.
Comme vous venez de le comprendre, il y a du travail. Les clients sont aussi bien des
professionnels que des particuliers avec beaucoup de fidèles.
Après, cette présentation je vais vous expliquer le déroulement de ces sept semaines.
6
II - Déroulement du stage et des actions conduites
a) Le stage et ma relation avec l’entreprise
Tout d’abord, je travaillais trente cinq heures par semaine de 8H30 à 12H30 et de
13H30 à 17H30 du lundi au jeudi et de 9H à 12H le vendredi. Cependant, le risque du
télétravail est de ne pas ressentir la coupure entre le monde professionnel et personnel. Par
conséquent, le travail étant passionnant, ces horaires étaient souvent dépassés.
Cette expérience en télétravail m’a permis de travailler avec un nouveau mode
fonctionnement. Nous communiquions par le biais d’email et du téléphone. De plus, je
développais sur VPN (Virtual Private Network), ce qui me permettait d’avoir accès à toutes
leurs données de développement. Ils utilisent un serveur local pour stocker toutes leurs
informations (Comptabilité, Fiche de renseignement des clients, site web déjà créé, etc.)
Le contact avec Monsieur Hiribarren était régulier. En effet, nous nous appelions
souvent et j’envoyais plus de dix emails par jour pour le tenir au courant de mon travail. La
relation professionnelle était très respectueuse dans les deux sens. Au fil des semaines, notre
relation évoluait positivement.
b) Projets de refonte
Durant ces sept semaines, j’ai effectué de nombreuses tâches différentes. Tout
d’abord, j’ai refondu quatre sites vitrines qui avaient des problèmes d’affichage ou que le
client souhaitait plus moderne :
http://www.camping-manex.com/
Réalignement des pages et ajout d’un diaporama photo.
http://www.location-leiza.fr/
Refonte du menu et ajout d’un diaporama photo.
http://www.aubergedelacorniche.com/
Refonte totale du site avec nouvelle présentation, ajout d’un diaporama photo et
affichage d’un document PDF directement dans la page.
http://www.hotel-bellevue64.fr/
Refonte totale du site avec nouvelle présentation, ajout de plusieurs diaporama photo
et affichage de plusieurs documents PDF directement dans les pages.
7
Ensuite et à la demande de Monsieur Hiribarren, j’ai entrepris la refonte totale du site de
l’entreprise elle-même (http://www.hiribarren.com/ ). Il avait plus de dix ans et n’était donc
plus dans le style actuel. Monsieur Hiribarren m’a laissé libre de la création de son site web.
J’ai donc créé un site moderne et graphique à l’image de l’entreprise. Afin de répondre à cette
demande, j’ai tout changé :
Mise en place d’un nouveau menu
Mise en place d’un diaporama images de site web avec liens directs
Mise en place d’affichage de documents PDF directement dans les pages
Mise en place d’un formulaire de contact
Mise en place d’un système de maintenance en ligne
Mise en place d’une nouvelle mise en page
c) Projet de création d’un site web pour un « Ensemble scolaire »
Ce dernier projet est le plus conséquent et passionnant. Monsieur Hiribarren m’a demandé
que l’on élabore ensemble un site pour un « Ensemble scolaire » dont il est le Président du
Conseil. Il m’a donné carte blanche et j’ai créé mon propre cahier des charges. Après
beaucoup de réflexion et de discussions, nous avons créé un site plutôt ludique et simple
d’utilisation à l’adresse suivante :
http://www.ecole-saint-etienne-espelette.fr/
Ce projet étant une demande récente d’un client, j’ai réalisé la totalité du site web. Par
conséquent, vous trouverez dans les pages suivantes la description du site de l’école Saint
Etienne d’Espelette :
Cahier des charges
Arborescence
Story-board et scénario
8
Cahier des charges
Synopsis
Le projet consiste en la création d’un site internet d’un ensemble scolaire privé catholique. Il
doit rassembler la présentation de l’école, son actualité et permettre aux internautes de
communiquer.
Objectifs
Présentation de l’établissement
Communication
Promotion
Informations
Public visé
Equipe pédagogique
Parents d’élèves
Élèves
Futurs élèves
Parents de futurs élèves potentiels
Message
Ecole catholique
Ecole Bilingue
Projet pédagogique
Perspectives
Développer une accessibilité spécifique aux enfants
Carnet de correspondance en ligne
Rattrapage en ligne pour les élèves absents
9
Interlocuteur
Hiribarren Christophe
05.59.93.90.04 [email protected]
Lien entre l’établissement et la conception
Langues
Français
Basque
Ressources apportées
Domaine : www.ecole-saint-etienne-espelette.fr
Hébergement sur AMEN.FR
Documents informatiques : Photos numérique, Plaquette de présentation, Textes
bilingues
Aspect et qualité du site
Simple
Elaboré
Ludique
Accès aux informations rapidement
Présentation
Colorée
Thématique scolaire
Claire
Intuitive
Spécifications Techniques
Diaporama photographique
Avoir un accès à l’administration du site sur chaque page
Avoir le nom du créateur et hébergeur sur chaque page
La page « Actualités » doit pouvoir être mise à jour par l’équipe pédagogique
10
Utilisation du PHP pour le dialogue avec la base de données
Utilisation de la technique Modèle Vue Contrôleur (MVC)
Contraintes
Planning à respecter pour la présentation à l’établissement
Le site doit être coloré
Libertés
Libre choix de la mise en page
Libre choix de la charte graphique
Libre choix des photos à afficher
Interactivité
Formulaire de contact
Forum
Délai pour la réalisation du site
Pas de délai de finalisation
Délai pour une présentation de deux pages
Budget
Aucun budget
Référencement
Aucun référencement à faire
Maintenance
Mise à jour forum effectuée par l’administrateur
Mise à jour page « actualité » par l’équipe pédagogique (MVC)
Formation pour l’équipe pédagogique
11
L’arborescence du site
12
Story-board et Scénarios
Impressions écran Médias Scénario Interactions
accueil.html - banniere.png
- fr.jpg
- basq.jpg
- logo-piment.png
- accueil.png
- couleurs
texte menu
changent
- lien admin.php
- lien vers page
basque
- On-clic bannière
lien vers
accueil.html
- liens des
menus vers les
autres pages
present.html
- banniere.png
- fr.jpg
- basq.jpg
- logo-piment.png
- prensent.png
- couleurs
texte menu
changent
- lien admin.php
- lien vers page
basque
- On-clic bannière
lien vers
accueil.html
- liens des
menus vers les
autres pages
fonction.html - banniere.png
- fr.jpg
- basq.jpg
- logo-piment.png
- ecole.png
- garderie.jpg
- soutien.png
- cantine.jpg
- couleurs
texte menu
changent
- lien admin.php
- lien vers page
basque
- On-clic bannière
lien vers
accueil.html
- liens des
menus vers les
autres pages
- lien vers
menu.pdf
13
Impressions écran Médias Scénario Interactions
actualite.php - banniere.png
- fr.jpg
- basq.jpg
- logo-piment.png
- couleurs
texte menu
changent
- lien admin.php
- lien vers page
basque
- On-clic bannière
lien vers
accueil.html
- liens des
menus vers les
autres pages
galerie.html - banniere.png
- fr.jpg
- basq.jpg
- logo-piment.png
- albums photos
- couleurs
texte menu
changent
- lien admin.php
- lien vers page
basque
- On-clic bannière
lien vers
accueil.html
- liens des
menus vers les
autres pages
plan.html - banniere.png
- fr.jpg
- basq.jpg
- logo-piment.png
- ecole-plan.png
- couleurs
texte menu
changent
- lien admin.php
- lien vers page
basque
- On-clic bannière
lien vers
accueil.html
- liens des
menus vers les
autres pages
- lien vers Google
Maps
14
Impressions écran Médias Scénario Interactions
contact.php - banniere.png
- fr.jpg
- basq.jpg
- logo-piment.png
- couleurs
texte menu
changent
- lien admin.php
- lien vers page
basque
- On-clic bannière
lien vers
accueil.html
- liens des
menus vers les
autres pages
appel.html - banniere.png
- fr.jpg
- basq.jpg
- logo-piment.png
- couleurs
texte menu
changent
- affichage
apel.pdf
- lien admin.php
- lien vers page
basque
- On-clic bannière
lien vers
accueil.html
- liens des
menus vers les
autres pages
- lien vers
apel.pdf
ogec.html - banniere.png
- fr.jpg
- basq.jpg
- logo-piment.png
- couleurs
texte menu
changent
- affichage
ogec.pdf
- lien admin.php
- lien vers page
basque
- On-clic bannière
lien vers
accueil.html
- liens des
menus vers les
autres pages
- lien vers
ogec.pdf
15
Impressions écran Médias Scénario Interactions
partenaire.html - banniere.png
- fr.jpg
- basq.jpg
- logo-piment.png
- parten.png
- couleurs
texte menu
changent
- lien admin.php
- lien vers page
basque
- On-clic bannière
lien vers
accueil.html
- liens des
menus vers les
autres pages
- liens vers les
sites des
partenaires
16
III - Bilans techniques et propositions d’actions
a) Bilan de mes projets de refonte
Projet Camping Manex
Dans l’ensemble, ce projet s’est bien déroulé. J’avais proposé au client un menu « flottant » à
gauche de l’écran, cependant il a préféré un menu plus classique. A ce jour, le site est en ligne
et le client est satisfait du travail réalisé.
Projet Locations Leiza
Etant donné le peu de travail à réaliser pour cette refonte, je n’ai eu aucunes difficultés
particulières. Le client était ravi d’avoir un site plus attrayant.
Projet Auberge de la Corniche
Ce projet a été encore plus simple que le précédent. En effet, j’ai seulement dû reprendre
l’affichage des photos et du menu du restaurant en format PDF.
Projet Hôtel Bellevue
La réalisation de ce projet fût plus longue. Effectivement, il a fallu faire ce site en Français et
en Anglais, refaire totalement la mise en forme et faire un tri dans les photos du client. Ce
dernier a même demandé des modifications jusqu’à la dernière semaine.
Projet Hiribarren
La conception de ce projet refonte fût de loin la plus intéressante et enrichissante. J’ai fait de
nombreuses propositions, comme de réaliser une base de données de leurs produits en vente et
de les afficher dans une page, mais il s’avère que c’était trop compliqué pour l’entreprise
d’inventorier tous ses produits. Ce fût le seul point négatif puisque mon patron m’a laissé
carte blanche pour la charte graphique et le scénario du site.
Tous les sites sont, à ce jour, en ligne. Ces actualisations ont permis à l’entreprise
d’avoir de nouvelles demandes dans l’activité de création de site.
b) Bilan du projet de l’école Saint Etienne d’Espelette
J’ai débuté la création de ce site deux semaines avant la fin de mon stage. Par conséquent,
beaucoup d’éléments sont en attente de finalisation. Aujourd’hui, je suis satisfait du travail
réalisé tout comme l’école qui apprécie la charte graphique et la disposition du site web. Plus
de la moitié du site en français est finie, cependant, il reste quatre pages à terminer :
17
- « Actualités » : interaction avec la base de données,
- « OGEC » : il me manque le rédactionnel,
- « APPEL » : il me manque aussi le rédactionnel,
- « Partenaires » : je n’ai pas encore à disposition les fiches descriptives des partenaires
contenant notamment les logos
- La partie Basque doit encore être mise en place. Il me manque, en effet, la partie
rédactionnelle.
Concernant l’aspect technique de la réalisation de ce site, j’ai rencontré des soucis pour
accéder rapidement au contenu photographique dû à une connexion lente entre le VPN et mon
domicile. Actuellement, mon patron et la structure sont très satisfaits de cette ébauche de
projet. Je terminerai ce dernier au cours du mois de juin.
18
CONCLUSION
En conclusion, ce stage a été une expérience enrichissante et intéressante. Dès le
début, les relations avec mon patron ont été agréables et constructives. Lorsque j’ai su qu’il
me donnait ma chance, j’ai été enchanté de pouvoir l’aider à relancer son pôle développement
web à travers les actualisations et la création de site. Pendant la période de stage, la
communication fut facilitée par l’échange d’emails et de conversations téléphoniques. De
plus, notre réunion hebdomadaire du vendredi a permis d’échanger nos idées et de favoriser le
dialogue. Deux points négatifs sont cependant à noter. Tout d’abord, la connexion avec le
serveur était lente ce qui ralentissait mon rythme de travail. Puis, mon patron étant plus
spécialisé dans la maintenance, je me retrouvais seul face à mes problèmes et
questionnements. Heureusement, mes cours de l’AFPA ainsi que les forums sérieux d’aide au
développement de site web m’ont permis de résoudre tous ces obstacles et d’enrichir mes
connaissances.
Suite à cette expérience concluante, mon patron m’a proposé de prolonger le stage afin
de finaliser les projets en construction et éventuellement poursuivre cette collaboration dans le
cadre d’un contrat. Je serais satisfait d’intégrer l’entreprise dans le but de développer le pôle
développement web, sachant que Monsieur Hiribarren continue à avoir des demandes
intéressantes notamment dans la création de sites e-commerce.
Pour finir, ce stage est l’aboutissement de la formation de Développeur Logiciel. Ce
n’est que le début d’une expérience professionnelle passionnante.
19
ANNEXES
Voici le Javascript diaporama :
function preloadctrl(im){
if (typeof im=='string'){
var imo=new Image();
imo.src=im;
}
}
if(document.images&&typeof preload_ctrl_images!='undefined'&&preload_ctrl_images){
var ctrlimgs=[previmg, stopimg, playimg, nextimg]
for (var i_tem = 0; i_tem < ctrlimgs.length; i_tem++)
if (ctrlimgs[i_tem])
preloadctrl(ctrlimgs[i_tem])
}
var iss=[]; //tableau pour le cache inter_slide
function inter_slide(){
if(!document.images||arguments.length==0)
return;
var imgs=arguments[0];
var width=null, height=null, delay=null;
if(arguments.length==2)
20
delay=arguments[1];
else if(arguments.length==3||arguments.length==4)
width=arguments[1], height=arguments[2], delay=arguments[3]? arguments[3] : null;
this.dom=(document.getElementById) //dom navigateurs modernes
this.da=document.all
this.delay=imgs.delay? imgs.delay : delay? delay : 3000+iss.length*750;
this.nextimgidx=0;
iss[this.issid=iss.length]=this;
this.imgs=imgs;
if (imgs.random)
this.imgs.sort(function() {return 0.5 - Math.random();})
this.imgborder=imgs.border? parseInt(imgs.border) : 0;
if (!this.dom){
this.postimgs=new Array() //préchargement des images
for (p=0;p<imgs.length;p++){
this.postimgs[p]=new Image()
this.postimgs[p].src=this.imgs[p][0]
}}
if (this.dom){ //si navigateurs modernes
this.faded=0;
this.loadimgidx=[];
this.fade=!imgs.nofade;
if(this.fade)
21
this.degree=10 //initialisation de l'opacité à 10%
this.pausecheck=imgs.pause;
this.mouseovercheck=0
this.canvasbase="canvas"+this.issid
this.curcanvas=this.canvasbase+"_0"
this.descriptions=!imgs.no_descriptions;
this.man_start=imgs.manual_start;
this.addbr=!imgs.no_added_linebreaks;
this.no_auto=imgs.no_auto;
this.onclick=imgs.onclick;
this.specs=imgs.specs;
this.counter=imgs.counter;
this.ics=imgs.image_controls;
this.jumpto=imgs.jumpto;
this.no_c=imgs.no_controls;
this.target=imgs.target;
this.ualt=imgs.use_alt;
this.utit=imgs.use_title;
this.fadecolor=imgs.fadecolor;
this.ibut_hc=imgs.button_highlight;
this.dp=imgs.desc_prefix? imgs.desc_prefix : ' ';
this.imbcolor=imgs.border_color;
this.imbstyle=imgs.border_style;
22
this.width=imgs.width? imgs.width : width? width : null
this.width=this.width? this.width+this.imgborder*2 : null;
this.height=imgs.height? imgs.height : height? height : null
this.height=this.height? this.height+this.imgborder*2 : null;
var ief='', dims='';
if(this.width||this.height)
dims=this.width&&this.height? 'width:'+this.width+'px;height:'+this.height+'px;' : this.width?
'width:'+this.width+'px;' : 'height:'+this.height+'px;';
if(this.fade&&document.body&&document.body.style)
ief=document.body.filters? 'filter:progid:DXImageTransform.Microsoft.alpha(opacity=0);' :
typeof document.body.style.opacity=='string'? 'opacity:0;' : 'opacity:0.10;-moz-opacity:0.10;-
khtml-opacity:0.10;';
var brs=this.addbr? '<br>' : '';
if (imgs.controls_top){
this.controls();
document.write(brs)
}
document.write('<div align="center"><div id="master'+this.issid+'"
style="position:relative;'+dims+'overflow:hidden;margin:0 auto;"><div
id="'+this.canvasbase+'_0" style="position:absolute;'+dims+'top:0;left:0;'+ief+'background-
color:'+(imgs.fadecolor? imgs.fadecolor : 'white')+'"><\/div><div id="'+this.canvasbase+'_1"
style="position:absolute;'+dims+'top:0;left:0;'+ief+'background-color:'+(imgs.fadecolor?
imgs.fadecolor : 'white')+'"><\/div><\/div><\/div>')
if(this.descriptions)
document.write(brs+'<div align="center">'+this.dp+'<span
id="imgdsc'+this.issid+'"> <\/span></div>\n');
23
if(this.counter&&!this.descriptions)
document.write(brs);
if(this.counter)
this.cntrl()
if (!imgs.controls_top){
document.write(this.ics? '' : brs);
this.controls();
}}
else
document.write('<div align="center"><img name="defaultslide'+this.issid+'"
src="'+this.postimgs[0].src+'"><\/div>')
if (this.dom) //si navigateurs modernes comme Firefox, IE5+
this.startit()
else{
this.nextimgidx++
setInterval("iss["+this.issid+"].rotateimg()", this.delay)
}}
inter_slide.prototype.cntrl=function(){
this.cpad=this.imgs.length.toString().length;
document.write('<div align="center">Viewing Image: <b><span
id="thecnt'+this.issid+'"><\/span><\/b> of<span style="font-
size:1ex;"> </span> <b>'+this.imgs.length+'<\/b><\/div>');
}
inter_slide.prototype.controls=function(){
24
var brs=this.addbr? '<br>' : ' ';
if(!this.ics&&!this.no_c)
document.write('<div align="center"><input id="prev'+this.issid+'" disabled type="button"
value=" << " onclick="iss['+this.issid+'].changeimg(false, \'nav\');">\n'+
(this.no_auto? ' ' : ' <input id="gostp'+this.issid+'" type="button"
value=" Stop " onclick="iss['+this.issid+'].gostop(this);">\n')+
' <input id="next'+this.issid+'" disabled type="button" value=" >> "
onclick="iss['+this.issid+'].changeimg(true, \'nav\');">'+(this.jumpto? brs+'Jump to: <input
disabled type="text" size="'+this.imgs.length.toString().length+'" id="goto'+this.issid+'"
onkeydown="iss['+this.issid+'].jumper(event);"><input id="go'+this.issid+'" disabled
type="button" onclick="iss['+this.issid+'].jumper();" value="GO">' : '')+'<\/div>')
else if(this.ics&&!this.no_c){
var op=document.body.filters? ' style="filter:alpha(opacity=100);"' : '
style="opacity:'+(this.man_start? 0.99 : 0.45)+';"';
document.write('<table align="center" cellpadding="0" cellspacing="10"><tr><td
valign="middle" align="center" style="padding:2px 2px 1px 2px;"><input'+op+'
onmouseover="iss['+this.issid+'].ibute(this,1);" onmouseout="iss['+this.issid+'].ibute(this,2);"
onmousedown="iss['+this.issid+'].ibute(this,3);" onmouseup="iss['+this.issid+'].ibute(this,4);"
type="image" title="Previous" id="prev'+this.issid+'" src="'+previmg+'"
onclick="iss['+this.issid+'].changeimg(false, \'nav\');"><\/td>'+(this.no_auto?
'<td> <\/td>' : '<td valign="middle" align="center" style="padding:2px 2px 1px
2px;"><input onmouseover="iss['+this.issid+'].ibute(this,1);"
onmouseout="iss['+this.issid+'].ibute(this,2);"
onmousedown="iss['+this.issid+'].ibute(this,3);" onmouseup="iss['+this.issid+'].ibute(this,4);"
title="Stop" type="image" id="gostp'+this.issid+'" src="'+(this.g_fPlayMode? playimg :
stopimg)+'" onclick="iss['+this.issid+'].gostop(this);"><\/td>')+'<td valign="middle"
align="center" style="padding:2px 2px 1px 2px;"><input'+op+'
onmouseover="iss['+this.issid+'].ibute(this,1);" onmouseout="iss['+this.issid+'].ibute(this,2);"
onmousedown="iss['+this.issid+'].ibute(this,3);" onmouseup="iss['+this.issid+'].ibute(this,4);"
25
type="image" title="Next" id="next'+this.issid+'" src="'+nextimg+'"
onclick="iss['+this.issid+'].changeimg(true, \'nav\');"><\/td><\/tr><\/table>\n');
}else
this.no_c=1;
}
inter_slide.prototype.jumper=function(e){
var key;
if(typeof e=='object')
key=e.keyCode? e.keyCode : e.which? e.which : 1;
if(key&&key!==13)
return;
var num=typeof e=='number'? e : parseInt(this.go('goto'+this.issid).value);
if(num<=this.imgs.length&&num>0){
this.nextimgidx=num-2;
this.changeimg(true, 'jump');
}}
inter_slide.prototype.ibute=function(obj, i){
if(!obj.parentNode)
return;
if(i==1)
obj.parentNode.style.backgroundColor=this.ibut_hc? this.ibut_hc : 'yellow';
else if(i==2)
obj.parentNode.style.backgroundColor='transparent';
26
else if(i==3){
obj.parentNode.style.borderTop=obj.parentNode.style.borderLeft='1px solid gray';
obj.parentNode.style.paddingRight='1px';obj.parentNode.style.paddingBottom=0;
}
if (i==2||i==4){
obj.parentNode.style.borderTop=obj.parentNode.style.borderLeft='none';
obj.parentNode.style.paddingRight='2px';obj.parentNode.style.paddingBottom='1px';
}}
inter_slide.prototype.fadepic=function(){
if (this.fade&&this.degree<100){
this.faded=0
this.degree+=10
if (this.tempobj.filters&&this.tempobj.filters[0]){
if (typeof this.tempobj.filters[0].opacity=="number") //si IE6+
this.tempobj.filters[0].opacity=this.degree
else //sinon IE5.5-
this.tempobj.style.filter="alpha(opacity="+this.degree+")"
}
else if (this.tempobj.style.MozOpacity)
this.tempobj.style.MozOpacity=this.degree/101
else if (this.tempobj.style.KhtmlOpacity)
this.tempobj.style.KhtmlOpacity=this.degree/100
else if (this.tempobj.style.opacity&&!this.tempobj.filters)
27
this.tempobj.style.opacity=this.degree/101
}
else{
this.faded=1
clearInterval(this.fadeclear)
this.nextcanvas=(this.curcanvas==this.canvasbase+"_0")? this.canvasbase+"_0" :
this.canvasbase+"_1"
this.tempobj=this.go(this.nextcanvas)
if(this.playing)
this.changeimg()
}}
inter_slide.prototype.populateslide=function(picobj, picidx){
if(document.getElementsByTagName){
if(picobj.getElementsByTagName('a')[0]&&picobj.getElementsByTagName('a')[0].onclick)
picobj.getElementsByTagName('a')[0].onclick=null;
if(picobj.getElementsByTagName('img')[0]&&picobj.getElementsByTagName('img')[0].onlo
ad)
picobj.getElementsByTagName('img')[0].onload=null;
}
picobj.style.backgroundColor=this.imgs[picidx].fadecolor? this.imgs[picidx].fadecolor :
this.fadecolor? this.fadecolor : 'white';
var slideHTML='<table border="0" cellpadding="0" cellspacing="0" width="100%"
height="100%"><tr><td width="100%" height="100%" align="center" valign="middle"
style="background:transparent none;">'
28
if (this.imgs[picidx][2]){ //si il existe des liens associés aux images
var specs=this.imgs[picidx][4]? ", '"+this.imgs[picidx][4]+"'" : this.specs? ", '"+this.specs+"'"
: '';
slideHTML+='<a href="'+this.imgs[picidx][2]+'"'+(this.imgs[picidx][3]? '
target="'+this.imgs[picidx][3]+'"' : this.target? ' target="'+this.target+'"' : '')+'
onclick="'+(this.onclick? this.onclick : 'window.open(this.href, (this.target? this.target :
\'_self\')'+specs+');return false;')+'">'
}
slideHTML+='<img id="theimg'+picidx+'_'+this.issid+'"
src="'+(this.loadimgidx[picidx]&&typeof
this.loadimgidx[picidx].complete=='boolean'&&this.loadimgidx[picidx].complete?
this.loadimgidx[picidx].src : this.imgs[picidx][0])+'" alt="'+(this.ualt? this.imgs[picidx][1] :
'Slide Show Image')+'" title="'+(this.utit? this.imgs[picidx][1] : '')+'"
'+(this.imbcolor&&!this.imgs[picidx].noborder? 'style="border:'+this.imgborder+'px
'+(this.imbstyle? this.imbstyle : 'solid')+' '+this.imbcolor+';"' :
'border="'+(this.imgs[picidx].noborder? '0' : this.imgborder)+'"')+(!this.width||!this.height? '
onload="iss['+this.issid+'].imgload(this);"' : '')+'>'
if (this.imgs[picidx][2]) //si il existe des liens associés aux images
slideHTML+='<\/a>'
slideHTML+='<\/td><\/tr><\/table>'
picobj.innerHTML=slideHTML
}
inter_slide.prototype.buttons=function(bool){
if(this.no_c)
return;
var next=this.go('next'+this.issid), prev=this.go('prev'+this.issid);
next.disabled=prev.disabled=!bool;
29
next.title=bool? 'next' : '';
prev.title=bool? 'previous' : '';
if(this.jumpto&&!this.ics)
this.go('go'+this.issid).disabled=this.go('goto'+this.issid).disabled=!bool;
if(this.ics){
if(!this.no_auto){
var go=this.go('gostp'+this.issid)
go.title=bool? 'Play' : 'Stop';
go.src=bool? playimg : stopimg;
}
if(prev.filters&&prev.parentNode)
prev.parentNode.style.filter=next.parentNode.style.filter='alpha(opacity='+(bool? 100 :
45)+')';
else if(prev.style.opacity&&!prev.filters)
prev.style.opacity=next.style.opacity=bool? 0.99 : 0.45;
}}
inter_slide.prototype.imgload=function(el){
if(!el&&!this.imgel)
return;
var el=el? el : this.imgel;
if(el.width==0||el.height==0){
this.imgel=el;
var cacheobj=this;
30
clearTimeout(this.getdim)
this.getdim=setTimeout(function(){cacheobj.imgload()}, 300)
return;
}
var m=this.go('master'+this.issid).style, c0=this.go(this.canvasbase+'_0').style,
c1=this.go(this.canvasbase+'_1').style;
if(!this.width){
this.width=el.width+this.imgborder*2;
m.width = c0.width = c1.width = this.width+'px';
}
if(!this.height){
this.height=el.height+this.imgborder*2;
m.height = c0.height = c1.height = this.height+'px';
}}
inter_slide.prototype.changeimg=function(bool,nav){
if(this.playing){
this.buttons(false)
this.nextimgidx=(this.keeptrack()<this.imgs.length-1)? this.keeptrack()+1 : 0
this.populateslide(this.tempobj, this.nextimgidx)
if(bool)
this.rotateimg()
else{
clearTimeout(this.inprocess)
31
this.inprocess=setTimeout("iss["+this.issid+"].rotateimg()", this.delay)
}}else {
if(!this.faded){
if(nav&&nav=='nav')
return;
this.nextimgidx=this.keeptrack()+(bool? 1 : -1)
this.nextimgidx=(this.nextimgidx<this.imgs.length)? this.nextimgidx : this.nextimgidx-
this.imgs.length
this.nextimgidx=(this.nextimgidx>-1)? this.nextimgidx : this.imgs.length+this.nextimgidx
return;
}
if(this.fadeclear)
clearInterval(this.fadeclear);
if(bool){
var loadidx=this.nextimgidx+2
loadidx=(loadidx<this.imgs.length)? loadidx : loadidx-this.imgs.length;
loadidx=(loadidx>-1)? loadidx : this.imgs.length+loadidx;
this.loadimgidx[loadidx]=new Image();
this.loadimgidx[loadidx].src=this.imgs[loadidx][0];
}
else{
var loadidx=this.nextimgidx-2
loadidx=(loadidx<this.imgs.length)? loadidx : loadidx-this.imgs.length
32
loadidx=(loadidx>-1)? loadidx : this.imgs.length+loadidx
this.loadimgidx[loadidx]=new Image();
this.loadimgidx[loadidx].src=this.imgs[loadidx][0];
}
if(nav&&nav=='jump')
this.nextimgidx++;
else
this.nextimgidx=this.keeptrack()+(bool? 1 : -1)
this.nextimgidx=(this.nextimgidx<this.imgs.length)? this.nextimgidx : this.nextimgidx-
this.imgs.length
this.nextimgidx=(this.nextimgidx>-1)? this.nextimgidx : this.imgs.length+this.nextimgidx
this.populateslide(this.tempobj, this.nextimgidx)
this.rotateimg()
}}
inter_slide.prototype.go=function(id){
return this.da? this.da[id] : document.getElementById(id);
}
inter_slide.prototype.rotateimg=function(){
if(this.dom){
var cimg=this.go('theimg'+this.nextimgidx+'_'+this.issid)?
this.go('theimg'+this.nextimgidx+'_'+this.issid) : null;
if(cimg&&typeof cimg.complete=='boolean'&&!cimg.complete){
var cacheobj=this
clearTimeout(this.loading)
33
this.loading=setTimeout(function(){cacheobj.rotateimg()}, 300)
return;
}
if (this.mouseovercheck==1){
var cacheobj=this
clearTimeout(this.mousep)
this.mousep=setTimeout(function(){cacheobj.rotateimg()}, 100)
return;
}
if(this.fade)
this.resetit()
var crossobj=this.tempobj=this.go(this.curcanvas)
crossobj.style.zIndex++
var othercanvas=this.curcanvas==this.canvasbase+"_0"? this.go(this.canvasbase+"_1") :
this.go(this.canvasbase+"_0");
othercanvas.style.zIndex=0;
if(this.descriptions)
this.go('imgdsc'+this.issid).innerHTML = this.imgs[this.keeptrack()][1];
if(this.counter){
var padit='';
for (var p=0; p<this.cpad-(this.nextimgidx+1).toString().length; p++)
padit+='<span style="visibility:hidden;">0</span>';
this.go('thecnt'+this.issid).innerHTML = padit+(this.keeptrack()<this.imgs.length?
this.keeptrack()+1 : 1);
34
}
if (this.jumpto)
this.go('goto'+this.issid).value=this.keeptrack()<this.imgs.length? this.keeptrack()+1 : 1;
this.jumperidx=this.keeptrack()<this.imgs.length? this.keeptrack()+1 : 1;
var fadeobj=this
clearInterval(this.fadeclear)
this.fadeclear=setInterval(function(){fadeobj.fadepic()},50)
this.curcanvas=(this.curcanvas==this.canvasbase+"_0")? this.canvasbase+"_1" :
this.canvasbase+"_0"
}else{
var v4imgobj=document.images['defaultslide'+this.issid]
v4imgobj.src=this.postimgs[this.nextimgidx].src
this.nextimgidx=(this.nextimgidx<this.imgs.length-1)? this.nextimgidx+1 : 0
}}
inter_slide.prototype.resetit=function(){
this.degree=10
var crossobj=this.go(this.curcanvas)
if (crossobj.filters&&crossobj.filters[0]){
if (typeof crossobj.filters[0].opacity=="number") //si IE6+
crossobj.filters(0).opacity=this.degree
else //sinon IE5.5-
crossobj.style.filter="alpha(opacity="+this.degree+")"
}
35
else if (crossobj.style.MozOpacity)
crossobj.style.MozOpacity=this.degree/101
else if (crossobj.style.KhtmlOpacity)
crossobj.style.KhtmlOpacity=this.degree/100
else if (crossobj.style.opacity&&!crossobj.filters)
crossobj.style.opacity=this.degree/101
}
inter_slide.prototype.startit=function(){
this.playing=1
var crossobj=this.go(this.curcanvas)
this.populateslide(crossobj, this.nextimgidx)
if (this.pausecheck==1){ //si diaporama doit faire une pause avec mouseover
var cacheobj=this
var crossobjcontainer=this.go("master"+this.issid)
crossobjcontainer.onmouseover=function(){cacheobj.mouseovercheck=1}
crossobjcontainer.onmouseout=function(){cacheobj.mouseovercheck=0}
}
this.rotateimg()
if(this.no_auto)
this.gostop();
else if(this.man_start)
this.gostop(this.go('gostp'+this.issid));
else if(this.ics&&document.body.filters){ //correction pour un bug IE5.5
36
this.buttons(false);
}}
inter_slide.prototype.gostop=function(el){
if(el)
el.value=el.value==' Stop '? ' Play ' : ' Stop ';
if(this.inprocess&&this.playing){
clearTimeout(this.inprocess);
this.nextimgidx-=this.faded;
}
this.playing=!this.playing;
if(this.playing){
clearInterval(this.fadeclear)
this.faded=1
this.changeimg(true);
}
else{
var loadidx=(this.keeptrack()<this.imgs.length-1)? this.keeptrack()+1 : 0
this.loadimgidx[loadidx]=new Image();
this.loadimgidx[loadidx].src=this.imgs[loadidx][0];
this.jumper(this.jumperidx? this.jumperidx : 0)
this.buttons(true);
}}
inter_slide.prototype.keeptrack=function(){
37
if(!document.getElementsByTagName)
return this.nextimgidx;
var canvases=[this.go('canvas'+this.issid+'_0'), this.go('canvas'+this.issid+'_1')]
if(canvases[0].style.zIndex>canvases[1].style.zIndex&&canvases[0].getElementsByTagName
("img")[0])
return parseInt(canvases[0].getElementsByTagName('img')[0].id.replace(/theimg/, ''))
else if(canvases[1].getElementsByTagName("img")[0])
return parseInt(canvases[1].getElementsByTagName('img')[0].id.replace(/theimg/, ''))
else
return this.nextimgidx;
}
38
Voici le script utilisé pour le formulaire de contact :
<?php
if (isset($_POST["envoyer"])){
$etat = "erreur";
if (isset($_POST["son_nom"])) $_POST["son_nom"]=trim(stripslashes
($_POST["son_nom"]));
if (isset($_POST["son_email"])) $_POST["son_email"]=trim(stripslashes
($_POST["son_email"]));
if (isset($_POST["son_url"])) $_POST["son_url"]=trim(stripslashes(
$_POST["son_url"]));
if (isset($_POST["son_objet"])) $_POST["son_objet"]=trim(stripslashes
($_POST["son_objet"]));
if (isset($_POST["son_message"])) $_POST["son_message"]=trim(stripslashes
($_POST["son_message"]));
if (empty($_POST["son_nom"])) {
$erreur="Vous n'avez pas entré votre nom...";
39
}
elseif (empty($_POST["son_email"])) {
$erreur="Nous avons besoin de votre e-mail pour vous répondre...";
}
elseif (mb_ereg("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.
[a-z]{2,4}$",$_POST["son_email"])){
$erreur="Votre adresse e-mail n'est pas valide...";
}
elseif (empty($_POST["son_objet"])) {
$erreur="Vous devez entrer l'objet de votre message...";
}
elseif (empty($_POST["son_message"])) {
$erreur="Merci de saisir un message...";
}
else {
$etat="ok";
}
}
else {
$etat="attente";
}
40
if ($etat!="ok"){
if ($etat=="erreur"){
echo "<span style=\"color:red\">".$erreur."</span><br /><br />\n";
}
?>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
<h2 style="text-decoration: underline">Formulaire de contact</h2>
<p>(*) Champ Obligatoires</p>
<p style="text-align:left">
<label for="son_nom">Nom *</label><br /> <!-- Intitulé du champ pseudo -->
<input type="text" size="40" name="son_nom" id="son_nom" value="<?php
if (!empty($_POST["son_nom"])) {
echo htmlspecialchars($_POST["son_nom"],ENT_QUOTES);
}
?>" />
<br />
41
<label for="son_email">E-mail *</label><br />
<input type="text" size="40" name="son_email" id="son_email" value="<?php
if (!empty($_POST["son_email"])) {
echo htmlspecialchars($_POST["son_email"],ENT_QUOTES);
}
?>" />
<br />
<label for="son_url">URL de votre site</label><br />
<input type="text" size="40" name="son_url" id="son_url" value="<?php
if (!empty($_POST["son_url"])) {
echo htmlspecialchars($_POST["son_url"],ENT_QUOTES);
}
?>" />
<br />
<label for="son_objet">Objet *</label><br />
<input type="text" size="40" name="son_objet" id="son_objet" value="<?php
42
if (!empty($_POST["son_objet"])) {
echo htmlspecialchars($_POST["son_objet"],ENT_QUOTES);
}
?>" />
<br />
<label for="son_message">Message *</label><br />
<textarea name="son_message" id="son_message" cols="60" rows="25"><?php
if (isset($_POST["son_message"])) {
echo htmlspecialchars($_POST["son_message"],ENT_QUOTES);
}
?>
</textarea>
<br />
<input type="submit" name="envoyer" value="Envoyer" /><input type="reset"
name="reset" value="Effacer" />
</p>
</form>
43
<?php
}
else {
$son_nom = $_POST["son_nom"];
$son_email = $_POST["son_email"];
$son_url = $_POST["son_url"];
$son_objet = $_POST["son_objet"];
$son_message = $_POST["son_message"];
$mon_email2 = "[email protected]";
$mon_email = "[email protected]";
$mon_nom = "Formulaire du Site Hiribarren";
$mon_url = "http://www.hiribarren.fr/";
$msg_pour_moi = "- Son nom : $son_nom \n
- Son E-mail : $son_email \n
- Son site : $son_url \n
- Objet du message : $son_objet \n
- Message : \n $son_message \n\n";
44
$accuse_pour_lui = "Bonjour $son_nom,\n
Votre message nous a bien été envoyé et nous tâcherons de vous répondre le plus
rapidement possible.\n\n
- Votre E-mail : $son_email \n
- Votre site : $son_url \n
- L'objet de votre message : $son_objet \n
- Votre message : \n $son_message \n\n
Merci et à bientôt sur http://www.hiribarren.fr !";
$entete = "From: " . $mon_nom . " <" . $mon_email2 . ">\n"; // On prépare
$entete .= "MIME-Version : 1.0";
if (@mail($mon_email,$son_objet,$msg_pour_moi,$entete) &&
@mail($son_email,$son_objet,$accuse_pour_lui,$entete)){
echo "<p style=\"text-align:center\">Votre message a été
envoyé, vous recevrez une confirmation par mail.<br /><br />\n";
echo "<a href=\"" . $mon_url . "\">Retour</a></p>\n";
}
else {
45
echo "<p style=\"text-align:center\">Un problème s'est produit lors de
l'envoi du message.\n";
echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Réessayez...</a></p>\n";
}
}
?>
46
Voici les actions d’interactions avec la base de données et la page « actualités » du
site de l’école Saint Etienne :
- ajout.php
<?
echo '<div align="center">';
include ("config.php");
$table=$_GET['table'];
$fields = mysql_list_fields($db, $table, $link);
$columns = mysql_num_fields($fields);
for ($i = 0; $i < $columns; $i++) {
$champs[$i]=mysql_field_name($fields, $i);
$valeur[$i]=$_POST[$champs[$i]];
}
$query="insert into ".$table." values ('".$valeur[0]."'";
$req="";
for ($i=1;$i<$columns;$i++) {
$req=$req.",'".$valeur[$i]."'";
}
$query=$query.$req.')';
mysql_query($query);
echo 'La requête suivante a bien été exécutée :<br>'.$query;
echo '<br>Le nouvel enregistrement a été inséré dans la table '.$table;
echo '<br><a href="edit.php?id='.$table.'">retour</a>';
echo '</div>';
?>
47
- exec.php
<?
$table=$_GET['table'];
$id=$_GET['id'];
include ("config.php");
$fields = mysql_list_fields($db, $table, $link);
$columns = mysql_num_fields($fields);
for ($i = 0; $i < $columns; $i++) {
if ($i==0) {
$cle=mysql_field_name($fields, $i);}
$champs[$i]=mysql_field_name($fields, $i); //initialise le tableau champs au nom des
champs de la table
$valeur[$i]=addslashes($_POST[$champs[$i]]);
if ($i!=0) {
$query="update ".$table." set ".$champs[$i]."='".$valeur[$i]."' where ".$cle."=".$id;
mysql_query($query);
}
}
?>
<script language="javascript">
alert('Modifications effectuées')
window.location="edit.php?id=<? echo $table ?>"
</script>
48
- modify.php
<?
$table=$_GET['table'];
$action=$_POST['action'];
?>
<?
include("config.php");
if (!isset($_POST['id']) and ($action!="Ajouter")) {
?>
<script language="javascript">
alert('Vous devez choisir un enregistrement')
window.location="edit.php?id=<? echo $table ?>" //renvoi à la page précédente si aucun
enregistrement n'a été choisi
</script>
<?
} else {
echo '<div align="center">';
/***************************************************************************
****
*************************Modification de l'enregistrement***********************
***************************************************************************
****/
if (isset($_POST['id']) and ($action=="Modifier")) {
$id=$_POST['id'];
echo '<U><b>Modification de la table '.strtoupper($table).'</B></u>';
$fields = mysql_list_fields($db, $table, $link);
$columns = mysql_num_fields($fields);
echo '<form action="exec.php?table='.$table.'&id='.$id.'" method="POST">';
49
echo '<table border=2 cellpadding=5><tr>';
for ($i = 0; $i < $columns; $i++) { //affiche les entêtes des colonnes dans le tableau
echo '<td><p align="center">'.mysql_field_name($fields, $i) .'</p></td>';
if ($i==0) {
$cle=mysql_field_name($fields, $i);}
$champs[$i]=mysql_field_name($fields, $i);
}
echo '</tr>';
$query="select * from ".$table." where ".$cle."=".$id;
$result=mysql_query($query);
while ($row=mysql_fetch_array($result)) {
echo '<tr>';
for ($i = 0; $i < $columns; $i++) {
if ($row[$i]=="") { //permet d'afficher les cases du tableau même si elles sont vides
$row[$i]=" "; }
$long=strlen($row[$i]);
if ($long>30) {
echo '<td><p align="center">';
echo '<textarea rows="3" name="'.$champs[$i].'"
cols="30">'.$row[$i].'</textarea>';
echo '</p></td>';
}else{
$long=$long+10;
echo '<td><p align="center"><input type="text" name="'.$champs[$i].'"
size="'.$long.'" value="'.$row[$i].'"></p></td>';
}
}
echo '</tr>';
50
}
echo '</table>';
echo '<input type="submit" value="Modifier"></form>';
/***************************************************************************
****
*************************Suppression de l'enregistrement************************
***************************************************************************
****/
} else {
if (isset($_POST['id']) and ($action=="Supprimer")) {
$id=$_POST['id'];
$fields = mysql_list_fields($db, $table, $link);
$cle=mysql_field_name($fields, 0);
$query="delete from ".$table." where ".$cle."=".$id;
echo 'Souhaitez vous continuer et exécuter cette requête ?<br>';
echo $query;
echo '<br><a href="suppr.php?req='.$query.'">oui</a> <a
href="edit.php?id='.$table.'">non</a>';
/***************************************************************************
***************************** Ajout d’'un enregistrement
***************************************************************************
**********************************/
} else {
echo '<U><b>Ajout d\'un enregistrement dans la table '.strtoupper($table).'</B></u><br>';
echo 'Le premier champs n\'a pas besoin d\'être complété s\'il s\'agit d\'un numéro';
$fields = mysql_list_fields($db, $table, $link);
$columns = mysql_num_fields($fields);
echo '<form action="ajout.php?table='.$table.'" method="POST">';
echo '<table border=2 cellpadding=5><tr>';
51
for ($i = 0; $i < $columns; $i++) { //affiche les entêtes des colonnes dans le tableau
echo '<td><p align="center">'.mysql_field_name($fields, $i) .'</p></td>';
if ($i==0) {
$cle=mysql_field_name($fields, $i);}
$champs[$i]=mysql_field_name($fields, $i);
}
echo '</tr><tr>';
for ($i = 0; $i < $columns; $i++) { //affiche les entêtes des colonnes dans le tableau
echo '<td><p align="center"><input type="text" name="'.$champs[$i].'"
size="30"></p></td>';
}
echo '</tr></table><br><input type="submit" value="Ajouter"></form>';
}}}
echo '</div>';
?>
- sql.php
<?
session_start();
if (!isset($_SESSION['thabaoul'])) {
exit();
}
?>
<?
echo '<div align="center">';
include ("config.php");
if (!isset($_POST['req'])) {
52
echo '<div align="center">Saisissez votre requête ici<br>';
echo '<form method="POST" action=sql.php>';
echo '<textarea rows="6" name="req" cols="30">votre requête ici</textarea>';
echo '<br><input type="submit" value="valider">';
} else {
$query=$_POST['req'];
//$query=strtoupper($query); //convertit la chaine "query" en majuscules
if (ereg("SELECT",$query) or ereg("Select",$query) or ereg("select",$query)) { //recherche si
"SELECT" existe dans la requete
$req=mysql_query($query);
$a=mysql_num_fields($req); //compte le nombre de champs concernés par la requête
echo '<table border="2" cellpadding="3">';
while ($row=mysql_fetch_array($req)) {
echo '<tr>';
for ($i=0;$i<$a;$i++) {
if ($row[$i]==""){
$row[$i]=" "; }
echo '<td>'.$row[$i].'</td>';
}
echo '</tr>';
}
} elseif (ereg("INSERT",$query) or ereg("insert",$query) or ereg("Insert",$query)) { // ajout
d'enregistrement
echo 'Pour insérer un enregistrement dans une table, sélectionnez la table et choisissez
"Ajouter"';
} elseif (ereg("DELETE",$query) or ereg("Delete",$query) or ereg("delete",$query)) {
//suppression d'enregistrement(s)
echo 'Pour supprimer un enregistrement d\'une table, sélectionnez la table, l\'enregistrement
désiré et choisissez "Supprimer"';
53
} elseif (ereg("UPDATE",$query) or ereg("update",$query) or ereg("Update",$query)) {
//mise à jour d'enregistrement(s)
echo 'Pour mettre à jour un enregistrement dans une table, sélectionnez la table,
l\'enregistrement désiré et choisissez "Modifier"';
} elseif (ereg("CREATE",$query) or ereg("create",$query) or ereg("Create",$query)) {
//création d'une table
echo 'La création de table est pour l\'instant interdite, contactez un administrateur.';
} elseif (ereg("DROP",$query) or ereg("drop",$query) or ereg("Drop",$query)) {
//suppression d'une table
echo 'La suppression de table est pour l\'instant interdite, contactez un administrateur.';
} elseif (ereg("ALTER",$query) or ereg("Alter",$query) or ereg("alter",$query)) {
//modification de la structure d'une table
echo 'La modification de table est pour l\'instant interdite, contactez un administrateur.';
} else {
echo 'Requête non valide';
}
}
echo '</div>';
?>
- suppr.php
<?
include ("config.php");
$query=$_GET['req'];
mysql_query($query);
?>
<script language="javascript">
alert("Suppression effectuée")
54
window.location='edit.php'
</script>
- table.php
<?
include ("config.php");
echo '<div align="justify">';
echo '<u><p align="center"><b>Liste des tables</b></p></u><br>';
$query="show tables";
$result=mysql_query($query);
$i=0;
while ($row=mysql_fetch_array($result)) {
$table[$i]=$row[0];
$i++;
}
$query="select count(*) from admin where aut=0";
$result=mysql_query($query);
while ($row=mysql_fetch_array($result)) {
$t=$row[0];
}
echo $i.' tables dont '.($t+1).' cachée(s)<br><br><br>';
for ($a=0;$a<$i;$a++) {
$query="select count(*) from ".$table[$a];
$result=mysql_query($query);
$$req="select aut from admin where nom_table='".$table[$a]."'";
$res=mysql_query($$req);
55
while ($row=mysql_fetch_array($res)) {
$aut[$a]=$row[0]; }
while ($row=mysql_fetch_array($result)) {
$title=$row[0].' enregistrement(s)'; }
if ($aut[$a]==1) {
echo '<li><a href="edit.php?id='.$table[$a].'" target="main"
title="'.$title.'">'.$table[$a].'</a>';
}}
echo '<br><br>';
echo '<p align="center"><a href="sql.php" target="_blank">Fenêtre SQL</a></p>';
echo '</div>';
?>
- edit.php
<?
include("config.php");
if (isset($_GET['id'])) {
$table=$_GET['id'];
$fields = mysql_list_fields($db, $table, $link);
$columns = mysql_num_fields($fields);
echo '<form action="modify.php?table='.$table.'" method="POST">';
echo '<div align="center"><u><b>'.strtoupper($table).'</b></u><br><br>';
echo '<table border=2 cellpadding=5><tr><td>Sélection</td>';
for ($i = 0; $i < $columns; $i++) { //affiche les entêtes des colonnes dans le tableau
echo '<td><p align="center">'.mysql_field_name($fields, $i) .'</p></td>';
}
56
echo '</tr>';
$query="select * from ".$table; //sélection de tous les champs de la table
$result=mysql_query($query);
while($row=mysql_fetch_array($result)) {
echo '<tr><td><p align="center"><input type="radio" value="'.$row[0].'"
name="id"></P></td>';
for ($i = 0; $i < $columns; $i++) {
if ($row[$i]=="") { //permet d'afficher les cases du tableau même si elles sont
vides
$row[$i]=" "; }
echo '<td><p align="center">'.stripslashes($row[$i]).'</p></td>';
}
echo '</tr>'; }
echo '</table>';
echo '<p>Sélectionnez l\'action à effectuer</p>';
echo '<select size="1" name="action">
<option>Modifier</option>
<option>Supprimer</option>
<option>Ajouter</option>
</select>';
echo '<input type="submit" value="Valider"></form>';
echo '</div>';
} else {
echo 'Sélectionnez une table'; }
?>
57
- config.php
<?
$link=mysql_connect("localhost","ecolesaintetienne");
$db='admin';
mysql_select_db($db);
?>
58
INDEX
Liste des sites créés :
http://www.ecole-saint-etienne-espelette.fr/
http://www.hiribarren.com/
http://www.camping-manex.com/
http://www.location-leiza.com/
http://www.aubergedelacorniche.com/
http://www.hotel-bellevue64.fr/