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
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> <p>Vous avez renseigné: <p> <p>Nom : <?php echo $_GET['nom']; ?> </p> <p>Texte : echo $_GET['texte']; <a href="livreor.php">Voir le livre d'or</a>
sauver.php entrer.php <p>Vous avez renseigné: <p> <p>Nom : <?php echo $_GET['nom']; ?> </p> <p>Texte : echo $_GET['texte']; <a href="livreor.php">Voir le livre d'or</a> 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> <p>Vous avez renseigné: <p> <p>Nom : <?php echo $_GET['nom']; ?> </p> <p>Texte : echo $_GET['texte']; <a href="livreor.php">Voir le livre d'or</a>
sauver.php entrer.php <p>Vous avez renseigné: <p> <p>Nom : <?php echo $_GET['nom']; ?> </p> <p>Texte : echo $_GET['texte']; <a href="livreor.php">Voir le livre d'or</a> 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> <p>Vous avez renseigné: <p> <p>Nom : <?php echo $_GET['nom']; ?> </p> <p>Texte : echo $_GET['texte']; <a href="livreor.php">Voir le livre d'or</a>
sauver.php entrer.php <p>Vous avez renseigné: <p> <p>Nom : <?php echo $_GET['nom']; ?> </p> <p>Texte : echo $_GET['texte']; <a href="livreor.php">Voir le livre d'or</a> 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> <p>Vous avez renseigné: <p> <p>Nom : <?php echo $_GET['nom']; ?> </p> <p>Texte : echo $_GET['texte']; <a href="livreor.php">Voir le livre d'or</a>
Terminologie Base de données (database) Table (table) Enregistrement (record) Champ (field)
Table PERSONNE PERSONNE PersID nom prénom date_naiss ville_naiss 1 Dupont bob 01-01-1950 2 Santos Leo 29-04-1999 3 Roi Sandra 26-12-2000 note : ici ville_naiss est une clé étrangère (Table VILLE)
Table VILLE VILLE VilleID nom population superficie region 1 Paris 2153600 .. 12 2 Lyon 470400 22 3 Grenoble 156600 note : ici region est une clé étrangère (table REGION)
Types de relations Relation de type 1:1 ici : Relation de type 1:n Relation de type n:m
Table personnes id nom 1 Pascal 2 Marie
Table animaux id nom … id_personne 1 Zeus 2 Sisko 3 Peggy 4 Oscar 5 Felix
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
Instructions MySQL INSERT INTO nom_table (nom_du_champs1, nom_du_champs2, …) VALUES (valeur_champs1, valeur_champs2, ..)
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');
Instructions MySQL Sé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 livreor SELECT * FROM livreor WHERE nom='Leo' SELECT * FROM livreor WHERE date>'2000-12-01' …
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
Instructions MySQL Effacer un enregistrement DELETE FROM nom_table [WHERE nom_du_champs1 = valeur1 [AND nom_du_champs2 = valeur2]]
PHP et MySQL
PHP et MySQL
Fichier connect_db.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; ?>
Tous les fichiers PHP <?php require_once("connect_db.php"); ?>
Insérer un enregistrement INSERT INTO livreor ( id , texte , nom , date ) VALUES ('', 'Très bon site', 'Cédric', NOW());
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 …");
echo "j'utilise php" ; // ou bien
Concatenation 1 <? echo "Salut"." Martin"; ?>
Variables <?php $a = 0; $nom = 'Horst'; echo $a; ?> <?php $nom = 'Horst'; ?> <?php echo $a; ?>
Concatenation 2 <? $nom = "Martin"; ?> <? $nom = "Martin"; ?> Salut <? echo $nom; ?>
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 …");
Attention à l'injection SQL $sql = "l'arbre"; $sql = mysql_escape_string($sql);
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 …");
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 …");
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 …");
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; } ?>
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 while ($enregistrements = mysql_fetch_array($resultat)) { echo $enregistrements['nom']; echo $enregistrements['texte']; } ?>
mysql_escape_string Fonction "inverse" : stripslashes
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 while ($enregistrements = mysql_fetch_array($resultat)) { echo stripslashes($enregistrements['nom']); echo stripslashes($enregistrements['texte']); } ?>