我正在使用ajax来收集要提交的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')";
我是相当新的,所以如果还有什么需要看到的,以便让我知道。
答案 0 :(得分:2)
在将文本数据插入数据库之前,您似乎没有转义文本数据。在将数据传递给SQL查询之前,请对数据使用此函数:
http://www.php.net/manual/en/function.mysql-real-escape-string.php
编辑:抱歉,假设您使用的是MySQL。
答案 1 :(得分: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。
答案 2 :(得分:1)
如果我理解正确的情况如下:
如果你警告()Javascript从textarea获取的内容,你可以看到第2步是否成功。如果没有,请发布您的Javascript。
如果第2步是正确的,那么服务器端可能存在问题,转储数据库查询以查看它。
<强>更新强> 确保您在开发时打开所有错误和通知。如果你正在做一些你不能轻易“看到”的东西,比如AJAX,请务必留意服务器的错误日志。
在您的代码示例第2行中,您使用$ DBconnect,然后在第4行中定义它是什么。正如您在the PHP.net entry for mysql_real_escape_string中看到的,如果函数无法找到与数据库的连接,则函数会生成错误并返回FALSE。 FALSE被放入您的数据库,这就是您的数据库。
我给你的建议是:努力调试。测试所有假设,在每一步测试变量的值,检查它们是否具有您期望的值。使用var_dump(),print_r(),echo和die()。或者如果你想要更高级的东西,可以使用调试器(我没有)。