2013-07-02 3 views
0

OOP PHP에서 MVC 프레임 워크를 사용할 때 양식을 제출할 때 페이지를 새로 고쳐야 다음 "elseif"로 이동해야합니다.OOP에서 폼을 제출 한 후 새로 고침하지 않아도 됨 PHP

"$ login-> isConfigFileCreated()"함수가 이제 (클래스 생성자가 실행 된 후에) true를 반환하더라도 이전과 동일한 뷰를 보여 주며 "move on"을 새로 고침해야합니다.

"createConfigFile() 함수"에 문제가 없다는 것을 확실히 알고 있습니다. 이것은 나에게 공통적 인 문제입니다.

public function __construct() 
    { 
     if (isset($_POST["create_config_file"])) 
     { 
      $this->createConfigFile(); 
     } 
     if (isset($_POST["register"])) 
     { 
      $this->register(); 
     } 
    } 
public function isAdminCreated() 
    { 
     $this->db_connection = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME); 
     if (!$this->db_connection->connect_errno) 
     { 
      $checksetup = $this->db_connection->query("SELECT user_email FROM users WHERE user_id = '1';"); 
      if ($checksetup->num_rows == 1) 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 
    } 


public function isConfigFileCreated() 
    { 
     if(defined('DB_HOST') && defined('DB_NAME') && defined('DB_USER') && defined('DB_PASS')) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 


    public function createConfigFile($action) 
    { 
     if ($action == "complete") 
     { 
      $file_content = file_get_contents("db.php"); 
      $file_content .= 'define("CONFIG_DONE", "true");'; 
      file_put_contents("db.php", $file_content); 
     } 
     else 
     { 
      $this->db_connection = new mysqli($_POST['input_db_host'], $_POST['input_db_user'], $_POST['input_db_pass'], $_POST['input_db_name']); 
      if (!$this->db_connection->connect_errno) 
      { 
       $file_content = '<?php'."\n"; 
       $file_content .= 'define("DB_HOST", "'.$_POST['input_db_host'].'");'."\n"; 
       $file_content .= 'define("DB_NAME", "'.$_POST['input_db_name'].'");'."\n"; 
       $file_content .= 'define("DB_USER", "'.$_POST['input_db_user'].'");'."\n"; 
       $file_content .= 'define("DB_PASS", "'.$_POST['input_db_pass'].'");'."\n"; 

       file_put_contents("db.php", $file_content); 
       fclose("db.php"); 
       $login->messages[] = "That's it! You're now ready to kick ass at some image management!"; 
      } 
      else 
      { 
       $this->errors[] = "Wrong database credentials!"; 
      } 
     } 

    } 
+0

시나리오를 확장 할 수 있습니까? 질문하십시오. '당신은 다음 페이지로 넘어가려면 페이지를 새로 고쳐야 만합니다.'elseif '그리고 코드와 관련이 있습니까? – Gordon

+0

네 질문 중 어느 쪽인지 정확히 모르겠다 – Kris

+0

isConfigFileCreated() 함수가 false를 반환하면 코드는 config_file.php를 보여줍니다. 그런 다음 양식을 작성하고 제출 버튼을 누릅니다. 페이지가 다시로드되고 생성자가 실행되고 제출을 누른 것을보고 설정 파일을 만듭니다.이 모든 것은 "$ login = new Login();"줄에서 발생합니다. 생성자가 $ _POST를 확인하기 때문에. 그러나 이것 이후에 ir는 표시 할 내용을 확인하고 config_file.php AGAIN을 표시합니다. 파일이 생성 되었더라도. 하지만 한 번 새로 고침하면 계속 움직입니다. – MathiasJakobsen

답변

1

db.php는 createConfigFiles 함수가 실행되기 전에 포함되어 있습니다.

당신에게 하나는 createConfigFiles 함수에서 변수를 정의 할뿐만 아니라, 파일을 생성해야합니다

public function createConfigFile($action) 
{ 
    if ($action == "complete") 
    { 
     $file_content = file_get_contents("db.php"); 
     $file_content .= 'define("CONFIG_DONE", "true");'; 
     file_put_contents("db.php", $file_content); 
    } 
    else 
    { 
     $this->db_connection = new mysqli($_POST['input_db_host'], $_POST['input_db_user'], $_POST['input_db_pass'], $_POST['input_db_name']); 
     if (!$this->db_connection->connect_errno) 
     { 
      $file_content = '<?php'."\n"; 
      $file_content .= 'define("DB_HOST", "'.$_POST['input_db_host'].'");'."\n"; 
      $file_content .= 'define("DB_NAME", "'.$_POST['input_db_name'].'");'."\n"; 
      $file_content .= 'define("DB_USER", "'.$_POST['input_db_user'].'");'."\n"; 
      $file_content .= 'define("DB_PASS", "'.$_POST['input_db_pass'].'");'."\n"; 

      file_put_contents("db.php", $file_content); 
      fclose("db.php"); 
      define("DB_HOST", $_POST['input_db_host']); 
      define("DB_NAME", $_POST['input_db_name']); 
      define("DB_USER", $_POST['input_db_user']); 
      define("DB_PASS", $_POST['input_db_pass']);; 
      $login->messages[] = "That's it! You're now ready to kick ass at some image management!"; 
     } 
     else 
     { 
      $this->errors[] = "Wrong database credentials!"; 
     } 
    } 

} 

또는 로그인 __construct에서 데이터베이스를 사용하지 않을 경우 당신이 할 수 있습니다 :

require_once("classes/Login.php"); 

$login = new Login(); 

require_once("db.php"); 

두 가지 모두하는 것은 필요하지 않습니다!

1

elseif 모든 것 :

<form method="post" action="" name="create_config_file"> 
     <input type="text" name="input_db_host" required /> 
     <input type="text" name="input_db_name" required /> 
     <input type="text" name="input_db_user" required /> 
     <input type="text" name="input_db_pass" required /> 
     <input type="submit" name="create_config_file" value="Create" /> 
</form> 

그리고 클래스, 기능, 예를 들면 다음과 같습니다

<?php 

require_once("db.php"); 
require_once("classes/Login.php"); 

$login = new Login(); 

**if ($login->isConfigFileCreated() == false) 
{ 
    include("views/config_file.php"); 
} 
elseif ($login->isAdminCreated() == false) 
{ 
    include("views/register.php"); 
}** 
else 
{ 
    include("views/not_logged_in.php"); 
} 

config_file.php보기 파일은 다음과 같다 코드 관련 관리자가 있는지 확인 후

if ($login->isConfigFileCreated() == false) 
{ 
    include("views/config_file.php"); 
} 

if ($login->isAdminCreated() == false) 
{ 
    include("views/register.php"); 
} 

if(!$login->isConfigFileCreated() && $login->isAdminCreated()) 
{ 
    include("views/not_logged_in.php"); 
} 

이는 config_file.php을 포함하고 : 당신이 관련되고 싶지하고 계속 문 경우 다음을 확인하지 않으려면, 다음 바로 다른 제거 여기에 입력 한 후

를 생성하는 업데이트 된 대답 :

그래서 문제가 당신이 작성하는 파일이 이미 스크립트에 포함 된 db.php 것입니다.

따라서 흐름은 require db.php입니다.> 그 파일에 쓰십시오. 즉, 스크립트가 이미로드되었으므로이 파일에 기록한 변경 사항을 사용할 수 없습니다.

여기 해결책은 변경할 수 없으므로 상수 변수를 사용하지 않는 것입니다. 일반 변수를 사용하면 include db.php을 다시 정의하여 이전에 정의 된 변수를 무시할 수 있습니다.

다른 옵션은 이미 포함되어있는 것을 덮어 쓸 수 있도록 정의해야하는 값을 생성 구성 파일에 반환하는 것입니다.

+0

내가 그렇게하면 기능이 실패하고 아무 것도 표시되지 않습니다. – MathiasJakobsen

관련 문제