PHP函数调用里面的PHP简单引用

时间:2012-01-17 18:50:52

标签: php javascript sql

我已经阅读了很多关于这个问题的回复,但我没有发现100%正确。

我期望在php中创建的代码如下所示:

<a href="#" onclick="a_js_function('moduleSee.php','sql_restriction','popup')">See</a>

a_js_function()是一个内部javascript函数,它接收一些参数,将像这样调用

$str = '<a href="#" onclick="';
$str .= " a_js_function('moduleSee.php','sql_restriction','popup')";
$str .='">See</a>';

但是sql_restriction参数包含一个引用:

concat('000000',table_id)

NOT 100%工作解决方案是\'而不是' =&gt;这允许SQL查询正常运行,但会创建一个阻止页面部分的javascript错误。

$str = '<a href="#" onclick="';
$str .= " a_js_function('moduleSee.php','concat(\'000000\',table.id)','popup')";
$str .='">See</a>';

看看chrome说的是什么:

  

未捕获的SyntaxError:意外的数字 - &gt;指出数字   收到的参数:concat('000000',table.id)

因为000之间的\'接收',js函数的参数会产生错误,而不是SQL。避免使用数字中的引号使SQL查询不起作用

放置'\"\\'''也不起作用,addslashes()

有什么想法吗?

4 个答案:

答案 0 :(得分:3)

问题不在于如何转义引号 - 反斜杠是正确的。然而,正在发生的事情是你没有足够的逃避,因为每次代码通过一种语言时,逃逸就完成了,下一种语言就再也看不到了。代码

$str = '<a href="#" onclick="';
$str .= " a_js_function('moduleSee.php','concat(\'000000\',table.id)','popup')";
$str .='">See</a>';

从php输出

<a href="#" onclick="
 a_js_function('moduleSee.php','concat('000000',table.id)','popup')
">See</a>

Javascript在concat中看到单引号并尝试结束字符串,然后被0调用,这不是javascript关键字。您需要javascript才能看到以下内容

<a href="#" onclick="
 a_js_function('moduleSee.php','concat(\'000000\',table.id)','popup')
">See</a>

这是通过转义php中的\'字符来完成的,这意味着你的php需要看起来像

$str = '<a href="#" onclick="';
$str .= " a_js_function('moduleSee.php','concat(\\\'000000\\\',table.id)','popup')";
$str .='">See</a>';

答案 1 :(得分:0)

我同意您应该对SQL服务器上的输入进行一些处理。您可以在该阶段更正输入。

您也可以在PHP中尝试使用转义双引号。 E.g:

$str = '<a href="#" onclick="';
$str .= " a_js_function('moduleSee.php','concat(\"000000\",table.id)','popup')";
$str .='">See</a>';

答案 2 :(得分:0)

Javascript可以在不使用concat函数的情况下进行连接,因此这应该可以工作:

a_js_function('moduleSee.php', '000000' + table.id, 'popup');

我不确定您的代码是否正在执行任何特殊操作以防止上述代码工作,但这对我有用。我将table.id设置为25,因此结果显示为:00000025

答案 3 :(得分:0)

感谢大家的答案,最后我的老板解决了改变CMS的核心问题,在使用“00000”后进行过滤,使用replace()\'更改为"

$_POST['fix'] = str_replace('\'','"', $_POST['fix'])); 

查询效果很好,没有js错误