IUT Montpellier –département informatique
Transcription
IUT Montpellier –département informatique
IUT Montpellier –département informatique Novembre 2008 Introduction à PHP 1.Premier script <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>premier programme</title> </head> <body> <?php print("premier programme"); ?> </body> </html> 2. Formulaires <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Mon formulaire</title> </head> <body> <form method="post" action="http://localhost/poly/essai1.php5"> <p>entrez votre texte</p> <input type="text" name="texte" /> <input type="submit" name="envoi" value="envoi" /> </form> </body> </html><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>premier programme</title> </head> <body> <?php print ($_POST["texte"]); ?> </body> </html> 1 <form name = "nomformulaire" target= "fenetre" action = "serveurURL" method = "forme" [onSubmit = "procédure"] > nom d’un frameset, _self, _blank, pour le résultat adresse du serveur protocole GET par défaut , la plus usuelle est POST code à exécuter lors de la soumission </form> <form method = "post" action = "http://serveur/~etud/index.html"> <input type="text" name=reponse1> <input type="text" name=reponse2> <input type="submit" name="envoi" value="envoi" /> </form> Le bouton SUBMIT <input type="submit" name="bouton1" value ="envoi" > Les boîtes d'édition <input type = name = value = size = > "text" "nom" "chaine" "taille" <textarea name rows cols wrap = "nom" = "ligne" ="colonnes" = "off" </ textarea > 2 3. Les types simples intervalle string integer boolean double de -2.147.483.648 true 1.7*10 -308 à et à valeurs 2.147.483.647 false 1.7*10 +308 <?php $val = 1458; $val = 0145; $val = 0x14; $val = 1.458; $val = 1.4e5; $jour = "lundi"; $car = $jour(0); $test = true; // entier base 10 // entier base 8 // entier base 16 // réel // réel // chaîne // premier caractère de la chaîne jour // booléen ?> 4. Les variables Elles commencent par $. ● variables locales déclarées dans une fonction, une méthode ou un bloc d'instructions. si static la valeur de la variable est conservée pendant toute la durée du script <?php function recur() { static $i = 0; // déclaration et initialisation de la variable $i++; print ($i); if ($i<10) recur(); } ?> ● variables globales sont déclarées hors des fonctions. Il est possible en php de les utiliser dans une fonction en les redéclarant avec le mot clé global. Par sécurité deviennent interdites <?php ?> $a = 1; $b = 2; function somme() { return $a+$b; } // ne fait rien <?php $a = 1; $b = 2; function somme() { global $a, $b; return $a+$b; } ?> ● ● variables d'instances internes à un objet particulier d'une classe. variables de classes qui définissent une propriété commune à tous les objets de cette classe abstract class Bd { const Pers= 2; const Doc = 3; const Id = 1; // chaque classe et table a un identificateur protected $bd; // ressource sur la base protected $nombase; // nom de la base protected $util; // nom de l'utilisateur' protected $passwd; // mot de passe protected $serveur; // url serveur // constructeur function __construct ($serv, $utilisateur, $password, $base) { $this->serveur = $serv; 3 $this->util = $utilisateur; $this->passwd = $password; $this->nombase = $base; } } class BdSqlite { const Base="c:\\poly\\bd\\bdpoly.dbf"; // constructeur function __construct () { parent::__construct("", "", "", self::Base); } public static $Tquery = array ( Bd::Doc=>"create table tdocument ( id integer, nomdepot text , iddepot integer, nom text, url text, nomfich text, type text )" ); // ajout de la table dont l'identificateur est passé en paramètre public function ajoutTable($num) { $query = self::$Tquery[$num]; return $this->query ($query); } type d'une variable avec les fonctions gettype(), is_bool(), is_long(), is_double(), is_string(), is_array(), is_object(), is_resource() variables d'un formulaire HTML $_GET["nom"] , $_POST["nom"] , $_REQUEST["nom"] 5. Les tableaux - analogie avec les ArrayList + HashTable de Java élément de tableau : clé explicite ou implicite et une valeur création d'un tableau ● array() $table = array ( 1, 10, 25 ); //tableau de 3 entiers ● affecter directement chaque élément du tableau $table [0] = 1; $table [1] = 10; $table [2] = 25; / taille d'un tableau avec la fonction count() ou sizeof() $fin = count( $table ); for ($i = 0; $i < $fin; $i++) { print ($table [$i]); // les clés sont les valeurs de 0 à 6. $jour = array("lu", "ma", "me", "je", "ve", "sa", "di"); }; $table[1] // les clés sont les valeurs "lu", "ma", "me", "je", "ve", "sa", "di". $jour = array("lu"=>"lundi", "ma"=>"mardi", "me"=>"mercredi", "je"=>"jeudi", "ve"=>"vendredi", "sa"=>"samedi", "di"=>"dimanche"); $table["lu"] 4 ● ● ● ● parcours de liste : les fonctions utilisables sont reset(), end() positionnement au début de la liste où en fin de liste next(), prev() positionnement sur l'élément suivant ou précédent (renvoie false s'il n'existe pas) key() renvoie la clé de l'élément courant ou false current() renvoie la valeur de l'élément courant ou false <?php $jour = array("lu"=>"lundi", "ma"=>"mardi", "me"=>"mercredi", "je"=>"jeudi", "ve"=>"vendredi", "sa"=>"samedi", "di"=>"dimanche"); for ( reset($jour); $key=key($jour); next($jour) ) { $val=current($jour); print ("$key = $val<br>\n"); }; ?> 6. Les classes ● class nomclasse, puis déclaration des variables, puis définition des méthodes. La classe peut être abstraite (abstract). interface nomclasse puis déclaration des méthodes ● ● héritage simple avec extends NomClasse héritage multiple avec implements NomInterface ● données en private, public, ou protected peuvent être static manipulé avec $this-> pour les attributs de l’objet self:: NomClasse:: ● méthodes en private, public, ou protected ● la méthode peut être static Constructeur ● même nom que celui de la classe en php4 ● __construct() en php5 classe Document ● conserver des documents envoyés par les utilisateurs sur un serveur ● visualiser les documents de façon indirecte ● fichier "document.php5". ● associée à une table de nom tdocument dans une base de données ● pour conserver les informations ● mais pas le document chaque table d’une base de données ==> création d’une classe php les attributs de la table et ceux de la classe doivent être de même type et avoir le même nom <?php include_once ("Bd.php5") ; class Document { private $id; //identificateur unique document private $nom; //nom externe du document private $nomdepot; //nom déposant private $iddepot; //identificateur déposant private $url; //url pour obtenir le document (indirection par un script php) private $type; //type du document private $nomfich; //chemin du document sur le serveur // constructeur public function __construct () { $this->id =0; $this->nomdepot =""; $this->nom =""; $this->url=""; $this->iddepot =0; $this->nomfich=""; $this->type=""; 5 } // initialisation des attributs public function initVal ($id, $nom, $nomdepot, $url, $iddepot, $nomfich, $type) { $this->id =$id; $this->nomdepot =$nomdepot; $this->nom =$nom; $this->url=$url; $this->iddepot =$iddepot; $this->nomfich=$nomfich; $this->type=$type; } ?> 7. L'héritage simple et l’appel de méthodes parent::nomDeLaMéthode class BdSqlite { const Base="c:\\poly\\bd\\bdpoly.dbf"; // constructeur function __construct () { parent::__construct("", "", "", self::Base); } } 8. Les méthodes statiques class Math { public static function addition ($a, $b) public static function soustraction ($a, $b) public static function multiplication ($a, $b) public static function division ($a, $b) { { { { return $a + $b; } return $a - $b; } return $a * $b; } return $a / $b; } } $x = 4; $y = 5; $val = Math::addition ($x, $y); print ("$val <br>"); mettre les fichiers php dans Z:/public_html/ exemple index.php5 <?php print( phpinfo() ); > 9. Envoi d'une chaîne de caractères au client print ( string chaine); <?php printf ( string format, [<liste de valeurs>] ); print ("envoi de texte"); ?> printf("x=%02d", $x); Le type est l'un des caractères c un caractère s chaîne de caractères d entier valeur décimale x entier valeur hexadécimale o entier valeur octale e réel avec exposant 15.567e-3 f réel sans exposant 0.015567 10. Envoi d'un fichier au client int readFile (string nomDuFichier); 6 class Document { public function envoiDoc() { $header ="Content-Disposition: attachment; "; $header =$header.'filename='.$obj->nomfich.'\n'; header($header); header("Content-Type: ".$obj->type."\n"); set_magic_quotes_runtime(0); readfile($obj->url); } } 11. Envoi d'un fichier au serveur formulaire : <input type="file" name="fichier" value=""> copie dans un répertoire temporaire du serveur, il faut avoir les droits variable $_FILES. class Document { public function copieFich() { $fich = $_FILES ["fichier"]; $nomfich=""; $url=""; $type=""; if ($fich["error"]==0) //test erreur éventuelle { $type=$fich["type"]; //type du fichier $nomfich=$fich["name"]; //nom du fichier $url="../docs/".$fich["name"]; //url du fichier dans un sous répertoire docs copy ($fich["tmp_name"],$url); //copie à partir du répertoire temporaire } } } 12. Courriel $ok=mail("[email protected]","essai php","texte essai"); boolean mail(String dest, String sujet, String mess, String entetes); ● adresse destinataire To: ● sujet du courriel Subject: ● texte du message entêtes supplémentaires comme dernier paramètre, les entêtes sont séparées par une fin de ligne To: [email protected] From: betaille <[email protected]> Subject: td php Cc: Bcc: X-Attachments: C:\hb\hb2007\semWeb\php\td1.pdf; In-Reply-To: le sujet de td, 7 class Courriel { public static function envoiSimple ($dest,$titre,$texte) { return mail($dest, $titre, $texte); } public static function envoiAttach ($dest, $titre, $texte, $fich, $type) { } public static function envoiDoc($nomfich, $login, $url, $dir) { } } ?> 13. Fonctions sur les bases de données <?php include_once ("BdSqlite.php5"); include_once ("BdMysql.php5"); abstract class Bd { protected $bd; // ressource sur la base protected $nombase; // nom de la base protected $util; // nom de l'utilisateur' protected $passwd; // mot de passe protected $serveur; // url serveur // constructeur function __construct ($serv, $utilisateur, $password, $base) { $this->serveur = $serv; $this->util = $utilisateur; $this->passwd = $password; $this->nombase = $base; } // connection et ouverture base de données // renvoi true si ouverture false sinon abstract public function open(); // fermeture base abstract public function close(); // exécution de la requête passée en paramètre // renvoi le résultat de la requête abstract public function query($query); // renvoi d'une ligne du résultat de la requête sous forme objet abstract public function fetchObject($result); // renvoi d'une ligne du résultat de la requête sous forme de tableau abstract public function fetchArray($result); // renvoi le nombre de lignes du résultat de la requête abstract public function numRows($result); // informations sur l'objet public function toString () { return $this->serveur." util=".$this->util." passwd=".$this->passwd." base=".$this->nombase; } // creation et ouverture de la base // renvoi true si correct, false sinon abstract public function createBase(); // destruction de la base // renvoi true si correct, false sinon abstract public function deleteBase(); const Pers= 2; // chaque classe et table a un identificateur const Doc = 3; const Id = 1; // ajout de la table dont l'identificateur est passé en paramètre abstract public function ajoutTable($num); 8 const Sqlite=0; // identificateur des bases const Mysql=1; const SelectBase = 1; // valeur à modifier pour sélectionner la base de données /* sert à la création d'un objet BdMysql ou BdSqlite renvoi un objet Bd */ public static function quelBase() { switch (self::SelectBase) { case self::Sqlite : $bd = new BdSqlite(); break; case self::Mysql : $bd = new BdMysql(); break; } return $bd; } } ?> Création, destruction et ouverture d'une base de données Dans un script php creation d’un objet Bd $bd puis appel de la méthode concernée $bd = Bd::quelBase(); if( $bd->createBase()) $bd = Bd::quelBase(); if( $bd->deleteBase()) $bd = Bd::quelBase(); if ($bd->open()) Création d'une table Une fonction statique de la classe document permet la création de la table associée en passant en paramètre un identificateur de classe. Les attributs doivent porter le même nom dans la table et dans l’objet. class Document { public static function ajoutTable($vbd) { $vbd->ajoutTable(Bd::Doc); } } Ecriture et destruction d'un élément de table Comme nous travaillons avec des objets, la modification d’un objet peut se résumer à la destruction de l’élément le contenant suivi de l’écriture d’un nouvel élément. class Document { // ajout d'un élément function ajoutElement(Bd $vbd) { $query ="insert into tdocument " . "values ('".$this->id."','".$this->nomdepot."','".$this->iddepot."','".$this->nom."'," . "'".$this->url."','".$this->nomfich."','".$this->type."')"; $result = $vbd->query ($query); //print ("ajoutdoc ".$query.$result); } public function modifieElement($vbd) { if (($_SESSION["act"]=='s')||($_SESSION["act"]=='m')) // s supprimer, m modifier { $query ="delete from tdocument where id=".$this->id; $result = $vbd->query ($query); } if ($_SESSION["act"]!='s') $this->ajoutElement($vbd); //print ("modifie tdocument".$query." res=".$result."<br/>"); } } 9 Lecture des éléments d'une table class Document { // initialisation avec le résultat d'une requête sous forme objet public function initObjet ($tuple) { $this->id =$tuple->id; $this->nomdepot =$tuple->nomdepot; $this->nom =$tuple->nom; $this->url=$tuple->url; $this->iddepot =$tuple->iddepot; $this->nomfich =$tuple->nomfich; $this->type =$tuple->type; } static public function afficheTout($vbd) { $query ="select * from tdocument order by id"; $result = $vbd->query ($query); $nb = $vbd->numRows ($result); $obj = new Document(); for ($i=0; $i<$nb; $i++) { $tuple = $vbd->fetchObject($result); $obj->initObjet($tuple); // sélectionne tout //renvoi sous forme d'objet // utilisation $obj } } } 10