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

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

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

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

Algorithmes et structures de données avancées

Partie Conception de Sites Web dynamiques

Cours 10

Patrick Reuter

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

Formulaires

• à l'exemple du livre d'or

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

entrer.php

<form action="sauver.php" method="get">

<p>Insérer votre nom :</p>

<input type="text" name="nom">

<p>Insérer votre message :</p>

<textarea name="texte" rows="5" cols="20"></textarea>

<br />

<input type="submit" name="soumettre"value="-- Envoyer --">

</form>

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

<p>Vous avez renseigné: <p>

<p>Nom :

<?php

echo $_GET['nom'];

?>

</p>

<p>Texte :

<?php

echo $_GET['texte'];

?>

</p>

<a href="livreor.php">Voir le livre d'or</a>

entrer.php

sauver.php

<form action="sauver.php" method="get">

<p>Insérer votre nom :</p>

<input type="text" name="nom">

<p>Insérer votre message :</p>

<textarea name="texte" rows="5" cols="20"></textarea>

<br />

<input type="submit" name="soumettre"value="-- Envoyer --">

</form>

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

<p>Vous avez renseigné: <p>

<p>Nom :

<?php

echo $_GET['nom'];

?>

</p>

<p>Texte :

<?php

echo $_GET['texte'];

?>

</p>

<a href="livreor.php">Voir le livre d'or</a>

entrer.php

sauver.php

<form action="sauver.php" method="get">

<p>Insérer votre nom :</p>

<input type="text" name="nom">

<p>Insérer votre message :</p>

<textarea name="texte" rows="5" cols="20"></textarea>

<br />

<input type="submit" name="soumettre"value="-- Envoyer --">

</form>

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

<p>Vous avez renseigné: <p>

<p>Nom :

<?php

echo $_GET['nom'];

?>

</p>

<p>Texte :

<?php

echo $_GET['texte'];

?>

</p>

<a href="livreor.php">Voir le livre d'or</a>

entrer.php

sauver.php

<form action="sauver.php" method="get">

<p>Insérer votre nom :</p>

<input type="text" name="nom">

<p>Insérer votre message :</p>

<textarea name="texte" rows="5" cols="20"></textarea>

<br />

<input type="submit" name="soumettre"value="-- Envoyer --">

</form>

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

Terminologie

• Base de données (database)

• Table (table)

• Enregistrement (record)

• Champ (field)

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

Table PERSONNE

PERSONNE

PersID nom prénom date_naiss ville_naiss

1 Dupont bob 01-01-1950 1

2 Santos Leo 29-04-1999 2

3 Roi Sandra 26-12-2000 1note : ici ville_naiss est une clé étrangère (Table VILLE)

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

Table VILLE

VILLE

VilleID nom population superficie region

1 Paris 2153600 .. 12

2 Lyon 470400 .. 22

3 Grenoble 156600 .. 22note : ici region est une clé étrangère (table REGION)

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

Types de relations

• Relation de type 1:1

• ici : Relation de type 1:n

• Relation de type n:m

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

Table personnes

id nom

1 Pascal

2 Marie

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

Table animauxid nom … id_personne

1 Zeus … 1

2 Sisko … 1

3 Peggy … 1

4 Oscar … 2

5 Felix … 2

Page 14: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 10 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 15: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 10 Patrick Reuter.

Instructions MySQL

INSERT INTO nom_table (nom_du_champs1, nom_du_champs2, …)

VALUES

(valeur_champs1, valeur_champs2, ..)

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

Instructions MySQL

INSERT INTO livreor ( id , texte , nom , date ) VALUES ('1', 'Leo', 'Bonjour', '2007-12-03');

si le champs id est mis en auto-increment, il suffit de mettre

INSERT INTO livreor ( texte , nom , date ) VALUES ('Leo', 'Bonjour', '2007-12-03');

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

Instructions MySQLSélectionner les champs de tous les enregistrements d’une table

SELECT * FROM nom_table [WHERE condition [AND condition] [OR condition]] [ORDER BY champs [DESC][ASC]];

Exemples:

SELECT * FROM livreorSELECT * FROM livreor WHERE nom='Leo'SELECT * FROM livreor WHERE date>'2000-12-01'…

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

Instructions MySQL

Modifier une donnée dans une table

UPDATE nom_table SET nom_du_champs = nouvelle_valeur WHERE nom_du_champs = valeur

Exemple

UPDATE sondage SET nombrechoix1 = 0 WHERE id = 1

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

Instructions MySQL

Effacer un enregistrement

DELETE FROM nom_table [WHERE nom_du_champs1 = valeur1 [AND nom_du_champs2 = valeur2]]

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

PHP et MySQL

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

PHP et MySQL

Page 23: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 10 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 24: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 10 Patrick Reuter.

Tous les fichiers PHP<?php

require_once("connect_db.php");

?>

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

Insérer un enregistrement

INSERT INTO livreor

( id , texte , nom , date )

VALUES

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

Page 26: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 10 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 27: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 10 Patrick Reuter.

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

echo "j\'utilise php" ; //

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

Concatenation 1

<?   

echo   "Salut"." Martin"; 

?> 

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

Variables<?php

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

?>

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

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

Concatenation 2

<? 

$nom = "Martin"; 

?>

Salut <? echo $nom;  ?>

Page 31: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 10 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 32: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 10 Patrick Reuter.

Attention à l'injection SQL

$sql = "l'arbre";

$sql = mysql_escape_string($sql);

Page 33: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 10 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 34: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 10 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 35: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 10 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 36: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 10 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 37: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 10 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 38: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 10 Patrick Reuter.

• mysql_escape_string

Fonction "inverse" :

• stripslashes

Page 39: Algorithmes et structures de données avancées Partie Conception de Sites Web dynamiques Cours 10 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']);}

?>