39
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

Embed Size (px)

Citation preview

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

?>