尝试自学php,我正在努力解决我认为的范围问题?
我有一个查询,while循环,if / else和一个函数。
我想在while循环中回显函数get_patronapi_data($id)
的结果。
到目前为止,我的代码如下(为清晰起见而删除);
$stmt = $conn->prepare("SELECT... ..."); //QUERY here ...
if( $stmt->num_rows > 0 )
{
while ($stmt->fetch()) {
if (SomethingIsTrue){
echo get_patronapi_data($id);
}
else {
echo $somethingElse;
}
}//end while
}//end if
define("APISERVER", "http://mydomain:4500");
function get_patronapi_data($id) {
$apiurl = "APISERVER" . "/PATRONAPI/$id/dump";//line 135
$api_contents = get_api_contents($apiurl);
$api_array_lines = explode("\n", $api_contents);
foreach($api_array_lines as $line){
if(strpos($line, "EXP DATE") !== false){
$data = explode("=", $line);
return $data[1];
}//end if
}//end foreach
}//end function
function get_api_contents($apiurl) {
$api_contents = file_get_contents($apiurl);//line 154
$api_contents = trim(strip_tags($api_contents));
return $api_contents;
}//end function
echo get_patronapi_data($id); // this works and echoes $data on screen
每当我echo get_patronapi_data($id);
在函数之外我成功地在屏幕上看到数据。但是当我在循环中echo get_patronapi_data($id);
时,我收到以下错误;
注意:使用未定义的常量APISERVER - 假设' APISERVER'在 第135行的C:\ xampp ... search_1.php
警告:file_get_contents(APISERVER / PATRONAPI / 3047468 / dump):失败 打开流:C:\ xampp ... search_1.php中没有这样的文件或目录 第154行
我确定我做的事非常愚蠢,但是感谢任何帮助。
答案 0 :(得分:2)
缺失的链接是声明:
$data = get_patronapi_data($id);
你应该放在echo $data;
之前。
它调用函数get_patronapi_data()
作为参数传递变量$id
的值,并将函数return的值存储在变量$data
中。
$data
变量global
与函数使用的变量 if (SomethingIsTrue) {
$data = get_patronapi_data($id);
echo $data;
} else {
echo $somethingElse;
}
不同。它们使用相同的名称,但它们不同(我希望您不在函数中使用关键字$data
。)
详细了解echo()
中的功能。
更新的(片段)代码如下所示:
if (SomethingIsTrue) {
echo get_patronapi_data($id);
} else {
echo $somethingElse;
}
如果您不对函数返回的值进行进一步处理,您也可以从上面的代码片段中删除临时变量{{1}},并使用:
{{1}}
答案 1 :(得分:2)
将我的一些评论写回答。
您需要删除以下引号:
$apiurl = "APISERVER" . "/PATRONAPI/$id/dump";
^ ^ <<< remove those
因为它被视为字符串文字而不是常量。
声明于:
define("APISERVER", "http://mydomain:4500");
参考:
然后你的连接超出了范围,应该在你的函数中使用。
即:
function get_patronapi_data($conn, $id)
并为需要连接的所有功能执行此操作。
您需要确保所有文件夹/文件都具有相应的写入权限。
答案 2 :(得分:1)
假设您想在while循环中的每次迭代中从get_patronapi_data()打印数据,您需要实际调用该方法而不是使用$ data。现在你正在尝试打印一个名为$ data的东西,尽管你从来没有为它设置一个值。您在函数中返回的$数据不能在该函数之外使用,因此它在while循环中不存在。
你在while循环中可以做的是$ data = get_patronapi_data();然后回显$ data。但是,你可以回复get_patronapi_data();第一
如果您只想调用一次函数,则需要在启动while循环之前设置一个变量(即$ variable = get_patronapi_data()),然后在while循环中使用该变量(即echo $ variable) ;
答案 3 :(得分:0)
我不确定我完全理解你的问题。如果你只是把
发生什么echo get_patronapi_data($ id);
循环中的而不是
echo $ data;
?如上所述,您不是在循环中调用该函数。