插入<a> into database</a>时PHP脚本返回null

时间:2012-03-09 22:53:32

标签: php sql regex

我有一个基本的CMS,用户可以在其中更新文章数据库,并使用一组简单的BBC代码来获取一些额外的功能。

基本上,用户将文章信息输入到HTML表单中,然后单击“发布”按钮,AJAX请求被发送到服务器上的PHP脚本,该脚本使用Regex将BBCode转换为HTML,然后使用MySQL将信息存储在数据库中。

我的问题是一个不幸的问题,因为它在解决另一个问题后立即出现,而且调试非常困难,因为它是一个服务器端脚本,而且我没有收到任何错误消息。

我遇到了正则表达式的问题,特别是更复杂的标签。我设法让[link = URL] FOOBAR [/ link]标签正确匹配,然后用FOOBAR替换它们。但是,出于某种原因,这会使脚本挂起或失败或因为我在数据库中包含[link]标签时没有更新任何内容。

为了在我想让SQL工作的时候进行调试,我让PHP脚本回显mysql_query()函数的返回值,我认为它成功时为“1”,并且为“0” “当它失败时。但是,现在它只返回任何内容......而HTTPRequest返回一个0长度的字符串。

以下是代码:

$post = $_POST['post'];
$regex = Array('#(\r?\n)#', '#(\[(\/?)(b|i|u)\])#', '#\[link=(http://(www.)?.*?)\](.*?)\[/link\]#', '#(\[youtube\][http://www.youtube.com/watch?v=]?(\w+)[&\w+]?\[/youtube\])#', '#(\[img\](http://[www.]?[\w+])\[/img\])#');
$regReplace = Array('<br />', '<$2$3>', '<a href="$1">$3</a>', '<div class="media"><iframe title="YouTube video player" width="560" height="315" src="http://www.youtube.com/embed/$2" frameborder="0" allowfullscreen></iframe></div>',
                '<div class="media"><img width="560" src="$2" /></div>');
$post = preg_replace($regex, $regReplace, $post);
echo mysql_query('INSERT INTO News VALUES (NULL, "'.Date('D jS M').'", "'.Date('G:i').'", "'.$_POST['heading'].'", "'.$post.'")');

我知道IMG和Youtube正则表达式不起作用......

1 个答案:

答案 0 :(得分:3)

这里有几个问题。提到的错误源于不使用反斜杠+引用转义参数字符串中的引号。此外,SQL标准使用单引号,因此即使可以使用双引号,最好使用单引号。然后存在巨大的安全漏洞SQL injection,您的网站可能会被黑客入侵(数据库和文件显示)。

查看prepared statements,它也解决了逃避的报价。