2011-11-15 289 views
0

我对php很陌生,对于这个问题一般的服务器脚本(所以对我来说很容易)
但是不管我设法创建这个,评论系统的前半部分:php + mysql评论系统

<html> 
<body> 
<form name="Comment" action="InsertComment.php" method="POST"> 
Name: <input type="text" name="name" /><br> 
Comment: <br><textarea style="height: 100px; width: 600px;" name="comment"></textarea><br> 
<input id="Special_ID" name="id" value="<?php $unixtime = time(); echo $unixtime; ?>"> 
<!--^Gathers a unique id^--> 
<input type="submit" /> 
</form> 
</body> 
</html> 

一旦提交 - >

<?php 
$con = mysql_connect("Blaa", "Blaa", "Blaa"); 
if(!$con) { 
die('Could not connect ' . mysql_error()); 
} 
sql_select_db("Comments", $con); 
$sql = "INSERT INTO Posts (Name, Comment, ID) 
VALUES('$_POST[name]', '$_POST[comment]', '$_POST[id]')"; 
?> 

这正是我想要的,用户将在他们的名字,注释,并生成一个唯一的ID后(时间标记),然后它全部发送到MySQL。
但现在我发现哑巴,我怎么能张贴此到另一个页面.. 我认为是这样的:

if(ID == [the id of that post]) { 
//$_GET the mysql stuff 
//Post inside a specially made div or something 
} 

沿该线,但我不知道如何将它放入练习:/ 有什么想法? 哦和不建议回声类型的帖子,我已经这样做,它不是我想要的。

**此外,这只是基本的代码,我不需要建议如何触摸它只是因为我的睡眠剥夺,代码确实工作。

+3

尼斯[SQL注入](http://en.wikipedia.org/wiki/SQL_injection)洞。您的时间ID不起作用 - 不能保证两个不同的用户不会同时加载表单并获得相同的ID。 –

+0

首先使用时间戳删除隐藏字段,并使用on update =当前时间戳将ID列更改为时间戳列。然后再添加两列 - 评论的ID(应该是带有自动增量的主键)和page_id列。接下来将page_id添加为表单中的隐藏字段,并在mysql插入语句中使用它。 – Vladimir

回答

2

由于@Marc B已经说,您首先需要使用mysql_real_escape_string解决您的SQL injection孔。改变你的INSERT语句

$sql = "INSERT INTO Posts (Name, Comment, ID) 
     VALUES('" . mysql_real_escape_string($_POST['name']) . "', '" . mysql_real_escape_string($_POST['comment']) . "', '" . mysql_real_escape_string($_POST['id']) . "')"; 

要显示你的评论,CSS style使用IDs and classes您的DIV试试这个

$sql = "SELECT Name, Comment, ID 
     FROM Posts 
     WHERE ID = '" . mysql_real_escape_string($_GET['PostID']) . "'"; 
$query = mysql_query($sql); 

echo "<div id=\"comments_container\">"; 
while ($row = mysql_fetch_assoc($query)) 
{ 
    echo "<div class=\"comment\">"; 
    echo "<div class=\"name\">" . $row['Name'] . "</div>"; 
    echo "<div class=\"comment_body\">" . $row['Comment'] . "</div>"; 
    echo "</div>" 
} 
echo "</div>"; 

然后。

0

使用mysql_fetch_object

插入到MySQL之前,请净化你的$ _GET数据,这是一个巨大的注入安全漏洞只是一个例子。

$sql = "SELECT * FROM Posts WHERE id={$id}" 
$result = mysql_query($sql); 
$obj = mysql_fetch_object($result) 
if(is_object($obj)) 
{ 
echo "Welcome " . $obj->Name; 
}