Avatar billede den-evil Nybegynder
27. december 2005 - 12:00 Der er 21 kommentarer

headers already sent by

Har denne funktion:
<?
function showImage($idartikel){

include("includes/config.inc.php");
$idartikel = $_REQUEST['pageid'];
$sql    = "SELECT * FROM artikel_images WHERE idartikel = '$idartikel'";
$result = mysql_query ($sql);

if (mysql_num_rows ($result)>0) {
  $row = @mysql_fetch_array ($result);

  $image_type = $row["image_type"];
  $image = $row["image"];
  Header ("Content-type: $image_type");
  print $image;
 
    }
}
?>
--------------------

Når jeg så henter funktionen ud på siden, får jeg fejlen med headers...
Hvis jeg tager denne
Header ("Content-type: $image_type");
og smider den i toppen af den fil jeg skal have det vist på virker det ikke, da den aldrig får fat i selve $image_type ?

Hvad gør jeg
Avatar billede jaw Nybegynder
27. december 2005 - 12:03 #1
Du har nok et output til browseren før du sætter din header, og det duer ikke. Der må ikke være noget output, som nye linier, mellemrum, bogstaver eller lign.
Avatar billede erikjacobsen Ekspert
27. december 2005 - 12:04 #2
Du skal bare sørge for at der ikke sendes nogen tegn ud inden din header, hverken mellemrum eller andet. Fejlbeskeden siger faktisk hvor det sker. Det er det eneste du behøver lave om.
Avatar billede leif Seniormester
27. december 2005 - 12:04 #3
Det er fordi der er printet til skærmen før denne funktion kommer !

http://dk2.php.net/manual/da/function.ob-start.php skulle hvis kunne hjælpe på problemet, men det er ikke optimalt. (Har aldrig selv brugt den)

Det vil være med at sikre dig at ingen tekst blev udskrivet før header.
Avatar billede den-evil Nybegynder
27. december 2005 - 12:07 #4
Igen, hvis jeg sætter headeren før alt, vil den aldrig få fat i selve $image_type !
Henter billedet(Funktionen) ud midt på siden, og vil derfor ikke kunne blive sat før der kommer tekst jo !
Avatar billede jaw Nybegynder
27. december 2005 - 12:09 #5
Kan du vel nok. Hvis du sætter headeren i starten ved at kalde funktionen i toppen, men kun bruge den senere på siden. Altså mener jeg, at du skal ændre:

print $image;
til:
return $image;

og i filen så bruge:
$image = showImage(...);

Så vil headeren blive sat, og du bør senere på siden kunne bruge print $image; når det passer ind hvor du vil have det...
Avatar billede erikjacobsen Ekspert
27. december 2005 - 12:15 #6
det eneste du behøver ændre, er at sørge for at der ikke kommer tegn ud før din header. Måske sker det i din include fil - hvad siger fejlbeskeden?
Avatar billede den-evil Nybegynder
27. december 2005 - 12:16 #7
Hmm, det ser ud til at virke på sin vis, får ingen fejl nu, men den spytter ikke billedet ud...
Har prøvet at skrive sql'en ud, og det se fint ud:
SELECT * FROM artikel_images WHERE idartikel = '38'

Og i databasen ligger der 2 billeder der har $idartikel som 38
Avatar billede erikjacobsen Ekspert
27. december 2005 - 12:18 #8
Hvordan ser koden så ud? Har du et link?
Avatar billede den-evil Nybegynder
27. december 2005 - 12:19 #9
eller hov, nej, får stadig en fejl...

arning: Cannot modify header information - headers already sent by (output started at c:\websteder\Andigena\includes\functions.php:32) in c:\websteder\Andigena\includes\functions.php on line 117

Linien er stadig header("Content.....");
Avatar billede erikjacobsen Ekspert
27. december 2005 - 12:20 #10
functions.php on line 117  - hvad står der der?
Avatar billede jaw Nybegynder
27. december 2005 - 12:20 #11
Vel nærmere i functions linie 32 - det er der dit output til browseren kommer.
Avatar billede den-evil Nybegynder
27. december 2005 - 12:21 #12
Funktionen ser sådanne ud:

<?
function showImage($idartikel){

include("includes/config.inc.php");
$idartikel = $_REQUEST['pageid'];
$sql    = "SELECT * FROM artikel_images WHERE idartikel = '$idartikel'";
#echo $sql;
$result = mysql_query ($sql);

if (mysql_num_rows ($result)>0) {
  $row = @mysql_fetch_array ($result);

  $image_type = $row["image_type"];
  $image = $row["image"];
  Header ("Content-type: $image_type");
 
  return $image;
 
    }
}
?>

----------------

Der hvor jeg henter funktionen ud ser sådanne ud:

<?
#header("Content-type: image/jpeg");
include("includes/config.inc.php");
include_once("includes/meta.php");
include_once("includes/functions.php");
include("admin/lib/vis_artikel.php");
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title><? echo $metatitle; ?></title>
<meta name="Keywords" content="<? echo $metakeywords; ?>" />
<meta name="Description" content="<? echo $metadescription; ?>" />
<link href="css/andigena.css" rel="stylesheet" type="text/css" />
<script language="JavaScript" type="text/javascript">
var bookmarkurl="http://www.andigena.dk"
var bookmarktitle="Andigena Rejser"
function addbookmark(){
if(document.all)window.external.AddFavorite(bookmarkurl,bookmarktitle)
}
var theImages = new Array() // do not change this

theImages[0] = 'images/top-images/front.jpg'
theImages[1] = 'images/top-images/pool.jpg'
// do not edit anything below this line
var j = 0
var p = theImages.length;
var preBuffer = new Array()
for (i = 0; i < p; i++){
  preBuffer[i] = new Image()
  preBuffer[i].src = theImages[i]
}
var whichImage = Math.round(Math.random()*(p-1));
function showImage(){
document.write('<img src="'+theImages[whichImage]+'" alt="" title="" width="762" height="160" border="0">');
}
</script>

</head>

<body>
<table width="762" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td id="header">
                    <? $idartikel = $_REQUEST['pageid'];?>
              <? $image = showImage($idartikel);?>
</td></tr></table>

</body>
</html>
Avatar billede jaw Nybegynder
27. december 2005 - 12:23 #13
Ja, og det var så denne del:
<? $image = showImage($idartikel);?>
som jeg mener du bør smide i toppen af filen. Der hvor den linie så står nu, smider du:
<? print $image; ?>
Avatar billede erikjacobsen Ekspert
27. december 2005 - 12:29 #14
Ja, linie 32 i functions.php - hvad står der der?

Jeg mener ikke du skal lave en snus om - ud over at fjerne de mellemrum eller linieskift, du har overflødigt.
Avatar billede erikjacobsen Ekspert
27. december 2005 - 12:34 #15
Øh, du ved godt, at hvis du skal have billeder der ligger i en tabel i en database, så skal du have et script, der alene giver dig billedet, og bruge et img-tag sådan ca.

  <img scr="ditscript.php?id=117"> 

ditscript.php gør kun dette at sende en passende header, og indholdet, li'som din funktion: showImage gør i spørgsmålet.
Avatar billede erikjacobsen Ekspert
27. december 2005 - 12:35 #16
Ja, ja, dumt tastatur:

    <img src="ditscript.php?id=117">
Avatar billede den-evil Nybegynder
27. december 2005 - 14:13 #17
Ok, nu får jeg ingen fejl og den skriver billedet ud, men den skriver kun 1 billede selvom der er flere ?

  while($row = mysql_fetch_array($result)){
  #$row = @mysql_fetch_array ($result);

  $image_type = $row["image_type"];
  $image = $row["image"];
  Header ("Content-type: $image_type");
 
  return $image;

 
    }
Avatar billede erikjacobsen Ekspert
27. december 2005 - 14:43 #18
Skal du have mere end et billede, så skal du have flere img-tags. I parametrene til dit script skal du så angive hvilket billede du vil have fat i. Hvor mange billeder kan der være?

I koden du viser nu er det ikke smart med en while-løkke hvori der er en return. Så hopper man jo ud af while-løkken. ;)
Avatar billede den-evil Nybegynder
27. december 2005 - 14:47 #19
Der kan være et uendeligt antal af billeder, kommer helt an på hvor mange brugeren uploader...
Avatar billede den-evil Nybegynder
27. december 2005 - 14:58 #20
ligemeget, fandt ud af det :) - så skal jeg bare bruge et svar
Avatar billede erikjacobsen Ekspert
27. december 2005 - 15:02 #21
Ingen point til mig, tak.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester