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

Documents pareils