【发布时间】:2011-12-28 07:20:19
【问题描述】:
我构建了一个非常简单的聊天系统...它工作得很好,当用户输入一条消息时它会正确显示,唯一的问题是换行符不显示...在发送信息到数据库并检索它我失去了换行符......
我想我需要在途中将\n 转换为<br>,但我对这种类型的编码真的不太了解...我主要做游戏和东西...没有网站或数据库编码直到今天(我的第一天)
这是我在 chat.php 上找到的代码
<html><head></head><body>
<form action="chat.php" method="post">
Message: <br><textarea type="text" name="message" style="width:80%; height:300px;"></textarea><br>
<input type="submit" />
</form>
<div style="width:100%;">
<?php
$host="***";
$user="***";
$password="***";
$cxn = mysql_pconnect ($host, $user, $password);
mysql_select_db("defaultdb", $cxn);
if (getenv(HTTP_X_FORWARDED_FOR)) {
$ipaddress = getenv(HTTP_X_FORWARDED_FOR);
} else {
$ipaddress = getenv(REMOTE_ADDR);
}
$message = strip_tags($_POST["message"]);
mysql_query("INSERT INTO ChatTest (ID, TimeStamp, Message) VALUES ('$ipaddress', NOW(), '$message')");
$data = mysql_query("SELECT * FROM ChatTest ORDER BY TimeStamp DESC") or die(mysql_error());
Print "<table border cellpadding=3 width='100%' style='table-layout:fixed'>
";
Print "<tr>";
Print "<th style='width:10%;'>ID:</th><th style='width:10%;'>TimeStamp:</th><th style='width:70%;'>Message:</th>";
while($info = mysql_fetch_array( $data )) {
Print "
<tr>";
Print " <td>".$info['ID'] . "</td> ";
Print " <td>".$info['TimeStamp'] . " </td>";
Print " <td style='white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word'>".$info['Message'] . "</td></tr>
";
}
Print "</table>";
mysql_close($cxn);
?>
</div></body></html>
【问题讨论】:
-
您确实需要启用
error_reporting(E_ALL);- 您的代码中有很多问题,例如不带引号的字符串。 -
您的 getenv 调用是错误的。他们正在查找未定义的常量,在好日子,PHP 可能会礼貌地为您翻译成字符串。他们应该是
getenv('REMOTE_ADDR')是正确的。 -
实际上它们根本不应该是
getenv调用,而是一个简单的$_SERVER['REMOTE_ADDR']。HTTP_X_FORWARDED_FOR不可信 - 当不在代理后面时,用户可以将其设置为anything。
标签: php mysql regex chat line-breaks