2015-09-09 3 views
0

У меня есть вопрос, есть способ обновить $ error, когда его значение изменится на внешний listPagPrinc.php?обновить переменную php от внешнего кода

<div id="statoPag"> 
    <h3> Stato : <?php echo $error; ?> </h3> 
</div> 

<div class="headerCont"> 
    <?php 
     include('procedure/listPagPrinc.php'); 
    ?> 
</div> 
+2

Нет, это невозможно, но все же может быть решение: вы можете 'inlude()', что файл ранее, и сохранить его содержимое в буфере, а затем заполнить вашу точку зрения позже с этим переменным и буферным содержанием , Нам понадобится больше кода, чтобы больше помочь. – arkascha

+0

Вы не можете сделать это с помощью PHP. попробуйте использовать некоторые Javascript, Ajax, возможно, серверная передача может вам помочь. http://www.w3schools.com/html/html5_serversentevents.asp – ErasmoOliveira

+0

Согласен с @arkascha; однако, если вы рассматриваете изменение содержимого файла, см. http://php.net/manual/en/function.file-put-contents.php – sitilge

ответ

1

Не как-есть, нет. Подумайте об этих файлах HTML/PHP, таких как офисный принтер, после того, как он распечатает каждую строку, вы не сможете «вернуться» и распечатать его.

В этом примере все первые 5 строк запускаются и эффективно " установленный в камне ", прежде чем что-либо вызывается в procedure/listPagPrinc.php.

Если вы являетесь просто спекуляцией, вы не можете просто включить procedure/listPagPrinc.php, прежде чем вы окажете $error, потому что он также печатает дополнительный HTML, вам просто нужно инкапсулировать его код в функции как можно лучше: один для установки значения $error и отдельный для вывода HTML-кода.

+0

Возможно, вы захотите взглянуть на «буферизацию вывода». – arkascha

+1

Я был упрощен, чтобы не путать ситуацию - я хорошо знаю буферизацию вывода, я просто не думаю, что это особенно полезно здесь. Более вероятно, что любая форма управляющего потока (функции или классы) будет лучшим решением в этом конкретном случае. – ahoffner

1

Необходимо указать текст содержание тега; вы можете сделать это, например. jQuery во время выполнения. Это предпочтительный способ, если некоторые теги и только те, которые изменяются в течение жизни страницы приложения, и вы не хотите перезагружать всю страницу с нуля.

В этом случае из listPagPrinc.php, вы можете выводить некоторые Javascript код:

echo <<<JAVA1 
<script> 
    alert("Ciao, mondo"); 
</script> 
JAVA2; 

или в случае использования JQuery

echo <<<JAVA2 
<script> 
    $('#statoPag h3').text("Errore!"); 
</script> 
JAVA2; 

Весьма вероятно, что вызов должен будет находиться внутри JQuery onDocumentReady чтобы она выполнялась.

Лучший и быстрый способ (и, как заметил @arkascha, более приятный и надежный): вы можете сгенерировать заголовок от listpagPrinc.php или от обертки.

// file listPagPrincWrapper.php, replace your current file 

// Ideally listPagPrinc could return a text value. In case it is 
// printing it, as seems likely, we capture the output. This way 
// we don't neet to modify the existing code. 

ob_start(); 
include('procedure/listPagPrinc.php'); 
$lpp = ob_get_clean(); 

// At the end, we do the output part. 
print <<<HTML 
<div id="statoPag"> 
    <h3> Stato : {$error}</h3> 
</div> 
<div class="headerCont">{$lpp}</div> 
HTML; 
+1

Какой уродливый и рискованный подход. Что делать, если javascript отключен на стороне клиента? – arkascha

+0

@arkascha, вы поднимаете хороший момент. Я намекнул, что есть лучший способ; Я теперь поправил свой ответ. – LSerni

Смежные вопросы