當我在OOP PHP中使用MVC框架時,我提交了一個表單,我必須刷新頁面才能繼續下一個「elseif」。避免在OOP提交表單後刷新PHP
即使函數「$ login-> isConfigFileCreated()」現在返回true(在類構造函數執行後),它將顯示與之前相同的視圖,並需要刷新以「繼續前進」。
我知道這個問題不在「createConfigFile()函數」中。這對我來說是一個普遍的問題。
<?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視圖文件看起來是這樣的:
<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>
和類,與功能,看起來像這樣的例子:
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!";
}
}
}
您可以擴展您的場景和問題嗎? '你是什麼意思'我必須刷新頁面才能繼續下一個「elseif」'代碼與它有什麼關係? – Gordon
是的,我不完全確定你的問題是 – Kris
如果函數isConfigFileCreated()返回false,代碼顯示config_file.php。然後我填寫表格,然後按提交。頁面重新加載,constructer運行,看到我按下提交,並創建配置文件。所有這一切發生在「$ login = new Login();」因爲constructer檢查$ _POST。 但是畢竟這樣,ir會檢查顯示內容,並顯示config_file.php AGAIN。即使該文件已被創建。 但是當我刷新一次,它「繼續前進」。 – MathiasJakobsen