我已经阅读了很多关于这个问题的回复,但我没有发现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()
有什么想法吗?
答案 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错误