2011-06-21 14 views
1

ホームページや他のページのトピック情報を表示するために使用した標準的なコードシーケンスがあります。私はインクルードファイルにそれを投げて、複数のページを修正する必要はありません。この問題は、while文で発生することがあります。これは、ソートのための情報を提供する以前のクエリがあったことを意味します。ファイルを複数回インクルードする方法

whileステートメントでコードが未処理の場合、それは必要に応じて動作し、前のクエリのコードに複数のIDが提供されている場合は、複数の結果が表示されます。ただし、このコードがインクルードに含まれている場合は、結果が1つしか表示されません。インクルードファイルは一度しか実行されないので、私は推測します。どのように私の生のコードと同等のインクルードファイルを提供するのですか?

は、このようにそれをしないでください

//outside query 
     while($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
     { 
     $topic_id=htmlspecialchars($row['topic_id'], ENT_NOQUOTES, 'UTF-8'); 
//code to display topics 
     include('display_topics.php'); 
     } 

生のコード

//outside query 
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
{ 
//code to display topics 
$sql = "SELECT * FROM topic WHERE id=?"; 
$stmt = $conn->prepare($sql); 
$stmt->bindValue(1,topic_id, PDO::PARAM_INT); 
$result=$stmt->execute(); 
} 

while($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
{ 
//yada yada 
+2

機能として作成する - その目的の1つは、(おそらく)異なる引数を使用して複数回呼び出すことができるコードスニペットを実装することです。つまり、「コードの再利用」です。 – LazyOne

+0

display_topics.phpを再構成して、実行するだけではなく、操作を実行するための関数を提供することはできますか? – qid

答えて

12

を含めます。

それはを行うにははるかに良いですが含まれ、何が必要ないということでfunctionを宣言するために:

function display_topics($topic_id) 
{ 
    .... 
} 

は、ループ内でその関数を呼び出し、そしてそれに必要なすべてのデータを渡します。

+0

ええ、これは行くより良い方法です:) – meteorainer

+0

あなたの時間のおかげで、偉大な作品ペッカ! – Scarface

+0

Curses!簡潔な答えで再び沸騰! – cwallenpoole

1

通常のようにファイルをインクルードしますが、繰り返しコードを関数に入れます。次に、コードを追加したい場所を関数を呼び出します。

1

その言葉は、それがあなたの考えであるとは思えません。

一般に、includeの使用はそのように使用すべきではありません。それが神が機能(あるいは神学的に傾けられていないならば、Ada Byron)を発明した理由です。

は、代わりにこれを試してみてください:

function execute_row($row, $conn) 
{ 
    $topic_id=htmlspecialchars($row['topic_id'], ENT_NOQUOTES, 'UTF-8'); 
    $sql = "SELECT * FROM topic WHERE id=?"; 
    $stmt = $conn->prepare($sql); 
    $stmt->bindValue(1,topic_id, PDO::PARAM_INT); 
    return $stmt->execute(); 
} 

次に、あなたのwhile文で:

while($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
{ 
    $result = execute_row($row, $conn); 
} 

多田!そして、最も重要な点は、コードを小さくして読みやすくし、解析時間を短縮できることです。

+0

私は関数を使うべきであることに同意しますが、この場合はインクルード内にあります。この関数は約7つの異なるページに再現されているので、インクルードを考えた理由もあったので、これらのページをすべて修正する必要はなく、ただ修正することができました。 – Scarface

+1

@Scarfaceあなたは1つの場所の場所に機能を保持します。あるいは、7つの類似しているが異なっている場合、次のステップは、抽象的な関数を作成して、7つの目的すべてに対応できるようにすることです。 –

+0

あなたはOOPタイプのテクニックを指していますか? – Scarface

関連する問題