Php 在指定区域外回声的值
我们有这样一个函数:Php 在指定区域外回声的值,php,html,Php,Html,我们有这样一个函数: function getthis($x){ $dbc = getDBCon(); if ($dbc) { $sql = "SELECT * FROM `names`"; $res = mysqli_query($dbc, $sql); while($data = mysqli_fetch_array($res)){ SOME PROCESS... echo $
function getthis($x){
$dbc = getDBCon();
if ($dbc) {
$sql = "SELECT * FROM `names`";
$res = mysqli_query($dbc, $sql);
while($data = mysqli_fetch_array($res)){
SOME PROCESS...
echo $results;
}
closeDBCon($dbc)
}
第页:
<?php
$get = getthis($x)
echo '<td>'.$get.'</td>';
?>
但它不会在
标记中回显结果,它们会出现在页面顶部。它可能是echo
ing而不是return
,但是是什么导致了这个问题呢?在函数中回显td标记,或者返回$results在函数中回显td标记,或者像您自己说的那样返回$results,echo
而不是return
是问题所在echo
仅在遇到该方法时打印到屏幕上。一种可能的解决方案是,在整个while循环中,将结果累积在变量$output
中。完成后,返回$output
的内容
function getthis($x){
$dbc = getDBCon();
$output = "";
if($dbc) {
$sql = "SELECT * FROM `names`";
$res = mysqli_query($dbc, $sql);
while($data = mysqli_fetch_array($res)){
// SOME PROCESS...
$output .= $results;
}
closeDBCon($dbc);
}
return $output;
}
正如您自己所说,echo
而不是return
是问题所在echo
仅在遇到该方法时打印到屏幕上。一种可能的解决方案是,在整个while循环中,将结果累积在变量$output
中。完成后,返回$output
的内容
function getthis($x){
$dbc = getDBCon();
$output = "";
if($dbc) {
$sql = "SELECT * FROM `names`";
$res = mysqli_query($dbc, $sql);
while($data = mysqli_fetch_array($res)){
// SOME PROCESS...
$output .= $results;
}
closeDBCon($dbc);
}
return $output;
}
当您运行函数时,页面在处理函数中的回显请求之前,先处理该函数中的回显请求,然后进行回显,但不返回任何值
由于您显然希望关闭DB连接,一个好的替代方法是在循环期间将结果存储为变量,然后在关闭连接后返回变量。这样,当您回显$get时,它会回显函数return。当您运行函数时,页面会在函数中处理回显请求,然后在页面上处理回显请求,因此会回显它,而不返回任何值
由于您显然希望关闭DB连接,一个好的替代方法是在循环期间将结果存储为变量,然后在关闭连接后返回变量。这样,当您回显$get时,它会回显函数return。是的,这就是问题所在。您可以按正确的顺序echo
:
<?php
echo '<td>';
getthis($x);
echo '</td>';
?>
或执行输出缓冲:
<?php
ob_start();
getthis($x);
$get = ob_get_contents();
ob_end_clean();
echo '<td>'.$get.'</td>';
?>
是的,这就是问题所在。您可以按正确的顺序echo
:
<?php
echo '<td>';
getthis($x);
echo '</td>';
?>
或执行输出缓冲:
<?php
ob_start();
getthis($x);
$get = ob_get_contents();
ob_end_clean();
echo '<td>'.$get.'</td>';
?>
您的函数需要返回数据,而不是回送数据。现在您正在调用函数getthis()
,它正在内部打印数据。相反,您希望它返回值,以便控制打印结果的位置:
function getthis( $x ) {
$dbc = getDBCon();
$response = false; /* Return false if no db connection was made */
if( $dbc ) {
$sql = "SELECT * FROM `names`";
$res = mysqli_query( $dbc, $sql );
$response = "";
while( $data = mysqli_fetch_array( $res ) ){
/* SOME PROCESS... */
$response .= $results; /* Assuming you're returning a string */
}
closeDBCon($dbc);
}
return $response;
}
另一方面,我不会在这样的函数中打开和关闭连接。您可能会增加不必要的开销。您的函数需要返回数据,而不是回送数据。现在您正在调用函数getthis()
,它正在内部打印数据。相反,您希望它返回值,以便控制打印结果的位置:
function getthis( $x ) {
$dbc = getDBCon();
$response = false; /* Return false if no db connection was made */
if( $dbc ) {
$sql = "SELECT * FROM `names`";
$res = mysqli_query( $dbc, $sql );
$response = "";
while( $data = mysqli_fetch_array( $res ) ){
/* SOME PROCESS... */
$response .= $results; /* Assuming you're returning a string */
}
closeDBCon($dbc);
}
return $response;
}
另一方面,我不会在这样的函数中打开和关闭连接。您可能增加了不必要的开销。“可能是回音而不是“return”导致了此问题?”是的。但是return中断函数,只返回一个值,为什么它不回显到标记中?“可能是回显而不是“return”导致了这个问题?”是的。但是return中断了函数,只返回一个值,为什么它不回显到标记中呢?closeDBCon($dbc)需要
closeDBCon($dbc)需要代码>我认为你为他提供多种解决方案很好,但有些解决方案比其他的好。你可能想强调哪个更可取。@Kristianantosen:这取决于getthis()
是否可以更改,但我确实按优先顺序列出了它们。当退出而循环时,它不再知道$output
。不过,公平地说,我不同意。用任意的方法在屏幕上打印是一种无政府状态和糟糕的做法。这使得您以后无法决定发送新的头。@W2-S$output
在循环时在之外声明,因此在执行返回$output
时,它仍在范围内。我认为您为他提供多个解决方案很好,但有些解决方案比其他解决方案更好。你可能想强调哪个更可取。@Kristianantosen:这取决于getthis()
是否可以更改,但我确实按优先顺序列出了它们。当退出而循环时,它不再知道$output
。不过,公平地说,我不同意。用任意的方法在屏幕上打印是一种无政府状态和糟糕的做法。这使得您以后无法决定发送新的头。@W2-S$output
在while
循环之外声明,因此在执行return$output
时它仍在范围内。正如我对minitech所说的,在退出while
循环时,它不再知道$response
或$results
。@W2-S您应该共享更新的代码-$response
在适当的范围内,如果您遵循上面的示例,函数可以返回它。正如我对minitech所说的,当退出循环时,它不再知道$response
或$results
。@W2-S您应该共享更新的代码-$response
在适当的范围内,如果您遵循上述示例,函数可以返回它。