YBET

Rue Albert 1er, 7

6810 Pin - Chiny

Route Arlon - Florenville

(/fax: 061/32.00.15

Développer son propre site en PHP - Mysql

Magasin YBET Forum webmaster Créer son site internet

11. Créer la table utilisateur en PHP - MySQL

1. Création de la table utilisateur du site - 2. La requête MySQL - 3. Créer les requêtes SQL directement en utilisant EasyPHP - 4. Importation et exportation de tables avec données

Pour continuer notre formation, nous allons créer des tables MySql directement par des commandes PHP, cette fois la table utilisateurs qui doivent pouvoir créer un profil et se connecter pour créer leurs annonces (c'est la suite: développement d'un site spécifique en complétant notre formation). Ils doivent également récupérer leur mot de passe, modifier leurs coordonnées, ... En fin de chapitre, nous verrons aussi qu'on a des méthodes plus rapides de codage en utilisant EasyPHP (en gros on crée la table en PHPMyadmin en local et on récupère le code) et les méthodes d'importation des données sur l'hébergement. A ce stade, nous autorisons toutes les connexions, seule quelques vérifications sont faites au niveau des données rentrées.

La partie "entrée des coordonnées" va être la plus difficile, nous devons:

  1. Créer le formulaire pour entrer des données
  2. Vérifier la validité des données entrées
  3. Permettre de corriger les données si elle sont non valides
  4. Vérifier si l'utilisateur n'existe pas (dans cette partie via l'adresse mail)
  5. Insérer les données dans la base de donnée

1.Création de la table utilisateurs du site

Dans les précédents chapitres, nous avons créés des tables dans la base de donnée pour les annonces. Comme une base de donnée MySql peut inclure plusieurs tables (MySql est même nativement relationnelle), nous allons créer une nouvelle table reprenant les utilisateurs.

Dans les chapitres précédents, nous avons créer notre mise en page et créer de manière automatique une table. Cette partie va utiliser ces 2 ressources pour permettre une certaine automatisation (ce n'est qu'un début) de l'installation et de l'utilisation. Appelons cette table members. La création de la table doit:

  1. Ouvrir la base de donnée (et vérifier si elle existe)
  2. Créer la table "member" et les champs associés.
  3. Fermer la base de donnée.

La première et la dernière partie vont utiliser les fichier start.php et stop.php du chapitre précédant. Commençons par créer le fichier install_member.

<?php require ('includes/start.php'); // cette partie ouvre la base de donnée /* Création de la requête */ require ('includes/stop.php'); echo 'Base de donnée fermée'; ?>

2. La requête MySQL

Il nous reste à créer la requête SQL. Dissocions le problème en différentes parties Examinons d'abord les champs et les types de données associées. Pour les types de champs, vous pouvez revoir le chapitre 8.

Nom Type Note requête assosciée
uid smallint(6) auto-increment, clé primaire uid smallint(6) primary key NOT NULL auto_increment
titre type enum liste choix, null interdit titre enum('Monsieur','Madame','Mademoiselle') Not Null
nom varchar(25) null interdit nom varchar(25) Not Null 
prenom varchar(25) null interdit prenom varchar(25) Not Null
adresse varchar(40) adresse varchar(40)
codepostal varchar(10) codepostal varchar(10)
ville varchar(25) ville varchar(25)
pays varchar(20) null interdit pays varchar(20) Not Null
telephone varchar(20) null interdit telephone varchar(20) Not Null
email varchar(60) null interdit email varchar(60) Not null
username varchar(25) null interdit username varchar(25) Not Null
password varchar(40) null interdit password varchar(40) Not Null
type char(2) null interdit type char(2) Not null
bday smallint(2) bday smallint(2)
bmonth smallint(2) bmonth smallint(2)
byear smallint(4) byear smallint(2)
regdate int(10) unsigned, null interdit, la date d'inscription regdate int(10) unsigned not null

Les contraintes sont données dans cet exercice, vous pourrez en créer d'autres (ou en supprimer si nécessaire). La requête se définit comme suit (il suffit d'insérer les requêtes SQL, séparées par des virgules):

$requete="CREATE TABLE if not exists member (uid smallint(6) primary key NOT NULL auto_increment,titre enum('Monsieur','Madame','Mademoiselle') Not null,nom varchar(25) Not Null,prenom varchar(25) Not Null,adresse varchar(40),codepostal varchar(10),ville varchar(25),pays varchar(20) Not Null,telephone varchar(20) Not Null, email varchar(60) Not null,username varchar(25) Not Null,password varchar(40) Not Null,type char(2) Not null,bday smallint(2),bmonth smallint(2),byear smallint(4),regdate int(10) unsigned not null )";

Le code de création de la table MySQL devient:

<?php require ('includes/start.php'); // cette partie ouvre la base de donnée // création de la table $requete="CREATE TABLE if not exists member (uid smallint(6) primary key NOT NULL auto_increment,titre enum('Monsieur','Madame','Mademoiselle') Not null,nom varchar(25) Not Null,prenom varchar(25) Not Null,adresse varchar(40),codepostal varchar(10),ville varchar(25),pays varchar(20) Not Null,telephone varchar(20) Not Null, email varchar(60) Not null,username varchar(25) Not Null,password varchar(40) Not Null,type char(2) Not null,bday smallint(2),bmonth smallint(2),byear smallint(4),regdate date )";
$erreur=mysql_query($requete);
$erreur1=mysql_error();
print($erreur."<br>");
print($erreur1); // fin création table require ('includes/stop.php'); echo 'Base de donnée fermée'; ?>

Dans PHPMyAdmin, ça doit donner ceci:

Il vous reste à copier les codes ci-dessus dans le dossier www de easyphp et d'exécuter les différentes requêtes pour créer la table. Vous pouvez les adapter à votre propre utilisation mais dans le cadre de cette formation webmaster, ce n'est pas conseillé. Ces commandes sont automatiquement exécutées lorsque vous installez un forum, un portal, un livre d'or, site de vente en ligne, ... sous licence GPL. Les commandes DROP (supprimer) sont également utilisables dans la console MYPHPADMIN de votre hébergement Internet éventuellement.

3. EasyPHP, PHPmyadmin et créer des tables en PHP

Ci-dessus, nous avons créer la requête SQL "à la main". Cette méthode prend du temps et provoque souvent des erreurs. La méthode la plus "intelligente" est de créer la table en local, de récupérer la requête de création de la table via une exportation et de l'adapter (en fait supprimer ce qui ne sert à rien ou même changer de nom de table). La version de phpMyAdmin que nous utilisons ici est là 3.4.9 (fournie avec Easyphp  5.3.9.), quelques changements d'affichages importants par rapport aux versions précédantes mais la méthode est la même.

3.1. Créer la base de donnée sous phpMyAdmin.

Sous l'onglet "Bases de données", vous retrouvez la commande spécifique. Tapez le nom souhaité (sans espaces, caractères accentués, tiret, ...). Petit truc, utilisez le même nom que celle fournie par votre hébergeur.

La base ne contient pas de tables, nous allons en créer une simple avec 5 champs: le but est de voire la méthode.

Cliquez sur le nom de la base de donnée (éventuellement dans le menu de navigation gauche, cliquez sur "Nouvelle table" même si je n'aime pas trop cette méthode quand vous utilisez plusieurs bases de données en local). Entrez le nom de la table que vous souhaitez créer et le nombre de champs (comme dans le chapitre 8).

Une fois la table créée, vous pouvez aussi la modifier (types de champs, ...) comme ci-dessous

3.2. Exportation et création automatique de la requête MySQL.

Une fois la structure de la table correcte, on va simplement exporter cette table. Dans notre cas, nous n'avons pas besoin des données, nous allons sélectionner une exportation personnalisée (pour ne pas exporter de lignes). Enregistrez le fichier, c'est un simple fichier texte avec comme extension sql (dans notre cas, facture.sql).

Il est sauvé par défaut dans le dossier Documents\téléchargement sous firefox. IE permet de sélectionner le dossier. Ouvrez le avec Wordpad (le petit traitement de texte fournis dans les accessoires de Windows).

-- phpMyAdmin SQL Dump

-- version 3.4.9

-- http://www.phpmyadmin.net

--

-- Client: 127.0.0.1

-- Généré le : Dim 01 Avril 2012 à 11:00

-- Version du serveur: 5.5.20

-- Version de PHP: 5.3.9

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

SET time_zone = "+00:00";

 

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

/*!40101 SET NAMES utf8 */;

--

-- Base de données: `creation_auto_ybet`

--

-- --------------------------------------------------------

--

-- Structure de la table `facture`

--

CREATE TABLE IF NOT EXISTS `facture` (

`numero` char(30) DEFAULT NULL,

`Date` date NOT NULL,

`numéro_client` char(30) NOT NULL,

`montant_hTVA` float NOT NULL,

`montant_tvac` float NOT NULL,

KEY `numero` (`numero`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;

/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Et voilà les lignes de codes de la requête SQL à ... utiliser avec PHP. Tout ce qui débute par des doubles tirest ou /* */ peut être supprimé, ce sont des commentaires. Remarquez que le nom de la table est .. aussi en commentaire. Normal puisque l'ouverture de la base de donnée se fait avant la création des tables, cette table peut facilement être transposée dans une autre base de donnée ou même changer le nom de la table et de ses champs. Reprenons ce qui est nécessaire

$requete="

CREATE TABLE IF NOT EXISTS `facture` (

`numero` char(30) NOT NULL,

`Date` date NOT NULL,

`numero_client` char(30) NOT NULL,

`montant_hTVA` float NOT NULL,

`montant_tvac` float NOT NULL,

KEY `numero` (`numero`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;";

Et voilà notre requête SQL créée en quelques minutes. Facile, rapide et sans erreurs (j'avoue avoir même corrigé la table MySQL directement dans le fichier exporté).

4. Importer - exporter des tables.

Nous n'utilisons ci-dessus que la structure, en réel développement, nous utilisons également des données. Cette méthode d'importer - exporter des tables MySQL avec des données a des limites lorsque vous l'utiliser en importation. La taille est limitée à maximum de 2 MB, mais vous pouvez découper manuellement la requête en plusieurs parties. C'est beaucoup pour beaucoup de tables mais nettement moins pour d'autres. L'autres système nécessite un serveur dédié puisque vous devez avoir l'accès au dossier MySQL sur votre hébergement.

Par l'explorateur, sélectionnez le dossier EasyPHP local, plus le dossier MySQL et enfin data. Et on retrouve le dossier creation_auto_ybet, qui correspond à notre base de donnée. Dedans, chaque table va reprendre 1 ou 3 fichiers suivant la version de phpMyAdmin. Dans les dernières versions, on va retrouver facture.frm, les précédentes reprennent deux fichiers supplémentaires (*.myd et *.myi).

Par SSH/SFTP (utilisateur root), copiez les fichiers dans le dossier MySQL du serveur (le dossier MySQL n'est pas accessible en FTP) avec votre logiciel de transfert FTP. Changer le propriétaire du dossier (le vrai doit être MySQL) directement.

Les tables vont être automatiquement reconnues mais ... souvent, elles vont être en read-only (lecture seule, pas très pratique). Dans le phpMyAdmin de l'hébergement, faites une réparation des tables

Pour terminer, dans la gestion du serveur (pas phpmyadmin), redémarrer le serveur MySQL. Cette méthode n'est pas forcément la plus propre, surtout si des utilisateurs sont connectés lorsque vous transférez les fichiers de départ mais permet de copier de grosses tables sur un hébergement ou même de sauvegarder des grosses tables en local par l'opération inverse.

En complément:

12. > Formulaire d'inscription des annonces
<10.a. Commandes require() et include()

Mise en ligne: 12/05/2006 - Modification 08/07/2015: création automatique des requêtes, importation - exportation, transfert en SSH/SFTP