2011-12-15 17 views
0

私は私のウェブサイトに個人的なメッセージシステムをphp/sqlだけで使っています。実際にはjqueryを使って表示するのが面倒です。 message_idmessage_frommessage_tomessage_topicmessage_subjectmessage_status:dbがフィールドとして持っています。私はmessage_topicを示しています方法は以下の8回繰り返している:個人的なメッセージのリストを表示

echo '<table><tr><td>'; 
    retrieve_msg_topic($result); 
echo '</td></tr>'; //of course I won't make 8 tables!!! 

と呼ばれる関数は次のようになります。これまでのところ

function retrieve_msg_topic($result) 
{ 
    if($row = mysql_fetch_assoc($result)) 
    { 
    echo $row['usernombre']; 
    $message_topic = stripslashes($row['message_topic']); 

    echo '<div id="msg'.$row['message_id'].'">'; 
    echo $message_topic; 
    echo '</div>'; 
    //this will return: <div id="msgN">message topic (title, commonly subject)</div> 
    } 
} //end function retrieve msg topic 

私はに送信された最後の8つのメッセージとテーブルのリストを持っていますユーザー。次の行は、ページング(次/前のページ)用に予約されています。その後、Outlookで表示されているように、リストから選択したメッセージを示す別の行が表示されます。ここに私の頭痛があります。

function retrieve_msg_content($result) 
{ 
    if($row = mysql_fetch_assoc($result)) 
    { 
    echo '<script type="text/javascript"> 
     $(document).ready(function(){ 
     $("#msg'.$row['message_id'].'").click(function(){ 
        $(".msgs").hide(1000); 
      $("#'.$row['message_id'].'").show(1000); 
      }); 
     }); 
     </script>'; 

    echo '<div class="msgs" id="'.$row['message_id'].'" style="display: none">' 
     .$row['message_subject']. 
     '</div>'; 
    } 
    /* This function returns: 
    // <script type="text/javascript"> 
    // $(document).ready(function(){ 
    // $("#msgN").click(function(){ 
    // $(".msgs").hide(1000); 
    // $("#N").show(1000); 
    // }); 
    // }); 
    // </script> 
    // <div class="msgs" id="N" style="display: none">Message subject (body of message)</div> 
    */ 
} //end function retrieve msg content/subject 
:この時間はこのようなものになるだろう

echo '<tr><td>'; 
retrieve_msg_content($result); 
retrieve_msg_content($result); //repeat 8 times 
echo '</td></tr></table>'; 

機能:私のアプローチは、私はこのように、メッセージのいずれかをクリックするまで、他の機能(8回)を呼び出すと、隠されたそれらのすべてを持っていることです

二度目にこれ以上の値を持っていないので、私は単に、問題は、それが動作しないということであることを説明できると私は二回if($row = mysql_fetch_assoc($result))を行うので、それはです!

私が持っていた他のアプローチは、同じ機能でmessage_topicとMESSAGE_SUBJECTの両方を呼び出すことだったが、私は、私が欲しいものではありませんアコーディオンの一種で終わります。

私は十分にはっきりしていたと思います。

答えて

1

あなたの悩みを解決する最も簡単な方法は、配列

while($row = mysql_fetch_assoc($result)) { 
    $yourArray[] = $row; 
} 

にMySQLのクエリの結果をコピーして、あなたのテーブルを構築するためにそれを使用することであろう。

編集:私は何を意味することは、この線に沿ってより多くのだった。

while($row = mysql_fetch_assoc($result)) { 
    $yourArray[] = $row; 
} 

echo '<table>'; 
foreach($yourArray as $i) { 
    retrieve_msg_topic($i); 
} 

echo '<tr><td>'; 
foreach($yourArray as $i) { 
    retrieve_msg_content($i); 
} 
echo '</tr></td></table>'; 

そして、このようなこれらの関数からSQLクエリを行うためにすべて除去:今

function retrieve_msg_topic($result) { 
    echo '<tr></td>'$result['usernombre']; 

    echo '<div id="msg'.$result['message_id'].'">'; 
    echo stripslashes($result['message_topic']); 
    echo '</div><td></tr>'; 
} 

をret [0]がトピックであり、$ ret [1]がメッセージであるという妙なキーモジョをやっていますが、それは良いことではありません。また、私はそのコードのどこに$ iの宣言も見ません。

エラーは、結果が空であるか、クエリが不正であることを示しています。私が見たコードからはわかりません。

他のいくつかの注意事項:あなたがDBから直接のデータ上にstripslashes()を使用していること、それは奇妙なようです。 DBにコンテンツを挿入するときに2回エスケープしていないと確信していますか?

は、代わりに、常に(あなたの質問ではあなたが言った8回のような)のx回何かを書くのループを使用します。関数呼び出し(名前、パラメータなど)に関する何かを変更する必要がある状況を考えてみましょう。ループを使用すると、1つの場所を編集する必要があります。せずに、あなたは8つの異なる場所を編集する必要があります。

この問題のもう1つの解決策は、AJAXを使用してコンテンツを最後のセルにロードすることです。あなたが好奇心が強いなら、私はあなたにどのように表示することができます。

より編集:AJAXについては

は、いつものようにあなたのメッセージのリストを作成し、空のターゲットTDを残します。次に、jQueryのAJAXコールを追加します。

大文字の変数を必要なものに置き換えます。 PHPに関しては、ID $ _GET ['msgid']を持つメッセージの内容をエコーアウトするだけです。 ただし、メッセージをエコーアウトする前にユーザーを認証して、他のユーザーがID番号を切り替えて他のユーザーのメッセージを読み取ることができないようにしてください。サイトでの認証の仕組みは不明ですが、これはセッション変数を使用して行うことができます。

+0

:私はあなたのアイデアが好きです。たとえ配列をあまり扱っていないとしても。ありがとう!!!! – cbarg

+0

私はもう少し助けが必要です! ifをしばらく変更すると、mysql_fetch_assoc()が提供された引数は有効なMySQL結果リソースではありません。さらに、最初のメッセージに対しては1回だけ動作します。function retrieve_msg_topic($ result){ while($ row = mysql_fetch_assoc($ result)) {$ topic_ret = 'something'; $ message_ret = 'その他のもの'; $ ret [$ i] = $ topic_ret; $ i ++; $ ret [$ i] = $ message_ret; $ i ++;} } return($ ret);} $ ret = retrieve_msg_topic($ result); echo $ ret [0]; – cbarg

+0

明確にするために私の編集を参照してください。 – Celos

関連する問題