La plate-forme commune

Voici la plate-forme commune pour ce fichier :

<?
include "commun/connexion.inc.php";
?>
<html>
<head>
<title>Oubli</title>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1"></head>
<body bgcolor="#FFFFFF" text="#000000">
<?
echo "<form name=\"form1\" method=\"post\" action=\"$PHP_SELF\">";
?>
</form>
</body>
</html>


Tous les autres éléments sont optionnels. Ils dépendent des étapes suivies
par l’internaute.

Tout sur un seul fichier : oubli.php

Nous allons maintenant préparer un formulaire qui apparaîtra dans une
fenêtre en cas d’oubli du mot de passe. C’est un simple formulaire avec
deux champs : nom d’usage et réponse, précédé de la question, puis vient
la page avec l’annonce qui vient d’être envoyée par courriel. Tous ces
traitements seront réunis sur un fichier.

L’information est reçue par courriel pour authentifier l’adresse e-mail.
Nous verrons qu’il est intéressant aussi d’envoyer régulièrement une lettre
aux membres et d’y inclure le nom d’usage avec le mot de passe afin de
le leur rappeler.

La réflexion

Le formulaire peut se rappeler lui-même avec la variable $PHP_SELF.
Nous pouvons également utiliser un champ caché passage pour marquer
chaque étape à l’intérieur d’une variable. Les champs cachés posent un
problème de sécurité car il suffit qu’un internaute récupère la source du
formulaire, modifie ce dernier et le soumette pour créer une faille dans la
sécurité. Il vaut mieux l’utiliser uniquement pour des marqueurs ou pour
passer des numéros d’identification complexes, impossibles à inventer. Ici
nous l’employons comme marqueur et sa modification ne permet à
l’internaute de récupérer aucun mot de passe.

La vérification avec Javascript

Javascript est un langage côté client, c’est-à-dire qu’il est interprété
directement par le navigateur web. L’intérêt de cette vérification est
qu’elle oblige le visiteur à corriger le champ erroné, donc le serveur
envoie uniquement des informations valides dans le programme de
traitement. C’est l’approche pour la correction d’erreurs éventuelles. Nous
n’emploierons PHP que pour des champs qui posent problème à Javascript,
comme le menu à choix multiple ou tout champ qui comprend
plusieurs éléments à sélectionner.

Nous ne verrons dans cette partie que la syntaxe Javascript utile dans le
cas d’un formulaire. Pour approfondir, nous vous donnerons les URL de
sites intéressants en annexe.

Quelques notions indispensables
La syntaxe de ce langage est légèrement différente de celle de PHP, même
si vous disposez aussi des variables, des tests, des boucles, des fonctions
(celles qui préexistent et celles que vous créez vous-même) et des objets
(thème que nous n’évoquerons pas dans ce livre).

Les fonctions

Les fonctions Javascript sont placées dans l’en-tête HTML tandis
qu’elles sont appelées à partir de la balise FORM ou d’un champ du
formulaire (y compris le bouton SUBMIT). Ce langage vérifie directement,
dans la mémoire vive du navigateur, les données entrées par
l’utilisateur. Une fonction Javascript est appelée par un événement. Dans
un formulaire, cet événement est un changement intervenu dans un champ
ou un clic sur le bouton SUBMIT. Comme dans le langage PHP, une
fonction peut en appeler une autre.

Variables et objets
Une variable doit être déclarée. Son nom n’est pas précédé d’un $.
Les objets comme les éléments d’une page web sont définis dans une
hiérarchie arborescente nommée le DOM (Document Object Model).
FORM est un de ces objets. La notation pour définir le premier champ,
nom_usage, dans la deuxième page est window.document.forms[0]
.nom_usage. Si vous n’avez qu’une fenêtre, c’est-à-dire que vous n’avez

 Double Poche PHP & MySQL
pas ouvert de nouvelle fenêtre avec une fonction Javascript, vous pouvez
élider le mot window et écrire document.forms[0].nom_usage. Javascript
crée automatiquement un tableau d’objets, ainsi le même objet
nom_usage peut être défini à l’aide des tableaux et s’écrire indifféremment
:
¶ document.forms[0].nom_usage ;
¶ document.page_2.elements[0] ;
¶ document. forms[0].elements[0].

Un objet String dispose de la propriété length que nous utiliserons pour
vérifier que le champ a été rempli correctement. L’objet window contient
la méthode alert() qui permet d’afficher une fenêtre d’avertissement
avec un bouton OK. Étudions plus précisément maintenant les objets du
formulaire et leurs propriétés.

Les formulaires - MySQL en action

Une des principales utilisations de PHP et raisons de son succès est la facilité qu’il procure au webmestre pour traiter les données envoyées par un formulaire. Le formulaire, comme le courriel, est un des vecteurs principaux de la communication entre les internautes et le webmestre du site.

  PHP gère les données du formulaire de manière transparente. Il crée automatiquement les variables à partir des noms utilisés pour qualifier les champs du formulaire. Il entrepose ces variables dans un tableau de portée globale. C’est-à-dire que ces variables peuvent être appelées directement depuis n’importe quelle partie de l’application.

  L’inscription au club

Dans une page d’accueil, vous ferez la promotion de votre club. Elle
contiendra un lien qui permettra de rejoindre la page d’inscription. Cette
dernière sera un formulaire.

Les visiteurs d’un site sont méfiants, à juste titre. Ils peuvent hésiter à
donner leurs coordonnées à quelqu’un qu’ils ne connaissent pas.
Rassurez-les sur la confidentialité de ces données et la possibilité pour eux
de supprimer leur profil, le cas échéant.

Le fichier de connexion à la base
Nous avons vu précédemment que pour accéder à la base de données, il
fallait un nom d’utilisateur et un mot de passe. Si vous avez besoin de cet
accès dans votre page, saisissez les lignes suivantes :


<?
$dbname = ’nom_base’;
$hostname = ’localhost’;
$username = ’nom_utilisateur’;
$password = ’mot_de_passe’;
if (!$id_link = mysql_connect($hostname, $username, $password)) {
echo ’Connexion impossible à mysql’;
exit;

}
if (!mysql_select_db($dbname, $id_link )) {
echo ’Sélection de base de données impossible’;
exit;
} ?>




Ces quelques lignes composent votre fichier de connexion. Sur votre site,
vous allez créer un répertoire nommé commun. Dans ce répertoire, vous
placerez tous vos programmes (fichiers inclus et fonctions). Ce fichier qui
est un fichier inclus dans toutes les pages demandant une connexion à la
base de données, s’appellera connexion.inc.php. inc est l’abréviation de
include. Ce type d’architecture est pratique car elle facilite la migration
d’une application d’un serveur vers un autre. Ainsi, il vous sera facile de
transporter votre application, de votre serveur de test sur votre machine
personnelle à celui de l’hébergeur, sans faire de changement majeur. Il
vous suffira de modifier ce fichier.


La fonction mysql_connect() renvoie l’identifiant de connexion MySQL
en cas de succès et FALSE si la connexion n’a pu se faire. Par les deux
conditions (if…), l’action est générée et si la fonction renvoie FALSE, le
bloc conditionnel est exécuté. Le message affiché en cas d’échec de la
connexion ou de la sélection de la base de données est minimal, il vous
appartient de le personnaliser et de l’agrémenter.






sauvegarde base de données - MySQL en action

sauvegarde base de données
Transportons maintenant la base de données de votre machine sur votre nouveau site.

programmationdebutant
sauvegarde base de données
Avec PHPmyAdmin, il est simple et pratique de sauvegarder la base. Il vous suffit d’aller dans la rubrique Affıcher le schéma de la base. Vous avez alors le choix de son contenu, soit uniquement la structure, la structure et les données, ou encore les données seulement. Ensuite, vous  avez la possibilité de d’enregistrer la base sur votre disque dur en fichier texte ou compressé. Faites une sauvegarde régulière. Sinon, en cas de problèmes, vous ne récupérerez peut-être pas les internautes inscrits depuis la dernière sauvegarde.

Les jointures de tables - MySQL en action



Pour afficher un résultat lisible, vous utilisez la requête SELECT en y incluant une jointure de table :

SELECT * from membres, pays where membres.pays=pays.code


Ici le signe * indique que tous les champs sont sélectionnés. Pour prendre en compte uniquement certains champs, il faut les nommer. Si les tables ont deux champs qui portent le même nom, il est nécessaire de nommer aussi les tables. Nous conseillons de le faire systématiquement, dans le cas des jointures, pour ne pas rencontrer de mauvaises surprises. Ainsi pour sélectionner tous les champs sauf la date de mise à jour, il faudrait écrire la requête suivante :

Les clés étrangères - MySQL en action


La meilleure façon de créer une homogénéité est de proposer des choix à travers des menus déroulants. Ainsi l’internaute ne tape rien. Il choisit et n’entraîne pas d’erreur.

Nous allons créer dans la base une deuxième table renfermant tous les pays du monde. Cette table est composée de deux colonnes. La première est un code de trois lettres, la seconde le nom du pays.


CREATE TABLE pays (
code char(3) NOT NULL default ’’,
nom varchar(100) NOT NULL default ’’,
PRIMARY KEY (code),
UNIQUE KEY code (code)
)


Vous trouverez les données pour créer une table sur le site www.microapp.com.