2017-09-22 10 views
0

私はこれを理解することができず、エーテルをコード化する強い側ではありません。エコーされた行の文字をスマイリーに置き換える

現在のところ、最初の人物とタイムスタンプだけが印刷されます。これ以上のものはありません。

<table cellpadding="0" cellspacing="0" width="100%"> 
 
<tr><td></td></tr> 
 

 
<?php 
 
include '../connection.php'; 
 

 

 

 
$sql = "SELECT * 
 
FROM messagebox 
 
INNER JOIN person 
 
ON messagebox.sid = person.sid 
 
ORDER BY messagebox.id DESC 
 
LIMIT 20 
 
"; 
 
$query = mysql_query($sql); 
 
while($row = mysql_fetch_array($query)) 
 
{ 
 
if ($switch=='1') 
 
{ 
 
echo "<tr bgcolor=\"#FFFFFF\">"; 
 
$switch='0'; 
 
} 
 
else 
 
{ 
 
echo "<tr bgcolor=\"#F9F9F9\">"; 
 
$switch='1'; 
 
} 
 

 
$elfstring = utf8_encode($row['shout']); 
 

 
function smiley($elfstring) { 
 
     $elfstring = ereg_replace(":)","<img src=!.png alt=\"!\" >", $elfstring); 
 
     $elfstring = ereg_replace(":(","<img src=laugh.gif alt=\":D\" >", $elfstring); 
 
     $elfstring = ereg_replace(":p","<img src=tongue.gif alt=\":p\" >", $elfstring); 
 
     return $elfstrings; 
 

 
} 
 
$messages = smiley($elfstring); 
 

 
echo ""; 
 
    
 
echo "<td width=\"100\" valign=\"top\"><strong>" . $row['name'] . "</strong></td>"; 
 
    
 
echo "<td width=\"100\" valign=\"top\">" . "(" . $row['place'] .")</td>"; 
 
echo "<td width=\"70\" valign=\"top\">" . "" . date('H:i:s',strtotime ($row['timestamp'])) ."</td>"; 
 
echo "<td valign=\"top\">" . smiley($elfstrings) . "</td>"; 
 
echo "</tr>"; 
 

 
} 
 
?> 
 

 
<tr> 
 
<td> 
 

 
</td> 
 
</tr> 
 
</table>

私はこのコードの一部が廃止されて知っているが、これを使用してサーバーが古く、最新ではありません。

ご協力いただきありがとうございます。

+1

ereg_機能はとっくの昔廃止されました。正規表現を使用する必要がある場合は、代わりにpreg_関数を使用してください。しかし、ここで正規表現を使用する理由はありません。静的な検索文字列を置き換えるだけなので、str_replaceはそうするでしょう。 – CBroe

+0

正確なクエリを使用した結果が複数あることは確かですか? –

+0

メッセージボックスから20行を印刷するはずです。今は1を印刷しており、メッセージはエコーされません。 –

答えて

0
  1. 関数を複数回宣言することはできません。 whileループの外にfunction smiley(){を移動します。
  2. エラー報告を有効にし、エラーログを監視する必要があります。
  3. 各制御ブロックをインデントして、ブロックの終了/開始位置を簡単に識別できるようにする必要があります。
  4. regex /を使用しない場合は、正規表現を使用しないでください。 ()は特別な正規表現文字で、エラーが発生します。とにかく静的な置き換えを行っているので、str_replaceを使用してください。
  5. 文字列を"または'に囲むことができます。これにより、エスケープする必要がないため、文字列の作成が簡単になります。

だからあなたのスクリプトの終了を行います。

function smiley($elfstring) { 
     return str_replace(array(':)', ':(', ':p'), 
         array('<img src="!.png" alt="!" >', '<img src="laugh.gif" alt=":D" >', '<img src="tongue.gif" alt=":p" >'), 
          $elfstring); 
} 
+0

それは動作します!しかし、どのように正しくエコーするのですか? 'echo" "スマイリー($ elfstrings)。 ""; '何もエコーしません。 –

+0

'$ elfstrings'は実際に入力されていますか? 'var_dump($ row ['shout']);を試してください。 var_dump($ elfstrings); '、あなたはどうしますか? – chris85

+0

両方でNULL値を取得しますが、それらはデータベースに設定されています.... これで、elfstringの定義を削除できました。 THX! –

関連する問題