Installer sa base de données via un formulaire

Formation

En Semi-présenciel Paris

Prix sur demande

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Description

  • Typologie

    Formation

  • Méthodologie

    En semi-présentiel

  • Lieu

    Paris

Grâce à cette formation vous pourrez acquérir les connaissances nécessaires qui vous permettrons d’ajouter des compétences à votre profil et obtenir de solides aptitude qui vous offriront de nombreuses opportunités professionnelles.

Les sites et dates disponibles

Lieu

Date de début

Paris ((75) Paris)
Voir plan
7 Cité Paradis, 75010

Date de début

Consulter

Questions / Réponses

Ajoutez votre question

Nos conseillers et autres utilisateurs pourront vous répondre

À qui souhaitez-vous addresser votre question?

Saisissez vos coordonnées pour recevoir une réponse

Nous ne publierons que votre nom et votre question

Les Avis

Les matières

  • SA

Le programme

Introduction du cours

Bonjour à tous.

Je vais dans ce tutoriel vous apprendre comment installer sa base de données MySQL, sans forcément passer par PhpMyAdmin, à l'image des CMS.

Avant d'aller plus loin, je vais partir du principe que vous avez lu et compris le tutoriel de M@teo21 au moins jusqu'à la PARTIE 3.

Organisation du script :

install/ :
- base.sql : requêtes SQL ;
- index.php : formulaire pour établir la connexion avec la base de données (pas de PHP) ;
- traitement.php : la partie la plus grosse la plus intéressante du tutoriel, nous établirons la connexion avec la base de données, créerons un fichier de configuration et exécuterons le fichier contenant les requêtes à envoyer au serveur ;
- test.php : ce fichier nous permettra d'établir en une seule ligne la connexion avec la base de données et par un petit code, de récupérer les informations de la table "tuto".

sql/ :
- ici sera placé notre fichier de configuration (config.php) pour pouvoir se connecter à la base de données grâce à ce seul fichier qui devra être inclus à chaque fois qu'il sera nécessaire.

Je sais que cela vous démange, mais ne créez pas tout de suite le fichier de configuration (seulement le répertoire sql/). Du moins, ce n'est pas nécessaire.
Le terrain est désormais préparé, nous pouvons attaquer !

Pour que le script fonctionne, vous devez préalablement créer votre base dans PhpMyAdmin. Pour le tutoriel, créez simplement une base nommée "test".
Notre fichier base.sql contiendra seulement des requêtes de création de tables et d'insertion de données.

Le fichier de requêtes

Un exemple rien que pour le tutoriel, vous êtes censés comprendre ces lignes :-° :

-- -- Structure de la table `tuto` -- CREATE TABLE IF NOT EXISTS `tuto` ( `id` tinyint(4) NOT NULL auto_increment, `nom` varchar(255) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; -- -- Contenu de la table `tuto` -- INSERT INTO `tuto` VALUES (1, 'Je suis un Zéro !');

Pour obtenir ce joli code, j'ai créé ma table directement dans PhpMyAdmin et j'ai ensuite inséré des données. Finalement j'ai utilisé l'onglet "Exporter".

Notre formulaire

Maintenant que nous avons notre fichier base.sql, nous pouvons réaliser notre simplissime formulaire. Voici pour l'occasion une page xHTML :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Installation automatisée : 1ère étape</title> <style type="text/css"> body { font-family:Tahoma, Arial, Serif; /* polices du texte */ font-size:14px; /* taille du texte */ } h1 { font-size:1.4em; /* taille du titre */ } label { font-size:1.2em; /* taille du texte pour les "label" */ display:block; /* on affiche les "label" en tant que block et non pas inline */ width:150px; /* on leur met une taille pour aligner nos zones de texte */ float:left; /* flottant à gauche */ } </style> </head> <body> <h1>Informations sur la base de données MySQL :</h1> <p> <form action="traitement.php" method="post"> <p> <input type="hidden" name="etape" value="1" /> <label for="hote">Hôte :</label> <input type="text" name="hote" maxlength="40" /><br /> <label for="login">Utilisateur :</label> <input type="text" name="login" maxlength="40" /><br /> <label for="mdp">Mot de passe :</label> <input type="password" name="mdp" maxlength="40" /><br /> <label for="base">Nom de la base :</label> <input type="text" name="base" maxlength="40" /><br /><br /> <label for="submit">&nbsp;</label> <input type="submit" name="submit" value="Envoyer" /> </p> </form> </p> </body> </html>

Ce qu'il vous faudra remplir (pour du local) :

  • Hôte : localhost ;

  • Utilisateur : root ;

  • Mot de passe : le mot de passe pour l'utilisateur root ;

  • Nom de la base : test (pour le tutoriel).

Ici, il faut retenir que nous avons un champ caché nommé "etape" pour qu'ensuite, nous puissions vérifier que la page de traitement a bien été appelée depuis celle-ci.
J'en ai également profité pour mettre un peu de CSS dans l'en-tête comme vous avez pu le remarquer.

Le traitement

À présent, nous pouvons embrayer sur la phase finale, c'est-à-dire le traitement des informations envoyées par le formulaire.

Je vous présente le début de notre page traitement.php :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Installation automatisée : 2nde étape</title> <style type="text/css"> body { font-family:Tahoma, Arial, Serif; font-size:14px; } .note { font-size:1.1em; font-style:italic; } .ok { color:green; font-weight:bold; } .echec { color:red; font-weight:bold; } </style> </head> <body> <p>

Vous constatez que j'ai encore mis un peu de CSS : il nous servira plus tard afin de mettre en valeur certaines choses.
Venons-en à notre cher PHP, vous êtes là pour ça, non ? Ça tombe bien, j'en ai à vous faire croquer ! :-°

<?php if(isset($_POST['etape']) AND $_POST['etape'] == 1) { // si nous venons du formulaire alors // on crée des constantes dont on se servira plus tard define('RETOUR', '<br /><br /><input type="button" value="Retour" onclick="history.back()">'); define('OK', '<span class="ok">OK</span><br />'); define('ECHEC', '<span class="echec">ECHEC</span>'); ?>

Comme promis, nous vérifions ici si la superglobale $_POST['etape'] existe et si elle vaut 1.
Nous en profitons pour créer des constantes qui auront leur utilité par la suite.
Comme tout est bon, il ne reste plus qu'à coder le reste dans ce if . :)

D'ailleurs, nous allons commencer à utiliser les fonctions qui aident à la manipulation de fichiers.

Fichier de configuration<?php $fichier = '../sql/config.php'; if(file_exists($fichier) AND filesize($fichier ) > 0) { // si le fichier existe et qu'il n'est pas vide alors exit('Fichier de configuration déjà existant. Installation interrompue.'. RETOUR); } ?>

Nous créons une variable $fichier qui contient le chemin relatif du fichier à créer. Si vous ne vous souvenez plus du concept de chemin relatif et absolu, je vous invite à aller (re)lire ceci.
Dans ce fragment de code, nous testons l'existence du fichier grâce à la fonction file_exists() qui prend donc en argument le chemin du fichier. De plus, s'il existe, nous souhaitons savoir s'il est vide ou non ; autrement dit, si sa taille est supérieure ou non à 0 octet. Une fonction bien pratique nommée filesize() nous permet donc de faire cela.

Si notre condition est remplie, à savoir : si le fichier sql/config.php existe et qu'il n'est pas vide, alors on s'arrête là en utilisant la fonction exit() qui prend en paramètre une chaîne de caractères ou un entier (voir la documentation car il y a des exceptions liées aux versions de PHP).

Pourquoi on s'arrête ?

Si cette condition est remplie, c'est que le script a déjà été exécuté, et donc, pour des raisons de sécurité, nous ne changeons pas les valeurs de connexion à la base sans avoir préalablement supprimé le fichier de configuration.

<?php // on crée nos variables, et au passage on retire les éventuels espaces $hote = trim($_POST['hote']); $login = trim($_POST['login']); $mdp = trim($_POST['mdp']); $base = trim($_POST['base']); ?>

Ici, nous traitons nos superglobales $_POST['...'] en leur passant la fonction trim() qui prend en paramètre la chaîne de caractères : elle sert à retirer les espaces insérés (accidentellement ? :p ) en début et en fin de chaine.

Nous ne sécurisons pas les données envoyées car ce n'est pas l'objectif : il n'y a en plus aucun intérêt à y saisir n'importe quoi, puisque le but est d'installer ses tables et d'assurer une connectivité avec sa base ; et lorsque cela est fait, vous pouvez supprimer les fichiers d'installation.

<?php // on vérifie la connectivité avec le serveur avant d'aller plus loin if(!mysql_connect($hote, $login, $mdp)) { exit('Mauvais paramètres de connexion.'. RETOUR); } // on vérifie la connectivité avec la base avant d'aller plus loin if(!mysql_select_db($base)) { exit('Mauvais nom de base.'. RETOUR); } ?>

Pas grand-chose à expliquer ici, les commentaires sont clairs. Peut-être que le ! peut gêner certain(e)s. Succinctement, le point d'exclamation devant une fonction ou une variable vérifie "le contraire" de la fonction. Dans notre exemple : mysql_connect() sert à se connecter au serveur ; en y plaçant le ! devant, cela se transforme en "si on ne peut pas se connecter au serveur...".
Le RETOUR est une des constantes définies au début du fichier.

<?php // le texte que l'on va mettre dans le config.php $texte = '<?php $hote = "'. $hote .'"; $login = "'. $login .'"; $mdp = "'. $mdp .'"; $base = "'. $base .'"; mysql_connect($hote,$login,$mdp); mysql_select_db($base); ?>'; ?>

Nous compliquons la chose, nous créons une variable $texte dans laquelle nous y écrivons le code PHP à insérer dans notre fichier config.php.
En fait, comme vous pouvez le remarquer ici, nous écrivons du PHP dans du PHP. Regardez bien le code après les apostrophes ' , le code n'est pas "pris en compte" ni exécuté. Il nous suffit alors de concaténer nos variables fraîchement attribuées. Pour ceux qui ont oublié un trou de mémoire, vous êtes vivement invités à consulter la partie du tuto de M@teo21 concernant la concaténation.

<?php // on vérifie s'il est possible d'ouvrir le fichier if(!$ouvrir = fopen($fichier, 'w')) { exit('Impossible d\'ouvrir le fichier : <strong>'. $fichier .'</strong>.'. RETOUR); } // s'il est possible d'écrire dans le fichier alors on ne se gêne pas if(fwrite($ouvrir, $texte) == FALSE) { exit('Impossible d\'écrire dans le fichier : <strong>'. $fichier .'</strong>.'. RETOUR); } // tout s'est bien passé echo 'Fichier de configuration : '. OK; fclose($ouvrir); // on ferme le fichier ?>

La fonction fopen() (pour file open ) nous permet d'ouvrir un fichier, elle prend en paramètre le chemin du fichier (ou une URL) ainsi que le mode d'ouverture ; ici, nous avons seulement besoin d'ouvrir notre fichier config.php en écriture, soit le mode w (pour write ). Extrait de la documentation officielle pour le mode w :

Citation

Ouvre en écriture seule ; place le pointeur de fichier au début du fichier et réduit la taille du fichier à 0. Si le fichier n'existe pas, on tente de le créer.

Notre pointeur de fichier (le pointeur est en quelque sorte votre focus de souris positionné au début) est créé et placé au début grâce à fopen(), nous pouvons donc user de la fonction fwrite() qui prend en paramètres le pointeur et la chaîne de caractères à écrire dans le fichier concerné.

Notre fichier a été correctement écrit, nous pouvons le fermer à l'aide de la fonction fclose() qui prend en paramètre le pointeur.

Nous en avons terminé avec le fichier de configuration. :o

Fichier de requêtes

Il ne nous reste plus qu'à exécuter nos requêtes SQL sur notre base.

<?php $requetes = ''; // on crée une variable vide car on va s'en servir après $sql = file('./base.sql'); // on charge le fichier SQL qui contient des requêtes foreach($sql as $lecture) { // on le lit if(substr(trim($lecture), 0, 2) != '--') { // suppression des commentaires et des espaces $requetes .= $lecture; // nous avons nos requêtes dans la variable } } ?>

Une autre manière de gérer les fichiers en PHP. Nous pouvons utiliser la fonction file() qui elle, nous renvoie le résultat dans un tableau, contrairement à fopen() qui renvoie dans une chaîne de caractères.
Nous utilisons un foreach() pour lire notre fichier. Ensuite nous retirons les éventuels commentaires inclus dans notre fichier car ils sont inutiles pour son exécution. Vous connaissez trim(), mais peut-être pas encore substr() qui renvoie une partie voulue d'une chaîne de caractères en fonction des paramètres que vous lui passez, la position de début ou de fin ainsi que la taille souhaitée (voir la documentation).
Nous concaténons ensuite la variable $requetes avec $lecture .

<?php $reqs = split(';', $requetes); // on sépare les requêtes foreach($reqs as $req){ // et on les exécute if(!mysql_query($req) AND trim($req) != '') { // si la requête fonctionne bien et qu'elle n'est pas vide exit('ERREUR : '. $req); // message d'erreur } } echo 'Installation : '. OK; echo '<br /><span class="note">Note : si le site est en ligne, veuillez supprimer le répertoire <strong>/install</strong> du ftp.</span>'; } // si on passe sur ce fichier sans être passé par la première étape alors on redirige else exit('Vous devez d\'abord être passé par <a href="./index.php">le formulaire</a>.'); ?> </p> </body> </html>

Enfin, la fonction split() nous permet de couper une chaîne en tableau. Nous traiterons alors nos requêtes une par une.
Encore un petit foreach() pour la route qui passe en revue notre tableau.
Ensuite, nous vérifions si nos requêtes peuvent être exécutées et si elles sont "différentes de vide" (dans le cas où nous aurions un fichier base.sql vide).
Tout est bon, message de confirmation.
Sinon, (rappelez-vous) on ne vient pas du formulaire (la première condition du fichier n'est pas remplie), alors on retourne un message d'erreur.
On peut terminer notre page xHTML, le travail est terminé.

Code final<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Installation automatisée : 2nde...

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Installer sa base de données via un formulaire

Prix sur demande