Formations privées

Rue Albert 1er, 7

6810 Pin - Chiny

(/fax: 061/32.00.15

Formation PHP - MySql en ligne

Formation Webmaster

Formation: apprenez à créer et référencer votre propre site Internet

FORMATIONS

Le MAGASIN YBET

PRODUITS et SERVICES

Formations informatiques privées

Activités et présentation

Logiciels de gestion

Microsoft Excel

Rayon d'action  

Logiciel compta CIEL
YBET informatique Forum Création de site Vente informatique en ligne

Warning: include(..includes/start-product.php) [function.include]: failed to open stream: No such file or directory in /home/ybet/www/hardware/produit-vertical.php on line 26

Warning: include() [function.include]: Failed opening '..includes/start-product.php' for inclusion (include_path='.:/usr/share/php5') in /home/ybet/www/hardware/produit-vertical.php on line 26
CANON MG5150 PIXMA
Mltifonction MG5150 - 5 cartouches - canon Pixma


Prix: 97.32 € TTC
CANON MP 490
Imprimante Canon multifonction MP490


Prix: 85.61 € TTC
CANON MX330 PIXMA
MX330 Canon, Imprimante tout en un avec fax


Prix: 154.77 € TTC
HP LASERJET P1505
Imprimante laser HP laserjet 1505


Prix: 150.27 € TTC
YBET informatique

Formations Privées en informatiques
B-6810 Pin - Chiny

Création et référencement Internet
Formation
: apprenez à créer et référencer votre propre site Internet

  • Module 1 (Débuter en création de site, HTML): 19 et 26 avril, 3 ,10 et 17 mai.
  • Module 2 (Débuts en PHP, MySQL: première partie): 17, 24 et 31 mai, 7, 14 et 21 juin.

Ces modules sont accessibles également à distance. Elles se dérouleront les lundi soirs de 19 à 22 heures.

Les chapitres de la formation en ligne PHP - MySQL
1. Introduction au Php
2. Installation et utilisation d'easyphp
3. Première commande PHP
4. Fonctions en PHP
5. Variables tableaux
6. Fonctions principales sur les variables
7. Formulaires Mail
8. Base de donnée MySQL avec easyphp
9. Première application de Mysql
10. Gestion des tables par PHP
10.a Exercice: formulaire de contact
11. Mise en page PHP - HTM: include() - require()
12. Création de table en PHP
13. Formulaire et vérification des données
14. Insertion des nouveaux membres
15. Gestion des catégories
16. Liste de choix déroulante
17. Modification des tables MySQL
18. Enregistrer un fichier via un formulaire
19. Formulaire d'insertion
20. Affichage des petites annonces
21. Filtrage des annonces (1)
23. Exercice: gérer des news
24. Utilisation des Cookies
25. Gestion fichiers et Dossiers (source et FTP)
26. Cryptage et décryptage de mots de passe
27. Bases de données relationnelles, méthodes Left et Join.
Divers
Les feuilles de styles, utilisation du CSS.
FrontPage et l'HTML, cours en ligne
Le fichier Apache .htaccess, configuration serveur, URL Rewriting, accès répertoires.
Formation Access, dans la même série de cours en ligne, apprendre l'utilisation de Microsoft Access
Le référencement, méthodes standards pour être visible sur les moteurs de recherche.

24. Utilisation des cookies avec PHP

1 Introduction - 2. Créer les cookies - 3. Récupérer les cookies - 4. Exemple d'utilisation: login - mot de passe - 5. Mise à jour du cookie - 6. Vérification de l'utilisateur - 7. Gestion des utilisateurs dans les pages - 8. Pour conclure

Diverses applications nécessitent de différencier les utilisateurs: compteurs de visites et statistiques diverses (même si une solution externe gratuite ou payante est souvent préférable) ou le suivi d'utilisateurs inscrits. Dans les 2 cas, la distinction entre deux visiteurs différents se fait soit par l'adresse IP du visiteur, soit par de petits fichiers textes appelés cookies ou même par un paramètre de session (déconseillé). 

Dans le premier cas, plusieurs visiteurs provenant d'une même connexion interne (via un routeur) seront vus comme un seul utilisateur. Par contre, les cookies sont insérés sur l'ordinateur du visiteur (donc unique par visiteur) et lus par le serveur Internet. Cette solution est donc nettement plus intéressante puisqu'elle distincte les visiteurs des visites. Par contre, l'utilisateur peut interdire les cookies sur son ordinateur.

Une autre utilisation est liée aux utilisateurs enregistrés. Ceci permet de différencier les utilisateurs sur tous les forums, logiciels de vente en ligne, ... Un autre système utilise des ID de session, un nombre unique qui suit le visiteur durant sa visite sur le site mais est affiché dans l'adresse de la page. Comme le numéro d'identification change à chaque nouvelle connexion, cette solution est déconseillée pour le référencement dans les moteurs de recherche.

La gestion utilise les en-têtes HTTP, d'une manière similaire à la méthode POST des formulaires. La fonction qui permet de créer des cookies en PHP: setcookie($nom,$valeur,$expiration)

  • $nom est le nom du cookies

  • $valeur est la chaîne de caractères à transmettre

  • $expiration est la date d'expiration, sous forme d'un timeStamp.

La commande doit débuter le script PHP, avant tout affichage en utilisant les commandes print(), echo(), ... et avant le code HTML pour les premières versions de PHP

Si le cookies ne peut être envoyé (placé après le début), le message d'erreur est "Cannot send cookies -headers alredy sent by ..."

Sans date d'expiration, il est automatiquement supprimé en fermant la fenêtre du navigateur.

2. Créer les cookies

Si vous placez un cookie à l'aide de la fonction Setcookie, le prochain passage de l'utilisateur sur la page créera une variable tableau $_COOKIE, similaire aux constantes $_GET, $_POST ou $_SETVER déjà rencontrées.

Par exemple, si la commande est setcookie('ybet','site'); au prochain passage, la variable $_COOKIES['ybet']='site'.

Les compteurs utiliseront cette variable pour distinguer les visiteurs, les sessions utilisateurs permettront de suivre un utilisateur une fois celui-ci connecté ou même de permettre la connexion automatique.

<?php
if(!isset($_COOKIE['ybet']))
{
Setcookie('ybet','site');
Print ("Première visite");
}else{
Print ("Vous avez déjà visité la page");
}
?>

Analysons le code ci-dessus. Lors du démarrage du fichier, nous testons l'existence de la variable $_COOKIE['ybet']. Si elle n'existe pas, nous créons le cookies. Sinon, nous affichons le message "Vous avez déjà visité la page". Remarquez que nous n'avons pas mis de date d'expiration. Dès lors, une fois le visiteur passé, il sera toujours renseigné comme "déjà visité".

Attention, le script suivant ne fonctionne pas.

<?php
if(!isset($_COOKIE['ybet']))
{
Setcookie('ybet','site');
Print ("Première visite");
}else{
Print ("Vous avez déjà visité la page");
Setcookie('ybet','site');
}
?>

Renvoie le message: Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\cookie.php puisque l'affichage est déjà démarré par une commande Print();. 

La méthode la plus courante consiste à mettre une date d'expiration du cookies. C'est un paramètre optionnel de la commande.

Setcookie("ybet","site",time()+3600);

Cette option commence par la fonction time() pour récupérer la date courante au format timestamp (nombre de secondes depuis le 01/01/1970) et d'ajouter la durée du cookies en secondes. Dans le cas ci-dessus, l'expiration du cookies se fait après 1 heures.

2.1. Un petit problème courant.

Certains serveurs sont configuré en UFT-8 (c'est un standard Unicode pour encoder les caractères). Dans ce cas, le contenu est bien envoyé mais il n'est pas correctement récupéré par le serveur à cause de caractères supplémentaires. Normalement la commande Setcookie doit être exécutée AVANT l'header. En cas de serveur gérant l'UTF-8, l'envoi d'une ligne supplémentaire doit être exécutée avant:

<?PHP
Setcookie("ybet","site",time()+3600);
?>

<html>
<head>
<meta http-equiv="Content-Type" Content="text/html; charset= utf-8>

devient

<?PHP
header ("Content-Type:text/html; charset=utf-8>
Setcookie("ybet","site",time()+3600);
?>

<html>
<head>

3. Récupérer les cookies.

Pour récupérer les cookies, nous utilisons la variable $_COOKIES (version PHP 4.1.0 et supérieure ou $HTTP_COOKIES_VARS (version inférieures). C'est une variable tableau. Nous allons afficher sa valeur via le petit programme ci-dessus:

<?php
if(!isset($_COOKIE['ybet']))
{
Setcookie('ybet','site',time()+3600);

Print ("Première visite sur le ");
echo $_COOKIE['ybet']."<br>";
}else{
Setcookie('ybet','avant',time()+60);
Print ("Vous avez déjà visité la page ");
echo $_COOKIE['ybet']."<br>";
}
?>

Si c'est la première visite, on insère un cookies et on l'affiche (avec sa valeur: site). Il est valable 1 heure. Dans le cas contraire, on affiche un texte suivant d'une autre variable (avant). Le fichier expire après 60 secondes. 

4. Exemple d'utilisation: login - mot de passe

Nous allons utiliser les cookies pour sauvegarder un nom d'utilisateur suivi d'un mot de passe. Cette fonctionnalité est utilisée dans la majorité des forum, portals, ... L'utilisateur se connecte avec son login - mot de passe. Une case à cocher lui permet d'être reconnu directement par le site Internet à sa prochaine connexion. 

Débutons par un petit formulaire permettant à l'utilisateur de se connecter. Pour l'instant, nous ne vérifions pas la validité de la connexion.

<form method="POST">

<p>Nom utilisateur: <input type="text" name="login" size="20"></p>

<p>Mot de passe: <input type="password" name="password" size="20"></p>

<p>Mémoriser la connexion: <input type="checkbox" name="memo[1]" value="ON"> </p>

<p><input type="submit" value="Envoyer" name="B1"></p>

</form>

Remarquez que le mots de passe n'est pas de type texte, mais password. Les caractères affichés seront "cachés" lors de la frappe. En deuxième, nous utilisons un champ de formulaire de type "checkbox". PHP les analyse comme des variables de type tableau, ils ne sont pas passez par $_POST mais bien comme valeur de matrice. En plus, si la case n'est pas cochée, la variable tableau n'est pas envoyée.

Nous allons l'insérer dans un fichier php auto-invocant.

<?php
if (isset($_POST['B1']))
{
// à ce stade, nous ne vérifions pas si l'utilisateur existe
$login=addslashes($_POST['login']);
$password= addslashes($_POST['password']);
if (isset($memo[0]))
{
$memo=$memo[0];
}else{
$memo="";
}
echo $login." ".$password." ".$memo;
}

$form="<form method=\"POST\"><p>Nom utilisateur: <input type=\"text\" name=\"login\" size=\"20\"></p>
<p>Mot de passe: <input type=\"password\" name=\"password\" size=\"20\"></p>
<p>Mémoriser la connexion: <input type=\"checkbox\" name=\"memo[]\" value=\"ON\"> </p>
<p><input type=\"submit\" value=\"Envoyer\" name=\"B1\"></p>
</form>";
echo $form;
?>

La partie checkbox vérifie si effectivement la matrice est définie. Dans le cas contraire, on lui donne valeur nulle.

Il nous reste à créer le cookies utilisateur. Si la case est cochée, nous lui donnons une durée de 10 jours (c'est un exemple), sinon, une heure, le temps de la navigation. Nous utilisons une simple fonction conditionnelle si.

<?php
if (isset($_POST['B1']))
{
// à ce stade, nous ne vérifions pas si l'utilisateur existe
$login=addslashes($_POST['login']);
$password= addslashes($_POST['password']);
if (isset($memo[0]))
{
$memo=$memo[0];
}else{
$memo="";
}
if ($memo=="")
{
Setcookie('ybet',$login."-pw-".$password,time()+3600);
}else{
Setcookie('ybet',$login."-pw-".$password,time()+864000);
}
}
$form="<form method=\"POST\"><p>Nom utilisateur: <input type=\"text\" name=\"login\" size=\"20\"></p>
<p>Mot de passe: <input type=\"password\" name=\"password\" size=\"20\"></p>
<p>Mémoriser la connexion: <input type=\"checkbox\" name=\"memo[]\" value=\"ON\"> </p>
<p><input type=\"submit\" value=\"Envoyer\" name=\"B1\"></p>
</form>";
echo $form;
?>

Remarque: la partie affichage va remplacer le cookies à chaque passage du nom utilisateur dans la partie suivante.

Il nous reste à récupérer le cookies sur chaque page pour vérifier l'utilisateur.

5. Mise à jour du cookie.

Cette partie du développement va mettre à jour la durée de validité du cookies à chaque passage de l'utilisateur sur une page.

Avant de créer le programme en PHP, quelques rappels sur les cookies. Un utilisateur peut interdire les cookies. De même, les robots d'indexation ne les acceptent pas. Dans certains cas, on va détecter si l'utilisateur les accepte et "forcer" les cookies via un fichier temporaire sur l'hébergement qui suit le visiteur. C'est utilisé notamment pour suivre les visiteurs sur les pages (statistiques des visites) Dans notre cas, nous n'allons pas les forcer. Si l'utilisateur ne les accepte pas, nous ne le suivons pas, tout simplement. Il n'est utilisé ici que pour les utilisateurs inscrits.

Testez ce petit programme sur votre navigateur. Il envoie un cookies et juste après vérifie s'il peut être lu mais ce programme a un petit problème, le cookies est vérifié uniquement au passage sur une page suivante. La détection se fait en javascript, pas en PHP.

<?php
// ce programme vérifie si le navigateur accepte les cookies.
Setcookie('cookies',"tests",time()+60);
if(!isset($_COOKIE['cookies']))
{
echo "N'accepte pas";
}else{
echo "Accepte";
}
?>

Nous allons pourtant utiliser cette partie pour suivre notre visiteur. Le visiteur doit préalablement s'inscrire. Sur chaque page, nous vérifions si le cookies existe. S'il n'est inscrit, nous passons la détection. Par contre, s'il est inscrit, nous modifions le cookies pour remettre la durée à 1 mois. Le cookies reprend le login et le mot de passe. Ce mot de passe est défini dans le formulaire d'inscription utilisateur.

6. Vérification de l'utilisateur

Avant d'envoyer le cookies, nous allons vérifier si l'utilisateur existe. Pour cela, nous allons utiliser la table member créée dans le chapitre 14. Nous ne vérifions finalement que le login (champ username) et le mot de passe (champ password). Cette partie va s'insérer juste avant l'envoi des cookies.

De nouveau, nous utilisons le fichier start.php pour débuter la connexion sur la base de donnée. Un utilisateur doit être préalablement créé dans la table.

<?php
/* vérification login - mot de passe.

$login reprend le nom utilisateur
$password, le mot de passe
$memo, sauvegarde cookies 10 jours.

*/
$login="YBET";
$password="ybet";
require('includes/start.php');
$requete="SELECT * FROM member where username='$login' and password='$password'";
$valeur=mysql_query($requete);
$ligne=mysql_num_rows($valeur);
if ($ligne==0)
{
echo"Utilisateur inconnu";
}else{
echo"Utilisateur connu";
}
?>

Ce petit programme ne fait qu'afficher "Utilisateur connu" s'il est déjà enregistré dans la table MySql et "Utilisateur inconnu s'il n'est pas encore enregistré. Il nous reste à l'insérer dans le programme ci-dessus de gestion des cookies. Remarque, nous utilisons également une variable Memo suivi d'un timestamp pour la durée de connexion.

<?php
if (isset($_POST['B1']))
{
// à ce stade, nous ne vérifions pas si l'utilisateur existe
$login=addslashes($_POST['login']);
$password= addslashes($_POST['password']);
if (isset($memo[0]))
{
$memo=$memo[0];
}else{
$memo="";
}
// echo $login." ".$password." ".$memo;
// Vérification dans la table member
if(!mysql_connect('localhost','root')){
Echo'Connection Impossible';
exit();
}
Mysql_select_db('ybet');
$requete="SELECT * FROM member where username='$login' and password='$password'";
$valeur=mysql_query($requete);
$ligne=mysql_num_rows($valeur);
if ($ligne==0)
{
echo"Utilisateur inconnu";
die('<meta http-equiv="refresh" content="3; URL=inscription.php">');
}else{
//echo"Utilisateur connu";
if ($memo=="")
{
Setcookie('ybet',$login."-pw-".$password."memo".$memo,time()+3600);
}else{
Setcookie('ybet',$login."-pw-".$password."memo".$memo,time()+864000);

}
echo"Bonjour ".$login.", vous êtes maintenant connecté";
die('<meta http-equiv="refresh" content="3; URL=index.php">');
}
}
$form="<form method=\"POST\"><p>Nom utilisateur: <input type=\"text\" name=\"login\" size=\"20\"></p>
<p>Mot de passe: <input type=\"password\" name=\"password\" size=\"20\"></p>
<p>Mémoriser la connexion: <input type=\"checkbox\" name=\"memo[]\" value=\"ON\"> </p>
<p><input type=\"submit\" value=\"Envoyer\" name=\"B1\"></p>
</form>";
echo $form;
?>

Si l'utilisateur est connu, nous insérons le cookies et le redirigeons vers la page d'entrée. Par contre, en cas d'erreur, il est renvoyé vers la page inscription. Remarque, le code inséré dans le cookies reprend le login, mot de masse et champ MEMO. C'est solution n'est pas très sécurisée, n'importe quel utilisateur pourra récupérer les 2 en lisant les cookies directement sur un ordinateur.

7. Gestion des utilisateurs dans les pages.

Dernier petit développement, suivre l'utilisateur avec ses cookies. Pour cela, nous devons vérifier sur chaque page si le cookies est déjà implanté. S'il ne l'est pas, nous l'empêchons simplement d'exécuter quelques fonctions (comme inscrire une annonce). Si l'utilisateur est connu et suivi, nous mettons le cookies à jour et lui permettons différentes possibilités, comme la modification de son compte et l'inscription de nouvelles annonces. 

Dans cette formation, nous nous contentons de suivre l'utilisateur sur la partie enregistrement des annonces. Le développement complet est repris sur le site officiel du développement.

Nous allons tout simplement insérer le code suivante au début de notre fichier d'insertion des annonces

<?php
//Vérification de l'utilisateur
if(!isset($_COOKIE['ybet']))
{
echo"Vous ne pouvez pas poster d\'annonce, merci de vous connecter";
$login="";
}else{
$cookies=$_COOKIE['ybet'];
$cookies_array=array();
$cookies_array=Explode("-pw-",$cookies);
$login=$cookies_array[0];
$l=$cookies_array[1];
$cookies_array=explode("memo",$l);
$password=$cookies_array[0];
$memo=$cookies_array[1];
if(!mysql_connect('localhost','root')){
//Echo'Connection Impossible';
exit();
}
Mysql_select_db('ybet');
$requete="SELECT * FROM member where username='$login' and password='$password'";
$valeur=mysql_query($requete);
$ligne=mysql_num_rows($valeur);

if ($ligne==0)
{
echo"Vous ne pouvez pas rentrer d'annonce, merci de vous connecter";
die('<meta http-equiv="refresh" content="3; URL=inscription.php">');
}else{
//echo"Utilisateur connu";
if ($memo=="")
{
Setcookie('ybet',$login."-pw-".$password."memo".$memo,time()+3600);
}else{
Setcookie('ybet',$login."-pw-".$password."memo".$memo,time()+864000);
}
while ($tableau=mysql_fetch_array($valeur)){
$mail=$tableau['email'];
$uid_util=$tableau['uid'];
}
}
}

?>
<html>

Quelques remarques:

  • nous récupérons diverses informations de la table member comme son adresse mail et son numéro d'utilisateur.

  • cette partie doit être insérée avant <HTML>

8. Pour conclure

Nous venons d'utiliser les cookies pour vérifier un utilisateur. Cette partie ne doit normalement pas être insérée dans un site de cette manière. Ceci est lié à l'envoi des coordonnées (login et mot de passe) dans le cookies qui peut-être récupéré directement sur l'ordinateur en claire.

Ca nous a déjà permis d'envoyer un le fichier de suivi, de le récupérer et de vérifier s'il est correct (en fonction d'une table utilisateur). C'est déjà pas si mal. Cette méthode oblige néanmoins l'utilisateur à les accepter pour insérer une annonce (par exemple). Si c'est correct dans le cas d'un login utilisateur, cette méthode ne peut pas être utilisée pour des fonctions de suivi sur les pages (statistiques par exemple). Le mot de passe n'est pas non plus crypté, nous en reparlerons dans un prochain chapitre.

Créer son site Internet

Quelques remarques préliminaires concernant l'hébergement, le langage de programmation

Référencer son site WEB

Comment référencer un site Internet, meta, balises, ... formations en ligne

FrontPage

Créer un site Internet en HTML avec FrontPage, formation en ligne.

Votre mariage, DJ AFTER TWO

Animation et musique adaptée tous publics

> 24. Gestion des dossiers et fichiers

<23 . Exercice: gérer des news

Mise en ligne: 17/12/2006

YBET Informatique: formation débutant ou avancé

dans notre salle de formation ou en entreprise

Renseignements, tarifs et inscriptions sur notre page formations informatiques

Magasin Informatique YBET à Chiny

Autre formations en ligne:

Access - Excel - PowerPoint - Word - Internet - Quelques notes de la formation Ciel Comptabilité