Intereting Posts
о json_encode и ajax dataType: "json" Скопировать изображение с удаленного сервера через HTTPS Почему этот код делает мой экран пустым в admin, когда я помещаю его в functions.php? Как создать список параметров для функции? Мне нужно написать веб-искатель для конкретного пользовательского агента как показать результаты, пока скрипт php все еще запущен Загрузка файлов Zip, но недействительна? Symfony 1.4 с TCPDF: как получить данные из базы данных и показать их как .pdf-файл? Компонент автономной формы Symfony2 – настройка формы PHP: вычислить математическую функцию f (x) в строке PHP SOAP Процедура 'functionName' отсутствует создать API для потоковой передачи аудио / видео с GridFS mongodb Конечная точка / теги / тег / медиа / последние не отображаются все связанные записи Необходимое руководство по перенаправлению пользователя, если он не вошел в систему на панели администратора Проблема с кешем Symfony2 LiipImagineBundle

Почему PHP-код выполняется перед HTML?

Я изучаю 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''>"; 

и еще раз, текст изображения загружается первым.

Вывод представляет собой ссылку на изображение в тексте, и этот значок хрома, который символизирует, что изображение не было загружено.

ссылка на вывод изображения

Кто-нибудь может мне помочь? Спасибо! Если нужны какие-либо другие фрагменты кода, скажите мне, я написал только то, что, по моему мнению, имеет значение, но я могу ошибаться.

РЕДАКТИРОВАТЬ:

Код функции get_name ():

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

echo выводит IMMEDIATE. Если вы попытаетесь выполнить эхо-функцию, которая сама выполняет эхо-сигнал, эхо-функция выполняет FIRST. например

 function foo() { echo 'foo'; } echo 'bar' . foo(); // output foobar 

и выполняется как эквивалент

 echo 'foo'; echo 'bar'; 

Зачем? Поскольку echo сначала должен построить вывод строки. Таким образом, до того, как bar может быть эхом, родительское эхо должно вызвать foo() . Эта функция ничего не возвращает, она просто выполняет свое собственное эхо. множественные echo вызовы не координируют друг с другом, поэтому эхо foo выводит его. то foo ничего не возвращает в родительское эхо, поэтому вы выполняете echo 'bar' . null echo 'bar' . null и вывод.

Если у вас есть это:

 function bar() { return 'bar'; } echo 'foo' . bar(); 

он будет работать, как ожидалось. Последовательность выполнения:

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

измените структуру функции get_name () на

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

и он будет работать нормально