用回显的行

时间:2017-09-22 12:25:20

标签: php regex function ereg-replace

我无法解决这个问题,也不是我编码以太的强大方面。

截至目前,它只打印第一个人和时间戳,而不是更多。



<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>
&#13;
&#13;
&#13;

我知道此代码的某些部分已弃用,但使用此代码的服务器已经过时且不是最新的。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

  1. 您不能多次声明一个函数。将function smiley(){移到while循环之外。
  2. 您应启用错误报告并监控错误日志。
  3. 您应该缩进每个控制块,以便轻松判断块的结束/开始。
  4. 如果您不需要正则表达式/不使用正则表达式,请不要使用正则表达式函数。 ()是特殊的正则表达式字符,会导致错误。使用str_replace因为您正在进行静态替换。
  5. 您可以在"'中包含字符串,这可以简化字符串构造,因为您无需转义。
  6. 所以要结束你的剧本:

    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); 
    }