Javascript PHP:isset()不';不检测获取变量

Javascript PHP:isset()不';不检测获取变量,javascript,php,html,forms,web,Javascript,Php,Html,Forms,Web,我有一个html表单(method=“get”,action=“cart.php”),其中我使用两个按钮发送相同的表单 echo '<input type="image" src="data/images/back.png" height="40px" id="back" name="back">'; echo '<input type="image" src="data/images/continue.png" height="40px" id="go" name="go"&

我有一个html表单(method=“get”,action=“cart.php”),其中我使用两个按钮发送相同的表单

echo '<input type="image" src="data/images/back.png" height="40px" id="back" name="back">';
echo '<input type="image" src="data/images/continue.png" height="40px" id="go" name="go">';
当表单传递“go.x”和“go.y”变量时,我使用“go.x”变量名(用户单击的图像按钮内的确切x,y位置)

但是,isset()函数总是返回false。。。怎么可能呢?
谢谢

我试着回答我自己的问题:

if(isset($_GET[go_x] == true))
{
}

它成功了。现在我的新问题是:为什么PHP会将我的go.xget变量翻译成go\ux

我试着回答自己的问题:

if(isset($_GET[go_x] == true))
{
}

它成功了。现在我的新问题是:为什么PHP会将我的go.xget变量翻译成go\ux

您在javascript中详细说明了名为“go”的对象,但php不理解变量x(“go.x”)的外推,我建议在javascript中的数据之前进行详细说明,然后设置输入类型“hidden”以将数据发送到php页面,以便进一步详细说明

附言

if(isset($\u GET['go.x'])==true)
这等于说
如果(isset($\u GET['go.x']))


()

您在javascript中详细说明了名为“go”的对象,但php不理解变量x(“go.x”)的外推,我建议在javascript中详细说明数据,然后设置输入类型“hidden”将数据发送到php页面,以便进一步详细说明

附言

if(isset($\u GET['go.x'])==true)
这等于说
如果(isset($\u GET['go.x']))

()

来自:

因为foo.x和foo.y在PHP中会产生无效的变量名,所以它们 自动转换为foo_x和foo_y。也就是说,周期 替换为下划线。因此,您可以访问这些变量,如 在“从中检索变量”一节中描述的任何其他变量 外部来源。例如,$\u GET['foo\u x']

有一个例子表明,该行为的目的是在启用时将提交的变量名转换为有效的全局名

现在,弃用的
register\u globals
终于被删除了,看来该行为有可能会改变为您一直期待的行为。

来自:

因为foo.x和foo.y在PHP中会产生无效的变量名,所以它们 自动转换为foo_x和foo_y。也就是说,周期 替换为下划线。因此,您可以访问这些变量,如 在“从中检索变量”一节中描述的任何其他变量 外部来源。例如,$\u GET['foo\u x']

有一个例子表明,该行为的目的是在启用时将提交的变量名转换为有效的全局名



现在,弃用的
register\u globals
终于被删除了,看起来这种行为有可能会改变为您一直期望的行为。

当您
打印时会发生什么?x和y是独立的获取值,只需使用“go”。哦,我的天啊。。。我自己解决了。。。我做了设置($\u GET[back\u x]==true)并且WORKED@Chirs:这个不行。我已经试过了。但是,我解决了当您
print\r($\u GET)时发生的问题?x和y是独立的获取值,只需使用“go”。哦,我的天啊。。。我自己解决了。。。我做了设置($\u GET[back\u x]==true)并且WORKED@Chirs:这个不行。我已经试过了。然而,我解决了apache Web服务器的一个问题?它将通过将所有变量传递到PHP脚本来实现这一点:这是一个遗留问题。PHP用于自动将GET、POST和cookie值中的值作为命名变量直接导入全局范围(例如,
$go\u x
)。这些不能有句点,所以它会将它们转换为下划线。这是apache Web服务器的问题吗?它会将所有变量传递给PHP脚本,这样做:这是一个遗留问题。PHP用于自动将GET、POST和cookie值中的值作为命名变量直接导入全局范围(例如,
$go\u x
)。这些不能有句号,所以它会将它们转换为下划线。谢谢。然而,我对您的回答并不完全满意:foo.x和foo.y在任何情况下都不是变量,它们只是关联数组$\u GET的字符串键。PHP不禁止字符串中包含句点,那么为什么会出现这种奇怪的行为呢?我猜是因为历史原因,如果设置了句点,也会直接访问各个变量。也就是说,如果启用了
register\u globals
,那么除了
$\u GET['foo.x']
之外,您还需要创建
$foo.x
,因为它不是一个有效的名称,所以不能创建它。有人反对这种行为,这似乎表明这是出于这个原因,而且它现在可能会改变
register\u globals
正在进行。从OpenBug报告来看,这似乎是预期的行为。他们甚至发布了执行句点->下划线转换的代码。代码已经存在了好几年了;如果你想弄清楚它被放在那里的确切原因,你可能需要一个考古学家而不是一个程序员。从我可以看出,它很可能是在
$\u GET
存在之前编写的。现在我明白了整个问题。无论如何,从标准化的角度来看,我一直觉得PHP是一种非常糟糕的编程语言(很像HTML和CSS),尽管它是我最喜欢的语言之一:-)。例如,我不喜欢强制C风格的范例,在这种情况下,它非常适合。谢谢。然而,我对您的回答并不完全满意:foo.x和foo.y在任何情况下都不是变量,它们只是关联数组$\u GET的字符串键。PHP不禁止字符串中包含句点,那么为什么会出现这种奇怪的行为呢?我猜是因为历史原因,如果设置了句点,也会直接访问各个变量。也就是说,如果启用了
register\u globals
,那么除了
$\u GET['foo.x']
之外,您还希望
$foo.x
是c