Bonjour,

Pour suivre ceci vous devrez déjà savoir comment utilisé la base de donnée et avoir des notions basiques d'écriture de fichiers pas vraiment besoin de sécurité puisque vous n'allez pas gardez ce fichier éternellement le but étant de le supprimer a la fin de l'installation en toutes logique, et que la logique sois la même que votre site web, par exemple si vous utilisez bcrypt pour les mots de pass n'utilisez pas sha1 pour le premier utilisateur créer pendant l'installation ça n'aurai pas de sens.


Alors on va commencer par réer le formulaire il devra ressemblé a ça ici on ne créer pas de base de donnée juste les tables quelle contiendra :


<form action="" method="post">

   <h3> Vos donnee personnel pour votre profil</h3>

   <input type="text" name="username" placeholder='<?= isset($_POST['username']) && !empty($_POST['username']) ? $_POST['username'] : 'username' ; ?>'><br /><br />

   <input type="email" name="email" placeholder='<?= isset($_POST['email']) && !empty($_POST['email']) ? $_POST['email'] : 'email' ; ?>'><br /><br />

   <input type="password" name="password" placeholder="password"><br /><br />

   <input type="password" name="password_confirm" placeholder="password confirm"><br /><br />

   <h3> Identifiant de la base de donnee </h3>

   <input type="text" name="dbhost" placeholder='<?= isset($_POST['dbhost']) && !empty($_POST['dbhost']) ? $_POST['dbhost'] : 'localhost'; ?>'><br /><br />

   <input type="text" name="dbname" placeholder='<?= isset($_POST['dbname']) && !empty($_POST['dbname']) ? $_POST['dbname'] : 'nom de la base de donnee'; ?>'><br /><br />

   <input type="text" name="dbuser" placeholder='<?= isset($_POST['dbuser']) && !empty($_POST['dbuser']) ? $_POST['dbuser'] : 'username'; ?>'><br /><br />

   <input type="password" name="dbpswd" placeholder="dbpswd"><br /><br />

   <button type="submit" name="install">enyoyez</button>
</form>


Ensuite la partie script pour géré tout ça (je met le minimum vous devrez faire vos propre dump SQL) :


on initialise les variable comme dans tout formulaire :

   $dbhost = isset($_POST['dbhost']) && !empty($_POST['dbhost']) ? trim($_POST['dbhost']) : '' ;
   $dbname = isset($_POST['dbname']) && !empty($_POST['dbname']) ? trim($_POST['dbname']) : '' ;
   $dbuser = isset($_POST['dbuser']) && !empty($_POST['dbuser']) ? trim($_POST['dbuser']) : '' ;
   $dbpswd = isset($_POST['dbpswd']) && !empty($_POST['dbpswd']) ? trim($_POST['dbpswd']) : '' ; 

   $username = strip_tags(trim($_POST['username']));
   $pass = trim($_POST['password']); 
   $password_confirm = trim($_POST['password_confirm']); 


On vérifie que la base de donnée existe bien avec les valeurs du formulaire

      try{
           $db = new PDO('mysql:host=' . $dbhost . ';dbname='.$dbname,$dbuser,$dbpswd,array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8' )); 
           $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);//ou FETCH_ASSOC
           $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //exception or WARNING
       }catch(Exception $e){
           echo $e->getMessage(); 
           die('&nbsp;Imopsible de ce connecter a la BDD');   
       }


et ensuite on créer le fichier, le fichier dois existé mais rester vide mon exemple c'est config.php ne mettez pas non plus <?php en début de fichier d’ailleurs tant que votre fichier php ne contiens que du php a l’intérieur ne fermez jamais la balise ceci évite les erreur avec les header et ne laissez pas d'espace devant espace = univers<?php


//on vérifie que $db et != de null qu'on a bien une base portant le nom choisis et l'indentifiant

$config = [];
			// tout ceci sera écrit dans le fichier config.php ce sera un fichier a inclure pour votre objet pdo 
           $config[] = '<?php ';
           $config[] = 'define(\'DBHOST\', \'' . $dbhost . '\');';
           $config[] = 'define(\'DBNAME\', \'' . $dbname . '\');';
           $config[] = 'define(\'DBUSER\', \'' . $dbuser . '\');';
           $config[] = 'define(\'DBPSWD\', \'' . $dbpswd . '\');';


           if(file_exists('lib/config.php')){// si le fichier existe bien on peut écrire dedan 

               file_put_contents('lib/config.php', implode("\r\n",$config) , LOCK_EX);

           }else{

               die('ce fichier est introuvable');

           }


           sleep(5); // on laisse un temps d'attente 


Ensuite pour créer l'utilisateur pendant l'installation comme la table n'étant pas encore créer vous ne devrez pas faire comme d’habitude pour l'envoie d'un article etc...


Vous devez d'abord créer la table en question


           //Structure de la table `users`
           $db->query("CREATE TABLE IF NOT EXISTS `users` (
             `id` int(11) NOT NULL AUTO_INCREMENT,
             `username` varchar(255) DEFAULT NULL,
             `password` varchar(255) DEFAULT NULL,
             `description` varchar(255) DEFAULT NULL,
             `date_inscription` datetime DEFAULT NULL,
             `lastconect` datetime DEFAULT NULL COMMENT 'date dernière connexion',
             `email` varchar(255) DEFAULT NULL,
             `userurl` varchar(255) DEFAULT NULL,
             `avatar` varchar(255) DEFAULT NULL,
             `confirmed_token` varchar(255) DEFAULT NULL,
             `confirmed_at` datetime DEFAULT NULL,
             `reset_token` varchar(255) DEFAULT NULL,
             `reset_at` datetime DEFAULT NULL,
             `remember_token` varchar(255) DEFAULT NULL,
             `activation` tinyint(1) DEFAULT '1',
             `authorization` int(1) DEFAULT '1',
             `slug` varchar(255) DEFAULT 'membre',
             PRIMARY KEY (`id`)
           ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8");


Ensuite le contenu, pas besoin de requête préparé puisque personne n'aura accès a ce fichier.


//Contenu de la table `users`
           $db->query("INSERT INTO users SET 
           id=1, 
           username='$username', 
           password='$password', 
           description = NULL, 
           date_inscription=now(), 
           lastconect = NULL, 
           email='$email', 
           userurl = NULL, 
           avatar=NULL, 
           confirmed_token=NULL, 
           confirmed_at=now(), 
           reset_token=NULL, 
           reset_at=NULL, 
           remember_token=NULL, 
           activation='1', 
           authorization='4', 
           slug='admin'");


Moi j'ai une table paramètre le mieux est quelle soit déjà remplie comme ça vous pourrez administré votre site dès le départ donc quand vous avez fini votre dev en local n’effacer que les truc non essentiel laissez par exemple un article par défaut ou un commentaire etc... histoire d'avoir un affichage de base.


//Structure de la table `parameters`
           $db->query('CREATE TABLE IF NOT EXISTS `parameters` (
             `param_id` bigint(20) unsigned NOT NULL COMMENT "no A_I",
             `param_name` varchar(255) NOT NULL,
             `param_value` longtext NOT NULL,
             `param_activ` varchar(3) DEFAULT "oui",
             PRIMARY KEY (`param_id`)
           ) ENGINE=InnoDB DEFAULT CHARSET=utf8');

//si vous devez faire des modification de dernière minutes ce sera ici moi j'ai pas mis d'auto increment 
 $db->query('INSERT INTO `parameters` (`param_id`, `param_name`, `param_value`, `param_activ`) VALUES
           (1, "slogan", "Ceci est un site en beta", "oui"),
           (2, "sitename", "Que de boulot PIUF !!!", "oui"),
           (3, "pagination article", "10", "oui"),
           (4, "comment", "1", "oui"),
           (5, "pagination forum", "3", "oui"),
           (6, "themeforlayout", "hardline", "oui"),
           (7, "secretkey", "", "oui"),
           (8, "publickey", "", "oui")');



Une fois l'installation réussit vous faites une redirection et un die on ne veut pas rester sur le fichier install, et ensuite vous supprimer le fichier install.php.


D'une manière général j'aime bien les tuto mais il sont toujours basique et ne vous explique au final rien de concret surtout si vous chercher une info précise comme un système de tags pour un forum ou le vu non vu, dans ma pratique je suis passer par pas mal de galère et je vous donnerez toutes les infos utile que je connait.


Le prochain tuto sera comment créer un cookie de session pour rester connecter même si vous fermez le navigateur ou quitté le site.


Le mots de la fin, pelleteuse !!

419 vues
04 juin 2022 à 16:47 (Édité)
Cette pub permet au site de vivre ...

Commentaire

Tu veux participer ?
Alors connecte toi ou inscris toi et viens participer !
Cette pub permet au site de vivre ...