2013-03-01 30 views
1

我正在研究一个允许用户创建html模板并保存它们的应用程序。用户可以使用不同的组件,如文本,图像等,并创建html页面。将内容保存到mysql数据库时使用撇号“'”问题

问题:我现在面临的问题是,当用户输入一些文字与撇号',我得到一个MySQL错误(显然应该)。所以,我说mysql_real_escape_string给变量传递前它适用于查询。它的工作原理,但我希望数据为用户编辑该网站。当我尝试将其取回时,返回的内容添加了斜杠时出现错误。
我无法使用stripslashes,因为我的内容可能会有斜杠作为用户输入的文本的一部分。

这是怎么把它添加到数据库:

$revisionContent = mysql_real_escape_string($_POST['txtComp']); 

这是查询

$query = "insert into revision (userId,revisionContent,webId,pageId,status,saveType,dateAdded) values ('".$_SESSION['gogiUserId']."','$revisionContent','$webId','$pageId','$status','$saveType','$toDate')";   

我想在的JavaScript变量中检索到的值,所以我不喜欢这样

var getSavedContent = '<?php echo json_encode($IdLessContent); ?>'; 

Bu那么我得到这个错误!

SyntaxError: missing ; before statement 
    [Break On This Error] 
    ...helvetica,sans-serif;\"><strong>Text **Bo'x**(here is the apostrophe)<\/strong><\/span><\/span><\/p>\n<ol>\n... 

如果我删除json_encode它给了我这个错误的语法。

SyntaxError: syntax error 
    [Break On This Error]  
    var getSavedContent = <div style="z-index: 1001; height: 241px; width: 725px; to... 
+2

这是密切相关的SQL注入攻击,重大安全隐患。阅读它。 – leftclickben 2013-03-01 09:09:45

+0

如果我用'mysql_real_escape_string'转义我的变量,它应该删除injection.Right的可能性? – KillABug 2013-03-01 09:11:46

+0

您应该使用'作为撇号。请参阅http://www.tedmontgomery.com/tutorial/htmlchrc.html – 2013-03-01 09:12:49

回答

2

这与MySQL无关。直到您将数据取出后,才会启动问题。

您正在接受一个数据结构,它可能有一个撇号,将其转换为JSON,然后通过将引号包围在其中来将该JSON文本转换为JavaScript字符串。由于JSON(或多或少)是JavaScript的一个子集,因此您可以通过跳过“转换为JS字符串”和“将字符串解析为JS对象”步骤来处理此问题。

删除引号:

var getSavedContent = <?php echo json_encode($IdLessContent); ?>; 
+0

感谢您的及时回复。我试过这个,但出于某种原因,它剥去了内容的第一个字符。例如:如果我有''div class =“hello”>'''div class =“hello” >'这是无效的,并在控制台上显示为文本。 – KillABug 2013-03-01 09:21:18

+0

任何我可能错过的东西!!我需要做的任何事情让它工作 – KillABug 2013-03-01 09:47:08

+0

+1回答正确。'mysql_real_escape_string'很好;这是问题的JS输出字符串,它的问题是它周围的引号。 'json_encode()'已经添加了它需要的引号,所以你不需要它们。回复您的评论,json_encode不会删除第一个字符;可能会涉及其他因素,但我们没有足够的信息来帮助解决这个问题。 – SDC 2013-03-01 09:58:24