我在MySql表上有一个数据库表单,我有一个javascript函数来填充select标签的选项。这些选项是从状态为“活动”或“非活动”的客户端表中获取的,返回值是那些状态为活动状态的客户端。如果在客户端状态为非活动状态的情况下加载订单,我正在尝试为非活动客户端添加处理程序。表单从一个php脚本加载,该脚本将客户端表连接到主表,其中主表中的clientId
等于客户端表中的Id
。因此,无论状态如何,我都会在函数外部获取客户端的名称和ID以填充选项列表。
有一条线让我适应。我搜索了这个网站和其他人,并找到了很多解决方案,但到目前为止还没有一个对我有用。这是一行:
var txt = <?php echo $row[`clients`.'name']; ?> ;
Chrome和Firefox调试程序返回的内容是“未捕获的语法错误:意外的令牌&lt;”。调试器显示:var txt = <br />
我已经尝试用单引号,双引号和没有引号括起php脚本,但仍然没有运气。任何想法,任何人?
大约一小时后 - > 我找到了解决方法。我尝试了你的所有建议,但在这种情况下都没有。 var_dump和json_encode确认了我已经知道的,返回的数据是有效的。无论语法有何变化,它们都返回相同的错误。我所做的是应用与上面相同的语法,但是在隐藏的输入中:
<input type="text" id="cName" hidden value="<?php echo $row[`clients`.'name']?>" />
然后将javascript代码更改为:
var txt = document.getElementById('cName').value;
其他一切都很完美。当然,我仍然对使用反引号有一些挥之不去的想法,并希望我有一个更好,更安全的代码。正如我在某处提到的,我只是直接从phpMyAdmin复制了sql语法。在这种情况下,如果我用反引号替换单引号,则输入不返回任何内容。好吧,谢谢大家。如果有人想要贡献更多,我会很高兴听到它。
答案 0 :(得分:3)
这是非法的PHP语法,一般来说语法非常危险。尝试执行var_dump($row)
以确切了解该数组中的内容。可能你想要更像
var txt = <?php echo json_encode($row['clients.name']); ?>;
代替。
请注意json_encode()
的使用。这将 ENSURE ,无论你在JS代码块中吐出什么,实际上是语法上有效的javascript。
e.g。考虑如果你最终得到了
会发生什么var txt = Miles O'Brien;
^^^^^--undefined variable;
^--- another undefined var
^--- start of a string
^^^^^^^---unterminated string.
使用json_encode(),最终得到
var txt = "Miles O'Brien";
,一切都很好。
答案 1 :(得分:0)
更改此
var txt = <?php echo $row['clients'.'name']; ?> ;
到此:
var txt = <?php echo $row['clients']['name']; ?> ;
答案 2 :(得分:0)
var txt = "<?php echo $row['clients']['name']; ?>";
答案 3 :(得分:0)
var txt = <?php echo $row[`clients`.'name']; ?> ;
考虑PHP如何解析这个:
var txt =
将直接输出到客户端。
进入PHP模式。
echo
以下表达式。
评估$row[`clients`.'name']
。
首先我们需要确定数组索引,它是`clients`
和'name'
的串联。
PHP中的反引号是execution operator,与shell_exec()
相同。所以PHP尝试执行shell命令clients
,这可能会失败,因为这不是你想要的,也不存在。因此,在此阶段,PHP会输出HTML错误消息,从换行符<br />
开始。
您的客户端现在有var txt = <br />
(您可以通过检查返回到浏览器的页面的HTML源来验证这一点),它会尝试在其JavaScript上下文中进行评估。这会导致您目睹的“意外令牌”错误。
正如其他人所提到的,你可能想要做一些像$row['clients']['name']
或$row['clients.name']
这样的事情 - 但是如果没有看到PHP的其余内容,就无法确定。另外,作为@MarcB has observed,您需要确定结果输出是有效的JavaScript,并且可能希望使用类似json_encode()
的函数来适当地转义值。
答案 4 :(得分:0)
错误来自于您的返回值(javascript中的字符串)必须在引号中。
单引号将从字面上取得它们之间的任何内容,不会解释转义(如\ n),使用双引号。
var txt = "<?php echo $row['clients']['name']; ?>";
是你想要的