值在指定区域之外回显

时间:2012-05-26 23:22:03

标签: 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 $results; 
        }

        closeDBCon($dbc)
    }

并在页面中:

<?php

$get = getthis($x)
echo '<td>'.$get.'</td>';

?>

echo标记内的<tr>结果不会显示在页面顶部。它可能是echo而不是return,但导致此问题的是什么?

5 个答案:

答案 0 :(得分:1)

当你运行这个函数时,页面会在页面上的函数之前处理函数中的echo请求,然后回显它,而不返回任何值。

由于您显然想要关闭数据库连接,一个很好的选择是在循环期间将结果存储为变量,然后在关闭连接后返回变量。这样当你回显$ get时,它就会回显函数返回。

答案 1 :(得分:1)

是的,这就是问题所在。您可以按正确的顺序echo

<?php
echo '<td>';
getthis($x);
echo '</td>';
?>

转换为return

function getthis($x) {
    $output = '';
    $dbc = getDBCon();

    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;
}

或执行输出缓冲:

<?php

ob_start();
getthis($x);
$get = ob_get_contents();
ob_end_clean();

echo '<td>'.$get.'</td>';

?>

答案 2 :(得分:1)

您的功能需要return数据,而不是echo。现在你正在调用函数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;
}

在旁注中,我不会在这样的函数中打开和关闭连接。你可能会增加不必要的开销。

答案 3 :(得分:0)

回显函数中的td标记,否则返回$ results

答案 4 :(得分:0)

正如您所说,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;
}