Page 1

JUILLOT VINCENT

AFPA de Pau

Rapport de stage

Formation Développeur Logiciel

Année 2011


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.

1


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

b)

Projet Camping Manex .......................................................................................... 16

Projet Locations Leiza ........................................................................................... 16

Projet Auberge de la Corniche ............................................................................... 16

Projet Hôtel Bellevue ............................................................................................. 16

Projet Hiribarren .................................................................................................... 16 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

2


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.

3


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 : info@hiribarren.com

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

4


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.

5


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.

6


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

7


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

8


Interlocuteur 

Hiribarren Christophe

05.59.93.90.04 info@hiribarren.fr

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

9


 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

10


L’arborescence du site

11


Story-board et Scénarios

Impressions écran accueil.html

Médias -

banniere.png

-

Scénario -

Interactions

couleurs

-

lien admin.php

fr.jpg

texte menu

-

lien vers page

-

basq.jpg

changent

-

logo-piment.png

-

accueil.png

basque -

On-clic bannière lien vers accueil.html

-

liens des menus vers les autres pages

present.html

-

banniere.png

-

-

couleurs

-

lien admin.php

fr.jpg

texte menu

-

lien vers page

-

basq.jpg

changent

-

logo-piment.png

-

prensent.png

basque -

On-clic bannière lien vers accueil.html

-

liens des menus vers les autres pages

fonction.html

-

banniere.png

-

-

couleurs

-

lien admin.php

fr.jpg

texte menu

-

lien vers page

-

basq.jpg

changent

-

logo-piment.png

-

ecole.png

lien vers

-

garderie.jpg

accueil.html

-

soutien.png

-

cantine.jpg

basque -

-

On-clic bannière

liens des menus vers les autres pages

-

lien vers menu.pdf

12


Impressions écran actualite.php

Médias -

banniere.png

-

Scénario -

Interactions

couleurs

-

lien admin.php

fr.jpg

texte menu

-

lien vers page

-

basq.jpg

changent

-

logo-piment.png

basque -

On-clic bannière lien vers accueil.html

-

liens des menus vers les autres pages

galerie.html

-

banniere.png

-

-

couleurs

-

lien admin.php

fr.jpg

texte menu

-

lien vers page

-

basq.jpg

changent

-

logo-piment.png

-

albums photos

basque -

On-clic bannière lien vers accueil.html

-

liens des menus vers les autres pages

plan.html

-

banniere.png

-

-

couleurs

-

lien admin.php

fr.jpg

texte menu

-

lien vers page

-

basq.jpg

changent

-

logo-piment.png

-

ecole-plan.png

basque -

On-clic bannière lien vers accueil.html

-

liens des menus vers les autres pages

-

lien vers Google Maps

13


Impressions écran contact.php

Médias -

banniere.png

-

Scénario -

Interactions

couleurs

-

lien admin.php

fr.jpg

texte menu

-

lien vers page

-

basq.jpg

changent

-

logo-piment.png

basque -

On-clic bannière lien vers accueil.html

-

liens des menus vers les autres pages

appel.html

-

banniere.png

-

-

couleurs

-

lien admin.php

fr.jpg

texte menu

-

lien vers page

-

basq.jpg

changent

-

logo-piment.png

-

affichage

basque -

apel.pdf

On-clic bannière lien vers accueil.html

-

liens des menus vers les autres pages

-

lien vers apel.pdf

ogec.html

-

banniere.png

-

-

couleurs

-

lien admin.php

fr.jpg

texte menu

-

lien vers page

-

basq.jpg

changent

-

logo-piment.png

-

affichage

basque -

ogec.pdf

On-clic bannière lien vers accueil.html

-

liens des menus vers les autres pages

-

lien vers ogec.pdf

14


Impressions écran partenaire.html

Médias -

banniere.png

-

Scénario -

Interactions

couleurs

-

lien admin.php

fr.jpg

texte menu

-

lien vers page

-

basq.jpg

changent

-

logo-piment.png

-

parten.png

basque -

On-clic bannière lien vers accueil.html

-

liens des menus vers les autres pages

-

liens vers les sites des partenaires

15


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 :

16


-

« 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.

17


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.

18


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)

19


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)

20


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;

21


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

style="position:relative;'+dims+'overflow:hidden;margin:0 id="'+this.canvasbase+'_0"

id="master'+this.issid+'" auto;"><div

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+'">&nbsp;<\/span></div>\n');

22


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

id="thecnt'+this.issid+'"><\/span><\/b>

Image: of<span

<b><span style="font-

size:1ex;">&nbsp;</span>&nbsp;<b>'+this.imgs.length+'<\/b><\/div>'); } inter_slide.prototype.controls=function(){

23


var brs=this.addbr? '<br>' : ' &nbsp;'; 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? '&nbsp;&nbsp;&nbsp;' : ' <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+'"

onkeydown="iss['+this.issid+'].jumper(event);"><input

id="goto'+this.issid+'"

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 valign="middle"

align="center"

align="center"

cellpadding="0"

style="padding:2px

2px

cellspacing="10"><tr><td 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+'"

onclick="iss['+this.issid+'].changeimg(false,

src="'+previmg+'"

\'nav\');"><\/td>'+(this.no_auto?

'<td>&nbsp;<\/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)+'" align="center"

onclick="iss['+this.issid+'].gostop(this);"><\/td>')+'<td style="padding:2px

2px

1px

valign="middle" 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);"

24


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';

25


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.5this.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)

26


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;">'

27


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.imbcolor&&!this.imgs[picidx].noborder? '+(this.imbstyle?

this.imbstyle

:

this.imgs[picidx][1]

:

'')+'"

'style="border:'+this.imgborder+'px '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;

28


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;

29


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)

30


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

31


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)

32


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);

33


} 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.5crossobj.style.filter="alpha(opacity="+this.degree+")" }

34


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

35


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(){

36


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; }

37


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&eacute; votre nom...";

38


} elseif (empty($_POST["son_email"])) { $erreur="Nous avons besoin de votre e-mail pour vous r&eacute;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"; }

39


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&eacute; 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 />

40


<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

41


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>

42


<?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 = "hiribarren@orange.fr"; $mon_email = "info@hiribarren.com"; $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";

43


$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&eacute;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 &eacute;t&eacute; envoy&eacute;, vous recevrez une confirmation par mail.<br /><br />\n";

echo "<a href=\"" . $mon_url . "\">Retour</a></p>\n";

} else {

44


echo "<p style=\"text-align:center\">Un probl&egrave;me s'est produit lors de l'envoi du message.\n"; echo "<a href=\"".$_SERVER["PHP_SELF"]."\">R&eacute;essayez...</a></p>\n";

} } ?>

45


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>'; ?>

46


-

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>

47


-

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">';

48


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]="&nbsp;"; } $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>';

49


} 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>&nbsp;&nbsp;<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>';

50


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'])) {

51


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]="&nbsp;"; } 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"';

52


} 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")

53


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);

54


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>'; }

55


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]=="") { vides

//permet d'afficher les cases du tableau même si elles sont

$row[$i]="&nbsp;"; } 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'; } ?>

56


-

config.php

<? $link=mysql_connect("localhost","ecolesaintetienne"); $db='admin'; mysql_select_db($db); ?>

57


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/

58

Rapport de stage Développeur Logiciel  

Stage effectué dans l'entreprise E.I. Christophe Hiribarren en tant que développeur web.

Advertisement