Cours sur PHP5

Transcription

Cours sur PHP5
PHP/MySQL
PHP Avancé
PHP/MySQL
Accès à une BDD
Cours HTML/PHP
PHP
Accès à MySQL
Accès à une base de donnée MySQL
Cinq étapes :
1
Connexion au SGBD.
2
Sélection d’une base.
3
Envoi d’une requête.
4
Récupération et utilisation du résultat.
5
Fermeture de la connexion.
On peut itérer les étapes 3 et 4 autant de fois que l’on veut avant
de fermer la connexion à l’étape 5.
Cours HTML/PHP
PHP
Accès à MySQL
Connexion
Connexion au SGBD :
$user = ’toto’ ;
$passwd = ’mdptoto’ ;
$machine = ’localhost’ ;
machine où tourne PHP
$connect = mysql connect($machine,$user,$passwd)
or die(’Echec de connexion au SGBD’) ;
Choix de la base :
$bd = ’entreprise’ ;
mysql select db($bd,$connect)
or die(’Echec lors de la selection de la base’) ;
Fermeture (après les requêtes) :
mysql close($connect) ;
Cours HTML/PHP
PHP
Accès à MySQL
Envoi de la requête
$requete = ’une requete SQL’ ;
$resultat = mysql query($requete,$connect)
or die(’Erreur durant l’exécution de la requ^
ete’) ;
Exemple :
$salaire max = 20000 ;
$requete = "SELECT nom FROM employe "
." WHERE salaire <= $salaire max" ;
$resultat = mysql query($requete,$connect)
or die(’Erreur durant l’exécution de la requ^
ete’) ;
Durant la phase de développement, il peut être utile d’afficher
$requete avant son envoi au SGBD.
Cours HTML/PHP
PHP
Accès à MySQL
Exploitation du résultat d’une requête
Code type pour parcourir le résultat :
while ($nuplet = mysql fetch assoc($resultat)) {
...
}
La boucle while permet de parcourir les n-uplets qui forment
le résultat (un n-uplet par tour de boucle).
$nuplet est un tableau associatif qui associe à chaque
attribut du résultat sa valeur pour le n-uplet courant.
Si la requête est une mise à jour, il est inutile de parcourir le
résultat.
Cours HTML/PHP
PHP
Accès à MySQL
Exemple
$salaire max = 20000 ;
$requete = "SELECT nom,salaire FROM employe "
." WHERE salaire <= $salaire max" ;
$resultat = mysql query($requete,$connect)
or die(’Erreur durant l’exécution de la requ^
ete’) ;
print "<h3>Employés gagnant moins de "
."$salaire max euros par an</h3>" ;
while ($nuplet = mysql fetch assoc($resultat)) {
$nom = $nuplet[’nom’] ;
$sal = $nuplet[’salaire’] ;
print "<p>$nom gagne $salaire euros par ans.</p>" ;
}
PHP/MySQL
Les cookies
Qu'est-ce qu'un cookie

Les cookies sont de petits fichiers texte
 présents
sur l'ordinateur client
 et envoyés par le serveur.

Il est souvent utilisé pour reconnaitre les
utilisateurs.
Cookies

Utilités
 pouvoir
stocker diverses informations à récupérer
ultérieurement.

Inconvénients :
 Le
client (le visiteur) peut paramétrer son navigateur
pour refuser les cookies.
 Il est donc élémentaire de ne pas s'appuyer
exclusivement sur l'utilisation des cookies et de
prévoir un système de secours (passage des
variables par l'url par exemple).
Comment créer un cookie.

La fonction setcookie() : est utilisée pour
créer un cookie.
IMPORTANT : La fonction setcookie() doit
être placé avant le code HTML, car le
cache du navigateur doit être vide pour
que cette fonction fonctionne
convenablement.
Syntaxe

setcookie(name, value, expire, path,
domain);

L'exemple ci-après génère un cookie
appelé "nom_cookie" avec pour contenu
"djazaire.net" pour une période de 10
heures.
Exemple :create_cookies.php











<?php
// génère le cookie
$contenu = 'djazaire.net'; // le contenu de votre
cookie
setcookie("nom_cookie", $contenu, time()+36000);
?>
<html>
<body>
<p>
Un cookie a été généré sur cette page.
</p>
</body></html>
Comment retrouver la valeur d'un cookie.
Quand un cookie est généré, php utilise le
nom du cookie comme une variable pour y
accéder.
 Utiliser la fonction isset() pour voir si un
cookie a été généré.

Affiche_cookie.php
<?
echo $_COOKIE["nom_cookie"];
// ou
echo $HTTP_COOKIE_VARS["nom_cookie"];
?>
Détruire un cookie
il vous suffit de faire appel à la fonction
setcookie() avec pour seul argument le
nom du cookie à détruire.
 Vous pouvez également spécifier une
chaine quelconque pour la valeur du
cookie et une valeur minimale pour la date
d'expiration du cookie.

Détruire un cookie del_cookie.php







<?php
/*
* Les deux exemples suivants sont équivalents
*/
setcookie('nom_cookie'); // exemple 1
setcookie('nom_cookie', '', 1); // exemple 2
?>
Exemple d’utilisation:dernière visite
On veut créer un script qui peut connaître
la dernière visite au site.
 On va créer un cookie qui contient la
dernière date de visite de la page.
 Lors de la visite de la page, on vérifié s’il
s’agit d’une nouvelle visite.

Lastvisit.php





















<?php
// tester s'il y a eu déjà une visite
if (isset($_COOKIE["last_visit"]))
{
$last_visit=$_COOKIE["last_visit"];
}
else $last_visit="";
// actualiser la date de la dernière visite
$actual_visit = time(); // le contenu de votre cookie
setcookie("last_visit", $actual_visit, time()+36000);
?>
<html>
<body>
<?php
if($last_visit!="")
echo " Votre dernière visite est le ".date("d-m-Y à h:i:s",$last_visit);
else
echo " BienVenue sur notre site pour la première fois ";
?>
</body>
</html>
Exercice

Créer le script qui enregistre le mot de
passe et le nom d’utilisateur.
Correction
Config.php
<?
 $MyUserName="admin";
 $MyPassWord=« 1234";
 ?>

Login.php











<html>
<body>
<h2>Login</h2>
<form action="confirm.php" method="post">
Nom d'utilisateur :<br> <input type="text" name="name" size="20" />
<br/>
Mot de passe :<br><input type="password" name="password"
size="20" /> <br/>
<input type="checkbox" name="garder" /> Garder ma session
ouverte. <br/>
<input type="submit" value="Login" />
</form>
</body>
</html>
Confirm.php














<?php
if (!isset($_POST["name"]) or !isset($_POST[« password"]))
{
echo " introduire un nom d'utilisateur et un mot de passe";
echo "<br><a href='index.php'> retour</a>";
}
else
{
require ("config.php");
// verifier le nom d'utilisteur et le mot de passe
$username=$_POST["name"];
$password=$_POST["password"];
if ($username!=$MyUserName or $password!=$MyPassWord)
{ echo " le nom d'utilisateur ou le mot de passe incorrect";
Confirm.php














echo "<br><a href='index.php'> retour</a>";
}
else
{
if (isset($_POST["garder"]))
{
setcookie("garder-username", $username, time()+36000);
setcookie("garder-password", $password, time()+36000);
}
echo " le nom d'utilisateur ou le mot de passe correct";
echo "<br><a href='home.php'> index</a>";
}
}
?>
Index.php


















<?php
require("config.php");
// tester s'il y a eu déjà une visite
if (isset($_COOKIE["garde-username"]) and isset($_COOKIE["gardepassword"]))
{
$username=$_COOKIE["garde-username"];
$password=$_COOKIE["garde-password"];
if ($username!=$MyUserName or $password!=$MyPassWord)
{ echo " le nom d'utilisateur ou le mot de passe incorrect";
echo "<br><a href='index.php'> retour</a>";
}
else include("home.php");
}
else
{
include("login.php");
}
?>
PHP/MySQL
Les sessions
Comment fonctionne une session ?
Les informations sont stockées dans des
fichiers, sur le serveur, à chaque session
correspond un fichier.
 Chaque session est désignée par un nom
et un identifiant.
 Lorsque le visiteur accepte les cookies,
l'identifiant de la session est stocké dans
un cookie,

Comment fonctionne une session ?
dans le cas contraire, il existe un autre
moyen de stocker l'identifiant.
 Normalement, la session est détruite soit à
la fermeture du navigateur, ou au bout de
30 minutes.
 Cette valeur peut être modifiée dans le
fichier php.ini du serveur.

Démarrer une session
 <?php
session_start(); ?>
 Ce code permet de démarrer une
session.
 Si un fichier existe sur le serveur pour
cette session, les variables de
sessions seront récupérées, si ce
n’est pas le cas, un nouveau fichier
sera créé.
Démarrer une session
Notez que code doit être placé tout
au début de votre page, avant tout
code HTML, car la session ne peut
être démarrée que si le cache du
navigateur est vide.
Créer une variable de session :
Les variables de sessions sont accessibles une
fois que la session est démarrée via un tableau
super global : $_SESSION
<?php $_SESSION['variable'] = $valeur ; ?>
Savoir si une variable de session
existe
pour savoir si la variable de session variable
existe:
<?php
if(isset($_SESSION['variable']))
echo 'La variable "variable" existe !';
?>
Utiliser la valeur d’une variable de
session
Si vous voulez utiliser la valeur d’une variable de
session, vous devez passer par $_SESSION
<?php if(isset($_SESSION['variable']))
echo 'La variable "variable" existe et vaut : ‘
.$_SESSION['variable'];
?>
Supprimer une variable de session


Pour supprimer une variable de session, il faut
utiliser la fonction unset()
<?php
unset($_SESSION['variable']);
echo 'La variable de session "variable" est
maintenant détruite';
?>
Détruire toutes les variables de
session
a fonction session_unset() détruit toutes
les variables de session.
<?php session_unset(); ?>
Détruire une session
La fonction session_destroy() permet de
détruire une session.
Syntaxe :
<?php session_destroy(); ?>
Exemple
Ouvrir une session par mot de passe
Index.php

<?php
require("config.php");
// tester s'il y a eu déjà une visite
if (isset($_SESSION['nom_session']))
{
echo " une session est déjà ouverte";
}
else
{
include("login.php");
}

?>










Config.php
<?
 $MyUserName="admin";
 $MyPassWord="2547";
 ?>

Login.php











<html>
<body>
<h2>Login</h2>
<form action="confirm.php" method="post">
Nom d'utilisateur :<br> <input type="text" name="name"
size="20" /> <br/>
Mot de passe :<br><input type="password" name="password"
size="20" /> <br/>
<input type="checkbox" name="garder" /> Garder ma session
ouverte. <br/>
<input type="submit" value="Login" />
</form>
</body>
</html>
Confirm.php

























<?php
if (!isset($_POST["name"]) or !isset($_POST["password"]))
{
echo " introduire un nom d'utilisateur et un mot de passe";
echo "<br><a href='index.php'> retour</a>";
}
else
{
require ("config.php");
// verifier le nom d'utilisteur et le mot de passe
$username=$_POST["name"];
$password=$_POST["password"];
if ($username!=$MyUserName or $password!=$MyPassWord)
{ echo " le nom d'utilisateur ou le mot de passe incorrect";
echo "<br><a href='index.php'> retour</a>";
}
else
{
$_SESSION['nom_session'] = "session1" ;
echo " Ouverture d'une nouvelle session";
echo " le nom d'utilisateur ou le mot de passe correct";
echo "<br><a href='home.php'> index</a>";
}
}
?>
Fonctions et Objets en Php
FONCTIONS
function NomFonction ([$arg1, $arg2, ...])
{
// Ici le code de la fonction
}
• arguments sont passés généralement par valeur
• par adresse : en préfixant la variable par & (avant le $). Il y a deux
manières d’indiquer un passage par adresse :
– au moment de l’appel, même pour une fonction qui a été prévue pour
travailler sur des arguments passés par valeur (cette manière est
déconseillée)
– dans la définition de la fonction. C’est alors la règle par défaut pour tout
appel de la fonction.
FONCTIONS
•
Valeurs par défaut
function Connexion ($pNom, $pMotPass, $pBase = "Boutique", $pServeur =
"ecommerce") { // Ici le code de la fonction }
// on peut donc appeler cette fonction sans citer les deux derniers arguments
$connexion1 = Connexion ("Ali", "passdeali");
$connexion2 = Connexion ("Ali", "passdeali", "Magasin");
•
•
•
•
func_num_args( ) [pas de paramètre, retourne le nombre d'arguments passés à la
fonction],
func_get_arg( ) [un paremètre i : retourne le (i+1)ième élément de la liste des
arguments]
et func_get_args( ) [pas de paramètre, retourne les arguments d'une fonction sous
forme de tableau]
PHP propose trois types de variables :
•
•
•
Variables automatiques (pas de portée à l’extérieur)
Variables statiques ( persistantes entre les appels)
Variables globales
Classes et Objets
•
Une classe est une collection de variables et de fonctions qui fonctionnent avec ces variables. Une classe
est définie en utilisant la syntaxe suivante :
class Panier {
// Eléments de notre panier
private $items;
// Ajout de $num articles de type $artnr au panier
function add_item ($artnr, $num) {
$this->items[$artnr] += $num;
}
}
// Suppression de $num articles du type $artnr du panier
function remove_item($artnr, $num) {
if ($this->items[$artnr] > $num) {
$this->items[$artnr] -= $num;
return true;
} else if ($this->items[$artnr] == $num) {
unset($this->items[$artnr]);
return true;
} else {
return false;
}
}
Héritage et Constructeur
Fonction __construct (pour les versions résentes, function avec nom de classe)
<?php
class LecteurTable {
public function __construct($s="perso.livehost.fr", $l="visiteur", $p="Ali", $bd="notes") {
// …
}
}
class UserManagement extends LecteurTable {
public function __construct() {
parent::__construct(); // appel au constructeur de la classe parent
// ….
}
}
?>
initialisation et création
•
Initialisation
– Pour PHP 5 : utilisez les constructeurs pour les initialisations variables
– function __construct
– Ou function au nom de la classe
•
Création
•
– $cart = new Panier();
– Le constructeur est la fonction qui est appelée automatiquement par la classe
lorsque vous créez une nouvelle instance d'une classe a l'aide de l'opérateur new.
La fonction constructeur a le même nom que la classe. Une fonction devient le
constructeur si elle porte le même nom que la classe. Un constructeur peut avoir
des paramètres avec ou sans des valeurs par défaut
Accès aux membres d’une classe
– $cart->add_item("diplome", 1);
$cart->add_item("semestre", 6);
print_r($cart->items);
Quelques mots-clefs
•
•
•
•
•
this
– La pseudo-variable $this n'est pas toujours définie si la méthode dans laquelle elle
est présente est appelée statiquement. Cependant, ceci n'est pas une règle stricte :
$this est définie si une méthode est appelée statiquement depuis un autre objet.
Dans ce cas, sa valeur vaut l'objet qui fait l’appel static.
extends
– Une classe ne peut hériter que d'une seule autre classe
implements
– Une classe peut implémenter plusieurs interfaces
::
– faire référence aux fonctions et variables d'une classe de base, ou bien d'utiliser
des méthodes de classes qui n'ont pas encore d'objets créés
parent
– représente votre classe de base (celle indiqué par extends, dans la déclaration de
votre classe)
TYPES : les chaînes de caractères
•
Traitement des variables dans les chaînes : cas des tableaux et des objets
<?php
// Ces exemples sont spécifiques à l'utilisation de tableaux dans une chaîne Lorsque vous êtes hors d'une chaîne,
// utilisez toujours des guillemets autour des index de tableau, et n'utilisez pas d'{accolades}.
// Affichons toutes les erreurs
error_reporting(E_ALL);
$fruits = array('fraise' => 'rouge', 'banane' => 'jaune');
// Fonctionne mais notez que cela fonctionne pas comme si cela était hors d'une chaîne
echo "Une banane est $fruits[banane].";
// Fonctionne
echo "Une banane est {$fruits['banane']}.";
// Fonctionne mais PHP cherche une constante appelée banane tel que décrit ci-dessous
echo "Une banane est {$fruits[banane]}.";
// Ne fonctionne pas, il manque les accolades. Cela donne une erreur d'analyse
echo "Une banane est $fruits['banane'].";
// Fonctionne
echo "Une banane est " . $fruits['banane'] . ".";
// Fonctionne
echo "Ce carré a un coté de $square->width mètres de large.";
// Ne fonctionne pas. width00 pourrait être un champ.
echo "Ce carré a un coté de $square->width00 centimètres.";
// Fonctionne
echo "Ce carré a un coté de {$square->width}00 centimètres.";
?>
Fonctions liées aux objets
•
is_a -- Retourne TRUE si un objet a pour parent une classe donnée
•
•
class_exists -- Vérifie qu'une classe a été définie
method_exists -- Vérifie que la méthode existe pour une classe
•
De l’introspection…
–
–
–
–
–
get_class_methods -- Retourne les noms des méthodes d'une classe
get_class_vars -- Retourne les valeurs par défaut des propriétés d'une classe
get_class -- Retourne la classe d'un objet
get_declared_classes -- Liste toutes les classes définies
get_declared_interfaces -- Retourne un tableau avec toutes les interfaces
déclarées
– get_object_vars -- Retourne un tableau associatif des propriétés d'un objet
– get_parent_class -- Retourne le nom de la classe d'un objet
– is_subclass_of -- Détermine si un objet est une sous-classe
•
•
nterface_exists -- Vérifie si une interface a été définie
property_exists -- Vérfie si un objet ou une classe a une propriété
Eléments static
Elements (champs ou méthodes) commun à toutes les instances de la classe
Accessibles sans instance
Accès via <nom de classe>::$<nom de champ> ou <nom de classe>:: <methode>( )
<?php
class Bandeau {
public static $map = array(
array("index.php", "connexion"),
array("date.php", "manipulation de dates")
);
}
echo "<a href='".Bandeau::$map[0][0]."'>='".Bandeau::$map[0][1]. " </a>" ;
?>
=> <a href=' index.php' >connexion</a>