Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Guilherme Oderdenge

[Resolvido] Arquivo atualizado - Maneira correta

Recommended Posts

Olá!

 

Senhores, fiquei indeciso entre PHP ou AJAX (Javascript), mas acho que se enquadra melhor aqui por dar foco ao PHP... enfim, enfim, enfim.

 

Seguinte, tenho um arquivo de instalação do meu aplicativo em php. Ele é o responsável pelo cadastramento das tabelas, pela recepção das informações de conexão com o banco de dados e, por fim, é responsável também pela inserção da conta administrador root do sistema.

 

Pois bem, a instalação é feita em 2 etapas: a primeira cuida da parte de conexão com o banco, onde solicita do usuário quatro informações: servidor, nome do banco, usuário do banco e senha do usuário do banco. Beleza, uma vez que eu as informações são válidas, é-se automaticamente criado um arquivo chamado "configs.php" onde fica registrado as informações do banco inseridas, para o arquivo que faz a conecta com o banco pegá-la e estabelecer a conexão.

 

A primeira etapa da instalação é finalizada, e, em AJAX e sem atualizar a página - lembrando que quando finalizo a 1ª etapa, o arquivo configs.php é criado corretamente e as tabelas são inseridas com êxito.

 

Agora, iremos adicionar o usuário root. Após a primeira etapa, a div responsável pela configuração de dados de acesso ao banco de dados fica invisível e aparece os inputs para inserir o usuário. Beleza, preencho os dados e o usuário não é inserido no banco.

 

Mas sabe do pior? Eu já sei o motivo e como arrumá-lo, mas não sei se é a maneira correta. Vejam o arquivo que executa a ação de instalação:

 

<?php

   if( !file_exists("../tgo-configs.php") && isset($_POST['server_install']) == true ){

       /** Validações responsáveis pelos inputs antes
        * preenchidos **/

       /** Valida o banco de dados inserido no input **/
       $database = isset($_POST['tgo-database']) ? addslashes($_POST['tgo-database']) : false;

       /** Valida o servidor inserido no input **/
       $server = isset($_POST['tgo-server']) ? addslashes($_POST['tgo-server']) : false;

       /** Valida o usuário do database inserido no input **/
       $db_user = isset($_POST['tgo-db-user']) ? addslashes($_POST['tgo-db-user']) : false;

       /** Valida a senha do usuário do database inserido no input **/
       $db_user_pw = isset($_POST['tgo-db-password']) ? addslashes($_POST['tgo-db-password']) : false;

       /** Contéudo responsável pelo configs.php **/
       $configs_content = "<?php
   /** Nome do Database (MySQL) **/
   define('DATABASE_NAME', '{$database}');

   /** Usuário de acesso ao database (MySQL) **/
   define('DATABASE_USER', '{$db_user}');

   /** Senha de acesso ao usuário do database (MySQL) **/
   define('DATABASE_PASS', '{$db_user_pw}');

   /** Servidor do database (MySQL) **/
   define('DATABASE_SERV', '{$server}');";

       $fp = fopen("../tgo-configs.php", "w");
       $set = fwrite($fp, $configs_content);
       fclose($fp); 
   }

   if( !file_exists("../tgo-configs.php") && $_POST['root_insert'] == 'true' ){
       include("../tgo-defaults.php");
       $db = db::getInstance();

       /** Valida o usuário root do sistema inserido no input **/
       $root_user = isset($_POST['tgo-root-user']) ? addslashes($_POST['tgo-root-user']) : false;

       /** Valida o e-mail do usuário root do sistema inserido no input **/
       $root_user_email = isset($_POST['tgo-root-email']) ? addslashes($_POST['tgo-root-email']) : false;

       /** Valida a senha do usuário root do sistema inserido no input **/
       $root_user_pw = isset($_POST['tgo-root-password']) ? addslashes(sha1($_POST['tgo-root-password'])) : false;

       /** Valida a data de cadastro do usuário root **/
       $root_registered = date("Y-m-d H:i:s");

       $sql = $db->prepare( 'INSERT INTO `tgo_users` (`user_login`, `user_pw`, `user_email`, `user_displayname`, `user_registered`) VALUES (:user_login, :user_pw, :user_email, :user_displayname, :user_registered);' );
       $sql->bindParam( ':user_login', $root_user, PDO::PARAM_STR );
       $sql->bindParam( ':user_pw', $root_user_pw, PDO::PARAM_STR );
       $sql->bindParam( ':user_email', $root_user_email, PDO::PARAM_STR );
       $sql->bindParam( ':user_displayname', $root_user, PDO::PARAM_STR );
       $sql->bindParam( ':user_registered', $root_registered, PDO::PARAM_STR );
       $sql->execute();
   }

 

Observem o trecho a seguir:

        include("../tgo-defaults.php");
       $db = db::getInstance();

 

Aí é onde a conexão é estabelecida, mas como estou utilizando o AJAX, as informações de acesso ao banco que estão no configs.php não chegam até a instância da conexão. O que devo fazer para entregar as informações ao arquivo de conexão?

 

Se eu fizesse um arquivo de configurações secundário onde eu já definisse as informações de conexões a inserção no banco iria normalmente, mas como estou fazendo isso dinamicamente, no way.

 

Se eu fizer a conexão pelo próprio arquivo de instalação utilizando os $_POSTs que eu recebi, a inserção seria feita normalmente. Mas é aí que eu tenho dúvida: isso é correto? Há algum meio de eu fazer o que eu quero sem perder qualidade no meu código?

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, me matei demais pra resolver uma coisa tão simples. O meu problema era esse:

 

    if( !file_exists("../tgo-configs.php") && $_POST['root_insert'] == 'true' ){

 

Conseguem ver ali no file_exists uma exclamação? Pois é. Removi ela e voilà! Peço desculpas pela minha falta de visão e ignorância no conteúdo, de verdade.

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.