2010-02-03 21 views
1

我使用ajax来收集要提交的ckeditor数据。问题只是第一个撇号提交给数据库之前的内容。我可能做错了什么?Ckeditor只提交部分内容

编辑:

$date = strtotime($formData['date']); 
$article=mysql_real_escape_string($formData['article'],$DBconnect); 

$DBconnect=mysql_connect($dbVals['host'],$dbVals['user'],$dbVals['pass']); 

mysql_select_db($dbVals['db'], $DBconnect); 
$SQLstring="INSERT INTO PressRelease (ip, tym, title, date, article) VALUES('${_SERVER['REMOTE_ADDR']}', ".time().",'${formData['title']}', '$date', '$article')"; 

我在这个相当新的,所以如果有其他任何你需要,以帮助让我知道在看。

回答

2

听起来好像你并没有在将文本数据插入数据库之前转义文本数据。你将它传递到您的SQL查询之前,对数据使用此功能:

http://www.php.net/manual/en/function.mysql-real-escape-string.php

编辑:对不起,这是假设你正在使用MySQL。

+0

+1我打赌这是这两个啤酒。 – 2010-02-03 15:16:16

+0

是的,我正在使用MySQL,我曾尝试使用该功能,我认为这也是问题,但通过使用它没有提交任何数据。我在表单中有2个文本框,然后是一个ckeditor文本区,所有其他数据都提交给数据库。 – 2010-02-03 15:35:54

+0

你是说用mysql_real_escape_string在数据库中没有输入任何数据吗?请尽可能具体,这可以帮助我们帮助你。 – 2010-02-03 16:07:36

1

与Mark建议的方法不同的,更复杂的,可以说是优越的方法是使用Parameterized Statements

从维基百科借用一个例子:

<?php 
$db = new mysqli("localhost", "user", "pass", "database"); 
$stmt = $db -> prepare("SELECT priv FROM testUsers WHERE username=? AND password=?"); 
$stmt -> bind_param("ss", $user, $pass); 
$stmt -> execute(); 
?> 

它的叶子逃逸到MySQL驱动,严重降低SQL注入的机会之类的东西偶然双逃逸。

请注意,这是不可能使用old MySQL functions。您需要Improved MySQLI函数/对象,或者诸如PDO之类的东西。

+0

Mark B的解决方案更简单,我甚至不确定问题出在查询层面。 – 2010-02-03 15:17:11

+0

我的确说过这更复杂,我不是吗? - 如果问题出现在查询层面(考虑到问题描述,至少是最可能的原因),这绝对是最“安全”的方法。 (从多种意义上说) – Atli 2010-02-03 15:23:51

+0

我是初学者,所以我在寻找更多的东西,谢谢你的建议,虽然 – 2010-02-03 15:39:16

1

如果我理解正确,以下是这样:

  • 你就是我的真实被CKEDITOR
  • 你的JavaScript
  • 读取textarea的内容将“接管”一个textarea您正在使用AJAX将收集的内容发送到服务器

如果alert()Javascript从textarea获取的内容,您可以看到步骤2是否成功。如果没有,请发布您的Javascript。

如果第2步是正确的,那么可能是服务器端存在问题,请转储您的db查询以查看该问题。

更新: 确保您在开发时打开所有错误和通知。如果你在做一些你无法“看见”的东西,比如AJAX,请务必留意你的服务器的错误日志。

在你的代码示例第2行中,使用$ DBconnect,然后在第4行中定义它是什么。正如您在the PHP.net entry for mysql_real_escape_string中看到的那样,如果该函数无法找到与数据库的连接,该函数将生成一个错误并返回FALSE。 FALSE被放到你的数据库中,这就是你的数据库的内容。

我给你的建议是:尽量在调试时加倍努力。测试你所有的假设,在每一步测试变量的值,检查它们是否具有你期望它们具有的价值。使用var_dump(),print_r(),echo和die()。或者如果你想更先进的东西使用调试器(我不)。

+0

警报成功,表单中的所有其他数据提交罚款,然后再添加表单中的ckeditor完美工作 – 2010-02-03 15:41:58

+0

我不明白,表单元素* do *的其他部分中的内容最终在数据库中,而ckeditor textarea中的内容不? – 2010-02-03 16:08:54

+0

是的,没错,我知道它没有多大意义,但正如我所说我是一个新的程序员,我可能会错过这么简单的事情...... – 2010-02-03 18:03:13