0

データベースのコンテンツを表示するクラスを作成しました。page_id でフィルタリングしたいので、コンテンツを正しい page_id にリンクできます。だから私はそれを $_GET で動作させようとし始めましたが、これまでのところエラーしか出ませんでした..

(私のメニュー リンクの項目は ?page=x, x = id を与えます)

これまでの私のクラス:

include_once('./includes/config.php');
class Content {

global $page;    
public $id;
public $page_id;
public $title;
public $content;
public $position;



var $conn;

function Content()
        {
                $this->conn = mysql_connect(Config::DB_HOST, Config::DB_USER, Config::DB_PASS);
                mysql_select_db(Config::DB_NAME, $this->conn);
        }


function get_content_articles($page)
{
    $sql = "SELECT id, page_id, title, content, date, position FROM articles ORDER BY id, position WHERE page_id = ".$page." ";
    $result = mysql_query($sql, $this->conn);

                if ( !$result )
                        return false;
    $fetch_all = array();

    while($article = mysql_fetch_assoc($result))
    $fetch_all[] = $article;

return $fetch_all;
}


public function display_content($page) {
    $this->article = $this->get_content_articles($page);
    $content = "";
    foreach ( $this->article as $article)   

    $content .= '
        <div class="blok">
        <h2>
        </br>
        '.$article['title'].'</h2>
        </br>
        '.$article['content'].'
        </br>
        '.$article['date'].'
        </div>
    ';

    return $content;
  }
}

クラスの実行方法:

    include("classes/content.class.php");


$content = "";
$content = new Content();

echo $content->display_content($_GET['page']); 

必要に応じてデータベース テーブル:

|ID| |page_id| |タイトル| |コンテンツ| |日付| |位置|

これがおそらく適切な方法ではないことはわかっているので、これを行うためのヒントを教えてもらえますか? 私はクラスにかなり慣れていません。


わかりました..コードを少し変更し、グローバル $page をクラスから削除し、クラスを実行するページに置き換えました。

include("classes/content.class.php");

global $page; 
$page = $_GET['page'];
$content = new Content();
echo $content->display_content($page); 

これにより、次のエラーが発生します: 警告: 42 行目の ... content.class.php の foreach() に無効な引数が指定されました

4

3 に答える 3

0

クラス内で次の lin を使用することはできません。

グローバル $page;

これは必要ありません。コメントアウトするだけで機能します。

于 2013-05-01T13:15:09.003 に答える
0

わかりました、問題はglobal $page、クラス定義で使用していることです。$page をグローバルにしたい場合global $pageは、クラスではなくメソッドの先頭に配置する必要があります。

于 2013-05-01T13:03:33.293 に答える
0

「無効な引数が指定されました...」エラーは、foreach ループで渡す変数が配列ではないことを意味します。コードを見ると、クエリにエラーがあることがわかります。あなたのクエリは問題ないようですので、MySQL が理解できない目に見えない文字がどこかにあると思います。その後、メソッドは false を返し、foreach ループは引数として「false」を取ることができません。

試してみるmysql_query($sql, $this->conn) or die(mysql_error())ことをお勧めします (これは、テーブルの構造に関する情報が表示される可能性があるため、根本的なデバッグにのみ使用することをお勧めします)。これにより、クエリが試行され、エラーがある場合はエラーが出力されます。

(申し訳ありませんが、これについて別の回答を追加しましたが、コメントにはテキストが長すぎます)

于 2013-05-03T03:51:55.250 に答える