2009-07-01 21 views
2

topic.phpあなたは私がビュー/ topic.phpでいくつかの醜いコードを持って見ることができるように別のファイルに

$id = isset($_GET['id']) ? intval($_GET['id']) : 0; 

$query = mysql_query("SELECT * FROM topics WHERE id = $id"); 
$row = mysql_fetch_assoc($query); 


$title = htmlspecialchars($row['title']); 
$text = bbcode($row['text']); 

ビュー/ topic.php

<h1><?=$title?></h1> 
<p><?=$text?></p> 

<h1>Replies</h1> 

$q = mysql_query("SELECT * FROM replies WHERE topic_id = $id"); 
while ($r = mysql_fetch_array($q)) { 
$text = bbcode($r['text']); 
$date = $r['date']; 
$poster = $r['poster']; 
$edited = $r['edited']; 

echo "<p>$text</p>";....... 
} 

をコードしてください。どういうわけか、topic.phpに保存できますか?ウェブデザイナーがこのすべてに対処しなければならないのは楽しいことではありません。

ありがとうございます!

+0

あなたが望むものを明確にすることはできますか?コードを単一の場所にのみ存在させたいですか? –

+0

はいthats正しい、私は1つのファイルにコードを保持したい –

+0

私はregister_globalsを持っていない、ちょうどチェックした –

答えて

3

viewtopic.phpのコードをtopic.phpの関数に入れることができます。

すでにviewtopic.phpにtopic.phpが含まれているようですが、そうでない場合は、そのようにしたいと思うでしょう。例えば

、あなたはtopic.phpするためにこれを追加します。あなたは本当に簡単に独自に作成することができ、出力バッファリングを使用して

<h1><?=$title?></h1> 
<p><?=$text?></p> 

<h1>Replies</h1> 

ViewTopic($id); 

} 
+0

うわーはそれを考える。非常にうれしい –

+1

元のコードとこの回答にはSQLインジェクションの脆弱性が含まれています。誰でもID(悪意のあるSQLを含む)として必要なものを渡すことができ、コードがそれを実行します。 http://stackoverflow.com/questions/1973/what-is-the-best-way-to-avoid-sql-injection-attacks –

+0

良いキャッチを参照してください。 SQLクエリで$ _GETを使用する場合は注意が必要です。 –

1

あなたは、必要なものを返す関数にそのコードをすべて投げることができます。関数を呼び出すecho func()

0

function ViewTopic($id) { 

    $q = mysql_query("SELECT * FROM replies WHERE topic_id = $id"); 
    while ($r = mysql_fetch_array($q)) { 
    $text = bbcode($r['text']); 
    $date = $r['date']; 
    $poster = $r['poster']; 
    $edited = $r['edited']; 

    echo "<p>$text</p>";....... 

} 

そして、ここではviewtopic.phpは、次のようになります小さなテンプレートエンジンはより良いロジック/レイアウト分離を実現します。

function renderView($viewFile, $data) { 
    ob_start(); 
    extract($data); 
    require($viewFile); 
    return ob_get_clean(); 
} 

上記のコードは少し趣味のプロジェクトのものですが、完全ではありませんが、概念の良い証拠です。これは、$ dataハッシュマップからキー/値のペアを抽出して、現在のスコープで利用できるようにすることです。 $ data = array( "name" => "Kim");ビュー内で$ nameにアクセスできるようになります。

これはすべて出力バッファリング内で行われ、出力で必要なことを行うことができます。キャッシングを実装し、それを使って電子メール(余分な文字列の連結がない)とそのようなものをレンダリングすることができます。