值未从 Index.php 更新到 example.php

Values are not updating from Index.php to example.php

提问人:Mehul Kumar 提问时间:7/4/2023 更新时间:7/4/2023 访问量:49

问:

包含文件时,不会传递值。即使我试过了,但没有工作global $subidone;$subidone = $_GET['subidone'];

索引 .php 代码 :

if (isset($_GET['adgroup_id']) && $_GET['adgroup_id'] == "123") {
    
    $subidone = "Canada";
    $file = ["example.php", "sample.php"];
    $randomFile = $file[array_rand($file)];
    include $randomFile;    
    
}

示例.php代码:

//global $subidone;
//$subidone = $_GET['subidone'];
$affurl="https://example.com?subid1=" . $subidone ."&subid2=123456";
echo $affurl;

我想要的输出: https://example.com?subid1=Canada&subid2=123456

我得到的输出: https://example.com?subid1=&subid2=123456

php if-statement include require

评论

2赞 Lajos Arpad 7/4/2023
你的 URL 中有吗?如果是这样,它的价值是什么?adgroup_id
1赞 Sachin 7/4/2023
我同意@LajosArpad,因为当我尝试您的代码时,它似乎很好。
2赞 hakre 7/4/2023
该代码在初始化 $subidone 变量后包含文件的前提条件下工作。虽然 index.php 代码中的代码确实初始化$subidone,但 example.php 中的代码不会。因此,看起来您不需要的输出可以通过直接请求 example.php 而不是 index.php 来创建。但是,使用正确的 get 参数请求索引.php应该会产生所需的输出。与前面的两条评论相比,我还可以确认代码有效。我也留下了答案。

答:

1赞 hakre 7/4/2023 #1

如果不预先检查输入条件,在 PHP 中包含文件可能会导致意外效果。然后很容易直接在浏览器中打开文件(它请求它),这不是预期的。

当包含文件是公共目录 (webroot) 中的标准 PHP 文件时,此问题很常见。

你可以做的是验证前提条件,如果违反了它,那就扔掉。

在您的示例中,变量是前提条件,它必须是一个字符串:$subidone

示例.php代码:

<?php # start of file
// verify pre-condition for this include file
if (!is_string($subidone ?? null)) {
    throw new ErrorException('bad file include: ' . basename(__FILE__));
}


$affurl="https://example.com?subid1=" . $subidone ."&subid2=123456";
echo $affurl;

现在,每当执行 echo 语句时,您至少知道变量 $subidone 是作为字符串传递的,这是该文件代码工作的先决条件。而且你知道什么时候不是,因为代码会抛出并提前停止。

这还可以防止您在包含或变量存在问题时在错误的位置进行搜索。

这取决于一点,但是通常包含文件不属于公共 webroot,因此您知道它们只能由另一个 php 文件包含,而不是浏览器直接请求。