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>