2014-02-19 2 views
0

У меня возникла проблема - «HTTP-заголовки уже отправлены». В нем говорится, что они отправляются по линии <title><? echo $hall_name['name'];?></title>, которую я понимаю, потому что у меня есть «эхо».PHP echo без отправки заголовков

Мне нужно иметь заголовок страницы echo'd из базы данных, поэтому я не уверен, как я должен работать над этой проблемой.

<?php 
// First execute our common code to connection to the database and start the session 
require("common.php"); 

//find the university's id from the url 
$current_id = $_GET[id]; 

//run a query to find the name of the hall, using the id in the url ($current_id) 
    if ($findname = $db->prepare("SELECT * FROM hall WHERE id = :current_id")) { 
    $findname->bindParam(':current_id', $current_id); 
    $findname->execute(); // Execute the prepared query. 

//search table for all fields and save them in $hall_name 
$nametemp = $findname->fetchAll(); 
foreach($nametemp as $hall_name) { 
?> 
<head> 

<title><? echo $hall_name['name'];?></title> 

</head> 

<body> 

<div id="Name"> 
<? echo $hall_name['name']; }}?> 
</div> 

<?php // content="text/plain; charset=utf-8" 
require_once ('jpgraph/jpgraph.php'); 
require_once ('jpgraph/jpgraph_line.php'); 

$datay1 = array(20,15,23,15); 
$datay2 = array(12,9,42,8); 
$datay3 = array(5,17,32,24); 

// Setup the graph 
$graph = new Graph(300,250); 
$graph->SetScale("textlin"); 

$theme_class=new UniversalTheme; 

$graph->SetTheme($theme_class); 
$graph->img->SetAntiAliasing(false); 
$graph->title->Set('Filled Y-grid'); 
$graph->SetBox(false); 

$graph->img->SetAntiAliasing(); 

$graph->yaxis->HideZeroLabel(); 
$graph->yaxis->HideLine(false); 
$graph->yaxis->HideTicks(false,false); 

$graph->xgrid->Show(); 
$graph->xgrid->SetLineStyle("solid"); 
$graph->xaxis->SetTickLabels(array('A','B','C','D')); 
$graph->xgrid->SetColor('#E3E3E3'); 

// Create the first line 
$p1 = new LinePlot($datay1); 
$graph->Add($p1); 
$p1->SetColor("#6495ED"); 
$p1->SetLegend('Line 1'); 

// Create the second line 
$p2 = new LinePlot($datay2); 
$graph->Add($p2); 
$p2->SetColor("#B22222"); 
$p2->SetLegend('Line 2'); 

// Create the third line 
$p3 = new LinePlot($datay3); 
$graph->Add($p3); 
$p3->SetColor("#FF1493"); 
$p3->SetLegend('Line 3'); 

$graph->legend->SetFrameWeight(1); 

// Output line 
$graph->Stroke(); 

?> 

</body> 
</html> 

(постскриптум я удалил большую часть HTML кода, который не имеет отношения)

+1

Вы пытаетесь вывести изображение как часть страницы? Если это так, лучшим способом было бы поместить создание изображения на отдельную страницу и вставить его в HTML этого с тегами ''. –

+2

вы выводите HTML перед выводом заголовков. Переместите заголовки над HTML. – Tularis

+0

Что делает '$ graph-> Stroke();' do? –

ответ

1

вы посылаете HTMLs, прежде чем ваши заголовки изображения отправляются. Заголовки должны быть первым, что браузер должен получить перед любыми выходами.

Решение здесь заключается в том, что вы разделяете код, который генерирует изображение, и код, который перекликается с обычным html на два разных сценария.

Рассмотрите первый скрипт foo.php, содержащий код ТОЛЬКО для создания изображений. Удостоверьтесь, что вы ничего не слышите здесь.

Тогда есть все остальное (HTMLs & страница содержание) в другом сценарии (позволяет сказать bar.php). И разместите здесь тег изображения таким образом, чтобы он отображал изображение, которое генерирует первый скрипт (foo.php).

<img src="foo.php"> 
+0

Идеально, спасибо большое – user3329161

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