Prof: [email protected] Dans le cours:
- PHP
- MySQL
- Ce qu'il n'y a pas ds les livres - Créer une soumission - Sécurité
- Gestion de session
- Comparaison PHP avec ASP, JSP - Requêtes au BD avec PHP - Mises-à-jour de formulaires HTML - Validation de formulaire
- etc.
Livre: voir 3.1 du plan de cours
Pour voir les documents sur le serveur: /home/www-desi/usagers/grenonni/HTML/ (j'ai fait un lien www) http://www-desi.iro.umontreal.ca/~grenonni/
Dans les TPs, utiliser les droits suivant: directory 711 files 644
CSS – Feuilles de style:
1- Feuille externe 2- Balise conteneur 3- attribut à une balise
<div> et <span> permettent de limiter l'étendue d'une feuille de style…
…
PHP require
Ouverture de code PHP: <?PHP
Fermeture: ?>
require: si fichier non dispo, arrête l'exécution.
require_once: le once évite une relecture dans une boucle par exemple.
include: si fichier non dispo, continue l'exécution.
include_once: " "
Variables commencent par $, pas d'initialisation.
== vérifie l'égalité même si pas le même type. ("123" == 123 true)
=== vérifie l'égalité sans ajuster le type. ("123" === 123 false) !== est l'inverse On concatène deux chaînes avec un point ( . ) ex.: echo "bonjour" . $a;
echo accepte une liste de paramètre: ex.: echo "bonjour", $a;
… valable aussi: ex.: echo "bonjour $a"; \$ pour le $
echo "{$a}bonjour";
Pour afficher litéralement: echo 'bonjour $a' «bonjour $a»
Les // de commentaires ne sont pas générés vers le html, ben entendu.
Débogage: Voir page 10, chap. 4 Penser à ajouter le error_reporting(E_ALL)
Tableau de valeurs: $a = array(1,2,3,4,5);
for ($i=0; $i < sizeof($a); $i++) … [sizeof == count]
for ($i=0, $nb=sizeof($a); $i < $nb; $i++) … foreach ($a as $val) echo $val;
$tab = array(
"nom" => "Tremblay", ou "nom" => $a; (val)
"prenom" => "Mario" ou "nom" => &$a; (ptr) );
echo $tab['nom'];
$cles = arrey_key($tab); "nom", "prenom", … ou
foreach ($tab as $cle => $val) …
nota: <pre> </pre> pour afficher tel quel en html !
strnatcmp permet de classer les chaînes selon a5, a10, a20 (et non pas a10, a20, a5 de strcmp)
Tri: $tab = array (100, 3, 5);
sort($tab);
ksort a trier les clés (en conservant les associations, évidemment) explode: explode(",", "bla,ble,bli,blo,blu"); array …
(il existe aussi implode)
fonction, voir fontionporte.php pour passage par valeur / référence.
Lecture d'un fichier: file(); $monFichier = file("bla.txt"); array par ligne … (avec les \n, [trim]) fopen/fclose fgetcsv …
voir file.php *** penser à utiliser is_readable …
Appel d'une page php avec paramètres:_GET contient un array associatif.
Analyser ce qui est passé comme valeur !!! if (array_key_exists('bla', $_GET)) …
if (ctype_digit($_GET['bla']) … if < sizeof && >= 0
exemple objet php4:
class Coord {
var $_x; // Le _ signifie que le «x» est private (même si tjrs public ds php4) var $_y;
// Mon constructeur function Coord() {
$this->_x = 0; // «this» est obligatoire
$this->_y = 0;
}
setX($x) {
$this->_x = $x }
getY() {
return $this->_y;
}
function _stoc … }
$c =& new Coord(); // Le & permet d'évite de copier le nouvel objet 2 fois
$c->setX(1);
echo $c->getY();
nota: Appel statique: LaClasse::laMethode();
exemple pratique, page HTML: voir répertoire cours3
nota: Appels par paramètre, penser à mettre & plutôt que & tout cout dans bla.php?a1=1&a2=2 … Formulaires
intéressant: http://livehttpheaders.mozdev.org
Penser à: Pour les chekbox, utiliser comme nom un truc du genre: name="bla[ ]"
nota: Les appels de nction peuvent avoir un paramère manquant, s'il a été défini avec une valeur par défaut.
Expression régulière, exemple: ^.+@[-0-9A-Z._]+\.[A-Z]{2,4} (pour courriel) ereg versus eregi // Le i rend le case insensitive
note importante TP2: penser à la fonction scripttags
Intéressant pour valider un formulaire … (dans PEAR: HTML_quickform)
htmlentities, fonction qui encore le texte pour être affichae sans problème dans une page web.
Génération automatique de vignettes 1- extension = gd.dll dans php.ini
2- header (attention de rien envoyer avant l'image ni après. par exemple des lignes vides début/fin) 3- attention au type de l'image (jpeg != gif)
Serveur MySQL UdeM: europa.iro.umontreal.ca
mysql –u dift1147 –p –h europa.iro.umontreal.ca show databases like 'dift1147_%';
use dift1147_Cinema;
show tables;
describe Acteur;
describe Role;
etc. voir notes
select * from Acteur, Role; énorme
select * from Acteur, Role where Acteur.acteurID=Role.acteurID;
select * from Acteur, Role where Acteur.acteurID=Role.acteurID and Film.filmID=Role.filmID;
select * from Acteur, Role where Acteur.acteurID=Role.acteurID and Film.filmID=Role.filmID and titre="Les Boys";
select nom, prenom from Acteur, Role where Acteur.acteurID=Role.acteurID and Film.filmID=Role.filmID and titre="Boys";
select nom, prenom from Acteur order by nom asc;
select nom, prenom from Acteur order by nom limit 5; 5 éléments select nom, prenom from Acteur order by nom desc limit 1;
select nom, prenom from Acteur order by nom asc limit 2,1; 1 item à partir du 2e select * from Acteur where prenom like '%a%'; case insensitive select * from Acteur where prenom like binary '%a%'; case sensitive select count(*) from Acteur;
select count(*) from Acteur where left(nom, 1)='C';
select concat(nom, ', ', prenom) from Acteur;
select concat(nom, ', ', prenom) from Acteur AS nomPrenom;
select filmID+acteurID from Role;
nota: \g à la fin permet de changer l'affichage.
in: peut servir pour créer une énumération. bla bla in (2, 4, 6)
select Acteur * from Acteur LEFT JOIN Role ON Acteur.acteurID=Role.acteurID WHERE insnull(Role.acteurID) cle primaire: peut pas se répéter, ne peut être null.
clé unique:
clé multiple: peut se répéter, peut être null.
explain select … : permet d'expliquer comment la recherche se ferait et combien d'étapes seraient nécessaires…
penser à faire le mysqladmin pour changer mon pass? Mot de passe MySQL: recette initiale.
Par php, utiliser un login différent (grenonni_web) et un pass indépendant…
exemple intéressant: select1.php select1_pear.php select2.php
mysql_escape_string: permet de préparer la string afin que le code soit valide en MySQL (backslash devant ")
Cours 6, 7 juin 2005
mysql_escape_string, pour nettoyer une requête de ses caractères dangereux.
$_SERVER contient les login et pass de type http (.htaccess)
La fonction header() de php permet d'envoyer un code 401 qui force le navigateur à demander une auth.
md5() permet un encryptage à sens unique.
crypt($a) retourne une chaîne cryptée DES (changeante)
Si crypt($a,chaineEncryptee) == chaineEncryptee, alors on a le bon pass…
On sauvegarde donc ds la DB crypt($login . $pass) et on compare ensuite le doublons donné crypté comme ça return(crypt($clair, $mdp.db) == $mdp.db)
Cours 7, 14 juin 2005
En accompagnant le cookie du SessionID par un autre «secret» changé aléatoirement à chaque "tour", dès qu'un de ces cookie secret est répéter, on ferme la sesion!
Avec ini_set, on peut changer session.name pour modifier le nom du cookie SESSIONID et d'autres bidules utiles.
session.gc_probability, en % à ajuster à 100% pour être sur de la fermeture…? (bas si gros site, hau si petit site)
$_SESSION["maVar"] = …;
unset($_SESSION["maVar"];
Cours 8, 21 juin 2005
Pour exécuter uen commande sur le serveur: exec XML: - une seule racine
- style html tag