【问题标题】:Why is the PHP code executing before the HTML?为什么 PHP 代码在 HTML 之前执行?
【发布时间】:2016-11-18 21:51:01
【问题描述】:

我已经学习 PHP 几个星期了,现在我正在编写一个结合 MySQL 数据库、OOP PHP 和 PHP 会话的脚本。

现在,如果您已登录(即设置了会话变量),网站上会显示您的姓名,如果您未登录,则会显示一个登录框。

 <?php
                if(!isset($_SESSION['username'])) {
                    echo "<h3>Login</h3>
                     include("login.php");
                } else {
                    echo "<h3>Welcome</h3> ". $user->get_name();
                    echo"<br><a href='logout.php'>Log-out</a>";
                }
            ?>

假设有一个会话,上面的代码应该输出: Welcome Alex!

但是,如果我运行它,结果是:

Alex
Welcome

为了快速修复它,我发现如果我这样做:

 echo "<h3>Welcome</h3> ;
    echo $user->get_name();
    echo"<br><a href='logout.php'>Log-out</a>";

它修复了它。也就是说,如果我将语句分成两个回声并且文本正确输出。当然我知道这可能不是修复它的好方法,因为我需要添加以下代码:

echo "<img src='".$user->get_photo()." border='5''>";

再一次,图片的文本首先加载。

输出是文本中的图像链接,以及表示图像未加载的 chrome 图标。

link to image output

有人可以帮帮我吗?谢谢!如果需要任何其他代码,请告诉我,我只写了我认为相关的内容,但我可能错了。

编辑:

“get_name()”函数代码:

function get_name() {
            echo get_user_data($this->user_id,"name");
        }

【问题讨论】:

  • $user-&gt;get_name()函数是否也包含echo代码?显示该功能代码。
  • 假设它只是一个错字,但你在这一行的末尾缺少一个 " echo "&lt;h3&gt;Login&lt;/h3&gt;
  • 它确实是血腥的指关节,添加了它。这是一个错字 RiggsFolly,谢谢!

标签: php html mysql oop


【解决方案1】:

echo 立即输出。如果您尝试回显一个本身执行回显的函数,则该函数的回显首先执行。例如

function foo() {
   echo 'foo';
}

echo 'bar' . foo();   // output foobar

并以相当于

的方式执行
echo 'foo';
echo 'bar';

为什么?因为echo 首先必须构造要输出的字符串。所以在bar 可以回显之前,父回显必须调用foo()。该函数不返回任何内容,它只是执行自己的回显。多个echo 调用不相互协调,所以foo 的echo 会输出。然后 foo 不向父回显返回任何内容,因此您正在执行 echo 'bar' . null,并输出 bar

如果你有这个:

function bar() {
   return 'bar';
}

echo 'foo' . bar();

它会按预期工作。执行顺序是:

$temp = bar(); // $temp gets string'bar'
echo 'foo' . $temp;
echo 'foo' . 'bar';
echo 'foobar';
-> output foobar

【讨论】:

  • 该函数应该返回字符串。 return $myVar;
  • 你应该 return 然后从函数中发送文本 - 而不是 echo 那里。
  • 谢谢马克 B!它确实解决了这个问题。 get_name() 函数本身确实有一个回显,它调用的函数也回显了数据库中的某些内容。再次感谢大家的回答。我将详细了解 echo/return 以及如何正确使用它们。
【解决方案2】:

将函数get_name()的结构改为

function get_name() {
            return get_user_data($this->user_id,"name");
        }

它会正常工作

【讨论】:

  • 是的,明白了,谢谢!get_name() 函数本身正在调用 get_user_data,它也响应了数据库中的某些内容。
猜你喜欢
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
  • 1970-01-01
  • 2019-10-03
  • 1970-01-01
  • 2016-12-25
  • 2019-01-24
相关资源
最近更新 更多