Функция выводится не там где нужно

D3
На сайте с 03.02.2013
Offline
77
820

<?php

function getMFObyID ($id) {

include("getloans.php");

$link = mysqli_connect('localhost', 'root', '', 'cpl');

$query = mysqli_query($link, 'SELECT * FROM cpl_mfo WHERE id = "'.$id.'"');

for ($result = array(); $row = mysqli_fetch_assoc($query); $result[] = $row) {}

if ($result[0]["max_age"] < 200) $age = 'от '.$result[0]["min_age"].' до '.$result[0]["max_age"].' лет';

else $age = 'от '.$result[0]["min_age"].' лет';

if ($result[0]["adresses"] !== '') $adresses = '<h2>Адреса отделений</h2> '.$result[0]["adresses"].'';

else $adresses = '';

if ($result[0]["personal_account"] !== '') $personal_account = '<h2>Личный кабинет</h2> '.$result[0]["personal_account"].'';

else $personal_account = '';

echo '

<h1>'.$result[0]["name"].'</h1>

<div style="height: 250px; float: left; margin-right: 10px; display: flex; display: -webkit-flex;"><img style="width: 350px; margin: auto 0;" src="http://credits-pl.ru/img/mk/'.$result[0]["img"].'" alt="'.$result[0]["name"].'"></div>

<p><strong>Название:</strong> '.$result[0]["name"].'</p>

<p><strong>Сайт:</strong> <a href="'.$result[0]["link_offer"].'" target="_blank" rel="nofollow">'.$result[0]["site"].'</a></p>

<p><strong>Возраст:</strong> '.$age.'</p>

<p><strong>Необходимо:</strong> '.$result[0]["need"].'</p>

<div style="clear: both;">

<h2>О компании</h2>

'.$result[0]["description"].'

<h2>Условия</h2>

'.getLoansbyMFOID ($id).'

<h2>Получение</h2>

'.$result[0]["how_get"].'

<h2>Погашение</h2>

'.$result[0]["how_give"].'

'.$adresses.'

<h2>Акции, скидки</h2>

'.$result[0]["stocks"].'

'.$personal_account.'

<h2>Контакты, реквизиты</h2>

'.$result[0]["contacts"].'

';

}

?>

Она рабочая, но getLoansbyMFOID ($id) почему то выводит результат в начале строки, а не на том месте, где она вызывается. Подключается она через include("getloans.php");

S
На сайте с 30.09.2016
Offline
469
#1

Чудес не бывает. Где-то накосячили.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
D3
На сайте с 03.02.2013
Offline
77
#2
Sitealert:
Чудес не бывает. Где-то накосячили.

Где именно? И как тут вообще можно накасячить?

S
На сайте с 30.09.2016
Offline
469
#3

Да откуда ж мне знать-то? Может быть, в подключаемом файле эта функция вызывается. Или выводимый код не так читаете. Или вообще вывод как-то по-хитрому организован. Мало ли вариантов на свете бывает. Как кто-то сказал, "есть много прибамбасов друг Горацио, что и не снились вашим мудрецам...":)

D3
На сайте с 03.02.2013
Offline
77
#4

Проблема все еще актуальна. По прежнему функция выводит содержание вверху страницы, а не где она вставлена. В подключаемом файле include("getloans.php"); данная функция не вызывается, но описывается там.

A
На сайте с 23.11.2016
Offline
7
#5

Ну во первых правильнее было бы подключить include("getloans.php"); за пределами getMFObyID и желательно подключать через require_once "getloans.php"; нужно конечно посмотреть getLoansbyMFOID прежде чем что то говорить. Возможно в этой функции вместо return стоит echo, но утверждать трудно.

for ($result = array(); $row = mysqli_fetch_assoc($query); $result[] = $row) {} - эту строчку можно заменить $result = mysqli_fetch_all($query, MYSQLI_ASSOC); - если я все правильно помню, результат будет тот же.

D3
На сайте с 03.02.2013
Offline
77
#6
anzarsh:
Ну во первых правильнее было бы подключить include("getloans.php"); за пределами getMFObyID и желательно подключать через require_once "getloans.php"; нужно конечно посмотреть getLoansbyMFOID прежде чем что то говорить. Возможно в этой функции вместо return стоит echo, но утверждать трудно.
for ($result = array(); $row = mysqli_fetch_assoc($query); $result[] = $row) {} - эту строчку можно заменить $result = mysqli_fetch_all($query, MYSQLI_ASSOC); - если я все правильно помню, результат будет тот же.

Ну да echo и что?

A
На сайте с 23.11.2016
Offline
7
#7
diman3210:
echo '
<h1>'.$result[0]["name"].'</h1>
<div style="height: 250px; float: left; margin-right: 10px; display: flex; display: -webkit-flex;"><img style="width: 350px; margin: auto 0;" src="http://credits-pl.ru/img/mk/'.$result[0]["img"].'" alt="'.$result[0]["name"].'"></div>
<p><strong>Название:</strong> '.$result[0]["name"].'</p>
<p><strong>Сайт:</strong> <a href="'.$result[0]["link_offer"].'" target="_blank" rel="nofollow">'.$result[0]["site"].'</a></p>
<p><strong>Возраст:</strong> '.$age.'</p>
<p><strong>Необходимо:</strong> '.$result[0]["need"].'</p>
<div style="clear: both;">
<h2>О компании</h2>
'.$result[0]["description"].'
<h2>Условия</h2>
'.getLoansbyMFOID ($id).'
<h2>Получение</h2>
'.$result[0]["how_get"].'
<h2>Погашение</h2>
'.$result[0]["how_give"].'
'.$adresses.'
<h2>Акции, скидки</h2>
'.$result[0]["stocks"].'
'.$personal_account.'
<h2>Контакты, реквизиты</h2>
'.$result[0]["contacts"].'
';

- вот это echo содержит в себе функцию getLoansbyMFOID, которая тоже вызывает echo, и прежде чем все данные подставятся и все будет отправлено клиенту, срабатывает echo внутри функции и получается, что то что внутри функции отправляется клиенту вперед того, что описано выше. Попробуйте подменить echo на return.

D3
На сайте с 03.02.2013
Offline
77
#8
anzarsh:
- вот это echo содержит в себе функцию getLoansbyMFOID, которая тоже вызывает echo, и прежде чем все данные подставятся и все будет отправлено клиенту, срабатывает echo внутри функции и получается, что то что внутри функции отправляется клиенту вперед того, что описано выше. Попробуйте подменить echo на return.

Спасибо. Помогло.

S
На сайте с 30.09.2016
Offline
469
#9

Экстрасенс, плюсую. Вообще, здесь забавная вещь происходит. Результат выполнения echo выводится в буфер после окончания выполнения команды, то есть после точки с запятой. А в процессе этого происходит выполнение промежуточного echo, у которого точка с запятой появляется раньше - вот он и выскакивает раньше. То есть "вывод как-то по-хитрому организован":). Ну это так, для понимания.

Ragnarok
На сайте с 25.06.2010
Offline
239
#10
Sitealert:
Вообще, здесь забавная вещь происходит.

так а что ожидать от функции, которая сама подключает файл (название которого захардкожено), подключается к базе (аналогично), делает запрос к базе, не экранируя $id (привет, sql-инъекции!) ещё и сразу делает echo)

//TODO: перестать откладывать на потом

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий