2016-04-15 14 views
1

私のindex.phpページには、ユーザをホームページにデフォルト設定するこのコードがあります。私のリソースクラスのgetHomePageTilesメソッドを呼び出します空のオブジェクトを提供するPHPクラス

<?php 
require_once ("config.php"); 
$action = isset($_GET['action']) ? $_GET['action'] : ""; 
switch ($action) { 
    case 'seeAll': 
    seeAll(); 
    break; 
    case 'viewResource': 
    viewResource(); 
    break; 
    default: 
    homepage(); 
} 

function homepage() { 
    $results = array(); 
    $learnData = Resource::getHomePageTiles('learn'); 
    $practiceData = Resource::getHomePageTiles('practice'); 
    $elseData = Resource::getHomePageTiles('else'); 
    $results['learn'] = $learnData; 
    $results['practice'] = $practiceData; 
    $results['else'] = $elseData; 
    $results['pageTitle'] = "Couch To Code"; 
    require_once ("templates/homepage.php"); 
} 

。 ここにResourceクラスとgetHomePageTilesメソッドのコードを示します。

class Resource { 
    public $id = null; 
    public $title = null; 
    public $summary= null; 
    public $url = null; 
    public $content = null; 
    public $category = null; 
    public $is_free = null; //???? 
    public $is_featured = null; 
    public $is_favorite = null; 
    public $date_created = null; 

    public function __construct($data) { 
    if (isset ($data['id'])) $this->id = (int) $data['id']; 
    if (isset ($data['title'])) $this->title = $data['title']; 
    if (isset ($data['summary'])) $this->summary = $data['summary']; 
    if (isset ($data['url'])) $this->url = $data['url']; 
    if (isset ($data['content'])) $this->content = $data['content']; 
    if (isset ($data['category'])) $this->category = $data['category']; 
    if (isset ($data['is_free'])) $this->is_free = (int) $data['is_free']; 
    if (isset ($data['is_featured'])) $this->is_featured = (int) $data['is_featured']; 
    if (isset ($data['is_favorite'])) $this->is_favorite = (int) $data['is_favorite']; 
    if (isset ($data['date_created'])) $this->date_created = date("Y-m-d H:i:s"); 
} 

public static function getHomePageTiles($type) { 
    global $DB_HOST; 
    global $DB_NAME; 
    global $DB_USERNAME; 
    global $DB_PASSWORD; 
    $conn = new mysqli($DB_HOST, $DB_USERNAME, $DB_PASSWORD, $DB_NAME); 
    if (mysqli_connect_errno()) { 
    printf("Connection to the database failed: %s/n", $mysqli -> connect_error); 
    exit(); 
    } 
    $sql = "SELECT * FROM resources WHERE category = ? ORDER BY position ASC LIMIT 4;"; 
    if ($st = $conn->prepare($sql)) { 
    $st->bind_param("s", $type); 
    $st->execute(); 
    $list = array(); 
    while ($row = $st->fetch()) { 
     $resource = new Resource($row); 
     $list[] = $resource; 
    } 
    $conn = null; 
    return $list; 
    } else { 
    printf("Errormessage: %s\n", $conn->error); 
    } 
} 

マイHomepage.phpファイルは、それ

<?php 
    foreach ($results['learn'] as $learnTile) { 
    print_r($learnTile); 
?> 
    <div class="col-md-3 col-xs-6 featured"> 

     <a href=".?action=viewResource&amp;resourceId= <?php echo($learnTile->id)?> "> 
     <img src="#" class="thumbnail img-responsive"> 
     </a> 
    </div> 
<?php } ?> 
コードは、リソースオブジェクトの正しい数を引いている

に次のコードを持っていますが、何かが私のリンクため(に、絞る予定ですhomepage.php)がResourceオブジェクトからIDを取得していない。

私はデバッグするために($ learnTile)、空のオブジェクトや配列を取得しています。

Resource Object ([id] => [title] => [summary] => [url] => [content] => [category] => [is_free] => [is_featured] => [is_favorite] => [date_created] =>) Resource Object ([id] => [title] => [summary] => [url] => [content] ... 

どこが間違っていますか?私のコンストラクタは動作しませんか?明らかに、リソースオブジェクトは、元のプロパティ定義からのヌル値をヌルに引き上げています。 私は数日間この1つに困惑していますので、助けや指導をいただければ幸いです。ありがとう!

+0

Resourceクラス内から新しいリソースを作成していますか? "$リソース=新しいリソース($行);"それは私には間違っているようです。 –

+0

グローバルを削除します。コードオブジェクトは私の友人を指向しました;) –

+0

フェッチする前に '$ st-> bind_result(...')が見つからない場合 – Alex

答えて

1

$rowの中には決して配列がありません。マニュアルを参照してください:php.net/manual/en/mysqli-stmt.fetch.phpこれはブール値だけを返します。準備を使用するときは、結果をバインドする必要があります。

+0

はいexcatlyあなたの問題はstmt-fetchがbooleanを返します –

+0

ありがとう!私の問題をここで解決する方法の詳細を見つけることができました:http://stackoverflow.com/questions/994041 /どのように - 私の - 置く - 結果 - の - mysqli - 準備 - ステートメント - アソシエート - arr –

関連する問題