2012-11-04 74 views
0

我有麻煩從我的變量中通過使用PHP類文件通過Web窗體提交的值。無法從Web窗體獲取值到要顯示的PHP類

這裏是我的網頁的結構:

  • 訂單頁
  • Process.php頁
  • book.php中頁

我可以很容易地輸入的用戶數據(在訂單表單頁面上),處理並顯示在Process.php頁面上。問題是我必須創建一個Book類並使用Book類打印數據的詳細信息。

我有一個空的構造函數打印出「創建」,所以我知道我的構造函數被調用。我也能夠打印「標題」一詞,所以我知道我可以使用Book類打印到屏幕上。

我的問題是我無法在Book類中的變量中獲取值。

這裏是我的變量聲明:

private $title; 

這裏是我的printDetails功能:

public function printDetails() { 
    echo "Title: " . $this->title . "<br />"; 
    } 

,這裏是我的書類的新實例:

$bookNow = new book; 

這裏是我的獲取和設置功能:

function __getTitle($title) 
{ 
    return $this->$title; 
} 

    function __setTitle($title,$value) 
{ 
    $this->$title = $value; 
} 

我確實還有其他四個變量,我也希望顯示。每個人都有自己的變量聲明,printDetails中的一行,以及他們自己的setter和getter。

最後,我還在我的過程PHP中調用了Book類。它看起來像這樣:

function __autoload($book) { 
     include $book . '.php'; 
    } 
    $bookNow = new book(); 

任何幫助,非常感謝。它一定是非常小的東西(我希望)。

+0

你是怎麼稱呼__setTitle的? – GBD

+0

'$ bookNow =新書();' - 添加圓括號?你說這個類是在'Book.php'中。那麼也許'book()'也應該是'Book()'? – Stefan

+0

@GBD你是如何調用__setTitle的? 我認爲這是我的問題。我有一個收集數據的表單,我可以將它顯示在process.php中。但是,這些價值觀並不會「移動」到書本上。 任何想法如何在書類中調用setTitle? – kentrenholm

回答

1

_setTitle()應該只有一個參數,並刪除賦值語句(也爲getTitle())第二$字符,像這樣:

function _setTitle($title) 
{ 
    $this->title = $title; 
} 

現在這樣稱呼它:

$title = !empty($_POST["title"]) ? $_POST["title"] : NULL; 
$bookNow->_setTitle($title); 

除非你正在處理魔術功能,否則不要使用雙下劃線。我認爲這是不好的做法。還要檢查你的類的情況 - 即使PHP對案件非常輕鬆。如果你的類文件被稱爲「Book.php」,那麼你的構造函數應該用大寫來調用,以確保(和括號可能)。

編輯:好的,這是我做的類,它工作得很好,我測試了它:

class Book { 

    private $title; 

    function __construct() {} 

    function _getTitle($title) { 
     return $this->title; 
    } 

    function _setTitle($title) { 
     $this->title = $title; 
    } 

    public function printDetails() { 
     echo "Title: " . $this->title . "<br />"; 
    } 

} 

確保您在POST得到的值,如:

$title = !empty($_POST["title"]) ? $_POST["title"] : 'No Title Found!'; 
$bookNow = new Book(); 
$bookNow->_setTitle($title); 
$bookNow->printDetails(); 

注意:不要把上面的語句放在'book.php'類文件中。

如果您的表單提交出錯,您將看到'找不到標題',否則您將看到正確的標題。

+0

謝謝。我不知道它是不是工作,因爲它是通過process.php頁面前book.php非常感謝您的時間和才華。希望我能做到。 – kentrenholm

+0

@kentrenholm如果'book.php'是你的類文件,而不是把'$ bookNow = new book()'和'$ bookNow-> setTitle()'等語句放入這個文件中。但無論哪種方式,自動加載將包含process.php廣告中的所有內容,因此您將獲得POST值。 – Stefan

+0

欣賞你的後續行動。再次嘗試。也許這是因爲我正在接受process.php文件中的值,並進行驗證。 。 。我真的不知道。所有的聲音邏輯和建議都很有意義。對不起,佔用你的時間。 – kentrenholm