Bonjour,
Je n'ai pas vraiment de soucis mon installation fonction bien, la chose que je veut savoir c'est comment transphérer les variable de connexion a la bdd vers le fichier config du site.
Voici un bout de mon code install.php:
$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']) : '';
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(' Imopsible de ce connecter a la BDD');
}
//si on retourne un résultat alors on lace l'installation
if($db != null){
//Structure de la table `categories`
$db->query('CREATE TABLE IF NOT EXISTS `categories` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cat_name` varchar(30) NOT NULL,
`slug` varchar(30) NOT NULL,
`date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3');
//Contenu de la table `categories`
$db->query('INSERT INTO categories SET id="1", cat_name="Catégorie par défaut", slug="categorie-par-defaut", date = now()');
}
j'imagine que c'est avec fopen etc... mais extraire des données d'un formulaire et les envoyez vers un fichier je ne l'ai jamais fais.
j'attend vos conseils merci !!
Bonjour,
tu peux faire qqch du genre :
$content = [];
$content[] = '<?php';
$content[] = 'define(\'DBHOST\',\'' . $dbhost . '\');'; //pour l'avoir en constante
$content[] = '$CONFIG[\'dbhost\'] = \'' . $dbhost . '\';'; //pour l'avoir en tableau
$content[] = '$CONFIG::$dbhost = \'' . $dbhost . '\';'; //pour le mettre dans un objet statique en direct
$content[] = '$CONFIG::set_val(\'dbhost\',\'' . $dbhost . '\');'; //pour le mettre dans un objet statique via un setter
file_put_contents('path/to/app/config.php',implode("\r\n",$content)); // attention ca écrase
mais je te conseille avant de creer ton fichier de vérifier que les codes soient correct et surtout qu'il ne contiennent pas de code qui pourrait faire du mal à ton app.
je vais tester ton code !!
Mais qu'entend tu par faire du mal ? je dois vérifier toute les variable comme je le ferais avec un forum etc... genre !preg_match('alphanumeric');
etc...
Bonjour,
Si tu demandes le user en saisie et qu'une personne malveillante écrit :
Toto';unlink(FILE);'
Je te laisse tester ;)
Alors là on est sur de l'installation donc généralement c'est l'admin, mais bon je préviens.
Le mieux etant de les mettre en base64 comme ca tu risques moins.
Salut,
Je ne comprends pas du tout ton fichier et peut-être que c'est moi, mais ça ne choque personne que tes informations de BDD passent en post dans ton fichier ? N'importe quelle personne pourrait récupérer les informations de bdd et se connecter dessus.
Il te faut bien un fichier de stockage des infos...
Et la il fait une page d'installation pour demander le serveur le mot de passe et tout plutot que dire au mec qui fait l'install tu vas dans le dossier modifier tel ou tel fichier.
En soit c'est mieux pour l'utilisateur.
EDITE
Je viens de comprendre mon erreur
comme ça, ça marche mieux
$config = [];
$config[] = '<?php ';
$config[] = 'define(\'DBHOST\', \'' . $dbhost . '\');';
$config[] = 'define(\'DBNAME\', \'' . $dbname . '\');';
$config[] = 'define(\'DBUSER\', \'' . $dbuser . '\');';
$config[] = 'define(\'DBPSWD\', \'' . $dbpswd . '\');';
file_put_contents('../lib/config.php', implode("\r\n",$config) , LOCK_EX);
FIN EDITE
bonjour eltharin je viens de tester ça :
$config = [];
$config[] = '<?php ';
$config[] = define('DBHOST', $dbhost);
$config[] = define('DBNAME', $dbname);
$config[] = define('DBUSER', $dbuser);
$config[] = define('DBPSWD', $dbpswd);
file_put_contents('../lib/config.php', implode("\r\n",$config) , LOCK_EX);
die('ok');
ça ne me retourne que
<?php
1
1
1
1
bonjour galyb il faut ce connecter a la BDD avant d'écrire dedans si je récupère pas ces données je ne vois pas comment je peut faire.
puis si on suit la logique un fichier d'installation ne sert qu'une seul fois ensuite on le supprime, il faudrait être au taquer pour savoir a quel heure quel jour etc.... j'intallerais mon APP.
Ensuite l'installation ce passe dans sa base de donnée a lui et je vérifie avant si les donnée sont valide si on retrouve une base avec les identifiants retourner par le formulaire.
je peut toujours prévoir un jeton de sécuriter uniq CSRF pour être sur que c'est lui et pas un autre.
Désolé j'étais dans ma logique développeur ou pour moi c'est évident qu'il faut éditer un fichier. My Bad ^^.