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 |
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:
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:
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'; ?> |
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 |
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.
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.
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
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é).
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