Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11...

55
Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter

Transcript of Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11...

Page 1: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Algorithmes et structures de données avancées

Partie Conception de Sites Web dynamiques

Cours 11

Patrick Reuter

Page 2: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Programme …

• Mettre le site en ligne

• Mise en page cohérente

• BDD: Relation entre des tables (1:1,1:n,n:m)

• Variables de session

• Référencement moteur de recherche

Page 3: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Transférer des fichiers vers votre hebergeur

Information de votre fournisseur :

1. Addresse FTP

• ftp.ifrance.com• ftp.numericable.fr• ftp.membres.lycos.fr• ftp.wanadoo.fr

FTP (File transfer protocol)Client FTP : Filezilla, FTP Expert, SmartFTP, …

2. Nom de la base de données

3. Nom d'utilisateur

• preuter

4. Mot de passe• -----------------

Page 4: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Fichier connect_db.php<?php$dbhost="localhost";$dbuser="root";$dbpassword="";$dbname="base_cswd";

$dblink=mysql_connect($dbhost,$dbuser,$dbpassword);

$db_cswd=mysql_select_db($dbname,$dblink);function qdb($sql){

$resultat = mysql_query($sql); if (mysql_errno())

{ echo "MySQL error ".mysql_errno()." : ".mysql_error()."\n<br>";echo "Requête MySQL : ".$sql."\n<br>"; die;

} return $resultat;

}?>

Page 5: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Fichier connect_db.php<?php$dbhost="xxxx.ifrance.com";$dbuser="login";$dbpassword="mdp";$dbname="yyyy";

$dblink=mysql_connect($dbhost,$dbuser,$dbpassword);

$db_cswd=mysql_select_db($dbname,$dblink);function qdb($sql){

$resultat = mysql_query($sql); if (mysql_errno())

{ echo "MySQL error ".mysql_errno()." : ".mysql_error()."\n<br>";echo "Requête MySQL : ".$sql."\n<br>"; die;

} return $resultat;

}?>

Page 6: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Mise en page

AccueilMenu 1Menu 2Menu 3Menu 4

En tête de la page

Pied de la page

Page 7: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Conception de Site Webs Interactifs

Déroulement• Pages web statiques (HTML/XHTML)• Mise en forme avec feuilles de styles (CSS)• Programmation côté serveur

– Pages web dynamiques (PHP)– avec connexion à une base de données (MySQL)

• Programmation côté client– JavaScript

• Référencement Internet (moteur de recherche)

Page 8: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Mise en page

AccueilMenu 1Menu 2Menu 3Menu 4

En tête de la page

Pied de la page

Page 9: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

<div id="page_entete">Projet CSWD</div>

<div id="menu"> <ul> <li><a href="">Accueil</a></li> <li><a href="">Menu 1</a></li> <li><a href="">Menu 2</a></li> <li><a href="">Menu 3</a></li> <li><a href="">Menu 4</a></li> </ul></div>

<div id="contenu">Contenu de la page !</div>

<div id="page_pied">(c) CSWD 2007</div>

miseenpage.php

Page 10: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

#page_entete { height: 90px; background: #697FBF; text-align: center; clear: both;}

#menu { width:224px; background-color: #897FFF; float: left;}

#contenu { width:800px; float: right;}

#page_pied { height: 30px; background-color: #798FCF; text-align: center; clear: both;}

<div id="page_entete">Projet CSWD</div>

<div id="menu"> <ul> <li><a href="">Accueil</a></li> <li><a href="">Menu 1</a></li> <li><a href="">Menu 2</a></li> <li><a href="">Menu 3</a></li> <li><a href="">Menu 4</a></li> </ul></div>

<div id="contenu">Contenu de la page !</div>

<div id="page_pied">(c) CSWD 2007</div>

miseenpage.php miseenpage.css

Page 11: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

• Inclure dans vos fichiers HTML/PHP:

<link rel="stylesheet" type="text/css" href="miseenpage.css" />

Page 12: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<html><head><!-- Site Title --><title>Home Page</title>

<!-- Link to Style External Sheet --><link href="style.css" type="text/css"

rel="stylesheet" />

</head>

<body>

<div id="page_entete"> Projet CSWD </div> <div id="menu"> <ul> <li><a href="">Accueil</a></li> <li><a href="">Menu 1</a></li> <li><a href="">Menu 2</a></li> <li><a href="">Menu 3</a></li> <li><a href="">Menu 4</a></li> </ul> </div> <div id="contenu">

</div>

<div id="page_pied"> (c) CSWD 2007 </div>

</body></html>

entete.php pied.php

Page 13: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

entete.php et pied.php

<?php include "entete.php";?>

La page est vide !

<?php include "pied.php";?>

Page 14: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.
Page 15: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Terminologie

• Base de données (database)

• Table (table)

• Enregistrement (record)

• Champ (field)

Page 16: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

• Requêtes MySQL – INSERT : insérer un enregistrement– SELECT : récupérer un/des enregistrement(s)– UPDATE : mettre à jour des enregistrements– DELETE : effacer des enregistrements

Page 17: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Types de relations

• Relation de type 1:1

• Relation de type 1:n

• Relation de type n:m

Page 18: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

• Relation de type 1:n

Page 19: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Table personnes

id nom

1 Pascal

2 Marie

Page 20: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Table animauxid nom … id_personne

1 Zeus … 1

2 Sisko … 1

3 Peggy … 1

4 Oscar … 2

5 Felix … 2

Page 21: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

• Relation de type n:m

Page 22: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

• Une personne qui aime plusieurs DVDs

Page 23: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Table personnes

id nom

1 Pascal

2 Marie

Page 24: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Table DVDsid nom … id_personne

1 Casino … 1

2 Planète des singes

… 1

3 Coupe du monde 1990

… 2

4 Nirvana live … 2

… … … …

Page 25: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

• Plusieurs personnes qui aiment plusieurs DVDs

Page 26: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Table CDsid nom id_person

ne1id_personne2

1 Casino 2 1

2 Planète des singes

0 1

3 Coupe du monde 1990

… 2

4 Nirvana live … 2

… … … …

Page 27: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Table DVDsid nom

1 Casino

2 Planète des singes

3 Coupe du monde 1990

4 Nirvana live

… …

Page 28: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Table personne_dvd (de jointure)id id_dvd id_personne

1 1 1

2 1 2

3 3 1

4 3 2

… …

Page 29: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Relation de type 1:1

Une entité est partenaire de exactement une autre entité

Exemples:• Mariage : Une personne est marié avec exactement une

autre personne ⇒ Personne 1:1 Personne

• Immatriculation : Une véhicule à exactement une immatriculation

⇒ Véhicule 1:1 Immatriculation• Stade : Dans notre exemple, un club a exactement un

stade ⇒ Club 1:1 Stade

Page 30: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Relation de type 1:n

Une entité d'un côté est en relation avec un ou plusieurs entités de l'autre côté.

Exemples :• Art : Un tableau se trouve (à un moment donné) dans un

musée. Par contre, dans un musée il y a plusieurs tableaux.

⇒ Musée 1:n Tableaux • Famille: Un enfant à exactement une mère biologique.

Mais une mère peut avoir plusieurs enfants. ⇒ Mère 1:n Enfants

Page 31: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Relation n:mDans les deux côtés de la relation il y a un nombre arbitraire d'entités.

Attention : Ne pas écrire n:n ! (n ≠ m) Exemples :

• Etudiant ↔ Professeur: Un professeur enseigne plusieurs étudiants. Un étudiant va en cours de plusieurs professeurs.

⇒ Professeur m:n Etudiant• Immobilier : Un immobilier peut appartenir à plusieurs propriétaires.

Un propriétaire peut posséder plusieurs immobiliers. ⇒ Propriétaire n:m Immobilier

• joueurs ↔ clubs anciens : Un joueur peut avoir plusieurs clubs anciens. Un club a plusieurs joueurs.

Page 32: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

PHP et MySQL

Page 33: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.
Page 34: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

PHP et MySQL

Page 35: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Fichier connect_db.php<?php$dbhost="localhost";$dbuser="root";$dbpassword="";$dbname="base_cswd";

$dblink=mysql_connect($dbhost,$dbuser,$dbpassword);

$db_cswd=mysql_select_db($dbname,$dblink);function qdb($sql){

$resultat = mysql_query($sql); if (mysql_errno())

{ echo "MySQL error ".mysql_errno()." : ".mysql_error()."\n<br>";echo "Requête MySQL : ".$sql."\n<br>"; die;

} return $resultat;

}?>

Page 36: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Tous les fichiers PHP<?php

require_once("connect_db.php");

?>

Page 37: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Insérer un enregistrement

INSERT INTO livreor

( id , texte , nom , date )

VALUES

('', 'Très bon site', 'Cédric', NOW());

Page 38: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Insérer un enregistrement

$sql = "INSERT INTO livreor ( id , texte , nom , date ) VALUES ('', 'Très bon site', 'Cédric', NOW()); ";

$resultat = qdb($sql);

revient à … : $resultat = mysql_query("INSERT INTO …");

Page 39: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

echo "j'utilise php" ; // ou bien

echo "j\'utilise php" ; //

Page 40: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Concatenation 1

<?   

echo   "Salut"." Martin"; 

?> 

Page 41: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Variables<?php

$a = 0;$nom = 'Horst';echo $a;

?>

<?php $a = 0; ?><?php $nom = 'Horst'; ?><?php echo $a; ?>

Page 42: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Concatenation 2

<? 

$nom = "Martin"; 

?>

Salut <? echo $nom;  ?>

Page 43: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Insérer un enregistrement –première (mauvaise) version

$sql = "INSERT INTO livreor ( id , texte , nom , date ) VALUES ('', '". $_GET['nom']."', '".$_GET['texte']."', NOW()); ";

$resultat = qdb($sql);

$resultat = mysql_query("INSERT INTO …");

Page 44: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Attention à l'injection SQL

$sql = "l'arbre";

$sql = mysql_escape_string($sql);

Page 45: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Attention à l'injection SQL

$sql = "INSERT INTO livreor ( id , texte , nom , date ) VALUES ('', 'L'arbre pousse.', 'Cédric'; DELETE * FROM

livreor; ' Roussel', NOW()); ";

$resultat = qdb($sql);

revient à … : $resultat = mysql_query("INSERT INTO …");

Page 46: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Attention à l'injection SQL

$sql = "INSERT INTO livreor ( id , texte , nom , date ) VALUES ('', 'L\'arbre pousse.', 'Cédric', NOW()); ";

$resultat = qdb($sql);

revient à … : $resultat = mysql_query("INSERT INTO …");

Page 47: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Insérer un enregistrement –deuxième (bonne) version

$sql = "INSERT INTO livreor ( id , texte , nom , date ) VALUES ('', '". mysql_escape_string($_GET['nom'])."', '". mysql_escape_string($_GET['texte'])."', NOW()); ";

$resultat = qdb($sql);

$resultat = mysql_query("INSERT INTO …");

Page 48: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Parcourir les enregistrenents<?php

$sql = "SELECT * FROM livreor";$resultat = qdb($sql);

// connaitre le nombre d'enregistrements$nombre_resultats = mysql_num_rows($resultat);

// parcourir le tableau des enregistrements$i=1;while ($i <= $nombre_resultats){ $enregistrements = mysql_fetch_array($resultat) echo $enregistrements['nom']; echo $enregistrements['texte']; $i = $i + 1;}?>

Page 49: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Parcourir les enregistrenents<?php

$sql = "SELECT * FROM livreor;";$resultat = qdb($sql);

// connaitre le nombre d'enregistrements$nombre_resultats = mysql_num_rows($resultat);

// parcourir le tableau des enregistrementswhile ($enregistrements = mysql_fetch_array($resultat)){ echo $enregistrements['nom']; echo $enregistrements['texte'];}

?>

Page 50: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

• mysql_escape_string

Fonction "inverse" :

• stripslashes

Page 51: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Parcourir les enregistrenents<?php

$sql = "SELECT * FROM livreor;";$resultat = qdb($sql);

// connaitre le nombre d'enregistrements$nombre_resultats = mysql_num_rows($resultat);

// parcourir le tableau des enregistrementswhile ($enregistrements = mysql_fetch_array($resultat)){ echo stripslashes($enregistrements['nom']); echo stripslashes($enregistrements['texte']);}

?>

Page 52: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Les variables de session

Page 53: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Les variables de session

verifer_login.php : (si le pseudo existe et le mdp est correcte)

$_SESSION['pseudo']=$_GET['pseudo'];

les autres pages pour lesquelles il faut être loggé :

if ($_SESSION['pseudo'] != ""){

}else{

echo "il faut s'inscrire …";}

Page 54: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.

Les variables de session

deconnexion.php :

...

$_SESSION['pseudo']="";

...

Page 55: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 11 Patrick Reuter.