2013-04-28 38 views
0

我已经与域X表:标题,内容,时间。保存包含HTML标签和单一双引号内容到数据库

通过HtmlForm控件我上传数据到这个表。 HTML是:进程2 PHP脚本的

<form action="process2.php" method="post" enctype="multipart/form-data"> 
Headline: <input name="headline" type="text" size="100" /><br /><br /> 
Content:<textarea name="content" cols="100" rows="10" placeholder="Content here"> 
</textarea><br /><br /> 
</form> 

部分:

$headl = mysql_real_escape_string($_POST['headline']); 
$headline=htmlspecialchars("$headl", ENT_QUOTES); 

$cont=$_POST['content']; 
$cont = str_replace("&lt;", "<", $cont); 
$cont = str_replace("&gt;", ">", $cont); 
$content=htmlentities($cont,ENT_QUOTES); 

$sql="INSERT INTO X(`headline`, `content`, `date`) VALUES ('$headline','$content',NOW())"; 

$query = mysql_query($sql)or die(mysql_error()); 

问题: 标题和日期越来越插入。 而内容为空...

我试过mysql_real_escape_string上的内容,但也没有用。 为什么内容是空的? ...任何解决方案?

+1

你为什么不上的内容使用mysql_real_escape_string吗? – 2013-04-28 08:59:35

+0

使用准备好的语句。 – 2013-04-28 09:03:51

+0

尝试echo' $ content'并查看它给出了什么。也许它插入到数据库 – 2013-04-28 09:39:03

回答

0

请试试这个,它应该在你的情况下工作:

// htmlspecialchars Must with ENT_QUOTES, it actually make mysql_real_escape_string useless, but mysql_real_escape_string for safe anyway. 

$headline = mysql_real_escape_string(htmlspecialchars($_POST['headline'], ENT_QUOTES)); 
$content = mysql_real_escape_string(htmlspecialchars($_POST['content'], ENT_QUOTES)); 

$sql = "INSERT INTO X(`headline`, `content`, `date`) VALUES ('{$headline}', '{$content}', NOW())"; 

$query = mysql_query($sql) or die(mysql_error()); 

要显示,您可以从MySQL加载出来的数据,并为每个执行htmlspecialchars_decode。

而更简单的方法是,节约他们的时候,就这样不这样做的htmlspecialchars:

$headline = mysql_real_escape_string($_POST['headline']); 
$content = mysql_real_escape_string($_POST['content']); 

mysql_real_escape_string后,数据对于MySQL应该安全的,因为所有已知的注射技巧将被过滤。你只需要关心它自己的html内容。哦,这两个内容的长度不能超过你的字段的字符数限制。

相关问题