php
2012-01-16 7 views 0 likes 
0

今日はかなり難しい質問があります。それが可能かどうかわかりませんが、それが本当に私を助けてくれるでしょう。ここに私のコードは次のとおりです。すでに注文されているmysql_queryの順序を逆にする方法

$chatquery = mysql_query("SELECT * FROM conversation 
          WHERE yourusername='$username' AND 
          theirusername='$otherchatuser' 
          ORDER BY ID DESC"); 

while ($runrows = mysql_fetch_assoc($chatquery)) 
{ 
    $chatname = $runrows['realuserusername']; 
    $chatmessage = nl2br($runrows['message']); 
    $chatmessage = preg_replace('/(((f|ht){1}tp:\/\/)[[email protected]:%_\+.~#?&\/\/=]+)/i', 
           '<a href="\\1" style="color:#36648B;" target="_blank">\\1</a>', 
           $chatmessage); 

    $chatmessage = preg_replace('/([[:space:]()[{}])(www.[[email protected]:%_\+.~#?&\/\/=]+)/i', 
           '\\1<a href="http://\\2" style="color:#36648B;" target="_blank">\\2</a>', 
           $chatmessage); 

    $chatlocation = $runrows['imagelocation']; 
    $chatimage = "<img src='$chatlocation' style='width:25px; height:20px;' />"; 

    echo '<table style="margin-bottom:5px;"> 
      <tr> 
       <td valign="top" style="padding-right:5px;">'.$chatimage.'</td> 
       <td><div style="max-width:220px; word-wrap:break-word;">'.$chatmessage.'<div></td> 
      </tr> 
      </table>'; 
} 

これは私が欲しいものであるDESCためにプラグインし、今すべてのメッセージ表示のチャットです。しかし、何をしようとしているのは、私の質問が同じユーザ$chatnameを複数回連続して取得した場合、それらのメッセージをASCの順序で表示し、もう一度$chatnameを表示しないことです。それでは、それが異なったら$chatnameそれはDESCの注文に行きます。つまり、クエリを逆にすることです。私はそれが可能であるかどうかわからないが、どんな助けも認められるだろう。

私の最後の質問は、DaveRandomのレスポンスに基づいており、コードを使って以下のようにしました。ユーザー名が繰り返される場合は、私はコード

$usermessage = '<table><tr><td valign="top" style="padding-right:5px;"></td><td><div style="max-width:220px; word-wrap:break-word;">'.$chatmessage.'<div></td></tr></table>'; 

を持っていると思い、どこそれは私が、私はこのことについてどのように行くだろう

$usermessage = '<table style="margin-bottom:5px;"><tr><td valign="top" style="padding- right:5px;">'.$chatimage.'</td><td><div style="max-width:220px; word-wrap:break- word;">'.$chatmessage.'<div></td></tr></table>'; 

を持っていると思いますしないのですか?

+0

あなたが必要とする注文結果を示す会話のサンプル出力を提供できますか? – cloakedninjas

答えて

1

私はこれを行うためには、データを2回ループする必要があります.1回はオーダーを構築し、1回は情報を出力する必要があります。たとえば、

function make_row_output ($row, $isRepeated = FALSE) { 
    $chatname = $row['realuserusername']; 
    $chatmessage = preg_replace(
    array(
     '/(((f|ht){1}tp:\/\/)[[email protected]:%_\+.~#?&\/\/=]+)/i', 
     '/([[:space:]()[{}])(www.[[email protected]:%_\+.~#?&\/\/=]+)/i' 
    ), 
    array(
     '<a href="\\1" style="color:#36648B;" target="_blank">\\1</a>', 
     '\\1<a href="http://\\2" style="color:#36648B;" target="_blank">\\2</a>' 
    ), 
    nl2br($row['message']) 
); 
    $chatlocation = $row['imagelocation']; 
    $chatimage = "<img src='$chatlocation' style='width:25px; height:20px;' />"; 
    return ($isRepeated) 
    ? '<table><tr><td valign="top" style="padding-right:5px;"></td><td><div style="max-width:220px; word-wrap:break-word;">'.$chatmessage.'<div></td></tr></table>' 
    : '<table style="margin-bottom:5px;"><tr><td valign="top" style="padding-right:5px;">'.$chatimage.'</td><td><div style="max-width:220px; word-wrap:break-word;">'.$chatmessage.'<div></td></tr></table>'; 
} 

// Do the query 
$query = "SELECT * 
      FROM conversation 
      WHERE yourusername = '$username' 
      AND theirusername = '$otherchatuser' 
      ORDER BY ID DESC" 
$result = mysql_query($query); 

// Loop the data and build an ordered array 
$last = FALSE; 
$rows = $userRows = array(); 
while ($row = mysql_fetch_assoc($result)) { 
    if ($last !== FALSE && $row['realuserusername'] != $last) { 
    $userRows = array_reverse($userRows); 
    echo make_row_output(array_shift($userRows)); 
    foreach ($userRows as $row2) { 
     echo make_row_output($row2, TRUE); 
    } 
    $userRows = array($row); 
    } else { 
    $userRows[] = $row; 
    } 
    $last = $row['realuserusername']; 
} 

// Last loop to catch any entries still in $userrows 
$userRows = array_reverse($userRows); 
echo make_row_output(array_shift($userRows)); 
foreach ($userRows as $row2) { 
    echo make_row_output($row2, TRUE); 
} 

sanitise your database inputを忘れないでください。

+0

私はデータベースにデータを入力するときにmysql_real_escape_stringを使用します。データを出力するときにそれを使用する方が良いですか? – Eggo

+0

これを介してデータを出力する必要はありません(実際には出力が破損する可能性があります)が、データベースクエリで使用されるすべてのユーザー入力に使用する必要があります。だから、 '$ username'と' $ otherchatuser'をエスケープする必要があるかもしれません。いずれかがリクエストからのユーザ入力の派生物である場合(つまり、それらが '$ _GET'、' $ _POST'、 '$ _REQUEST'、' $ _COOKIE'などから来たものである場合)、それらはエスケープされるべきです。 – DaveRandom

+0

チップのおかげで! – Eggo

関連する問題