Autor Zpráva
kozusnik.jan
Profil *
Když dám odeslání formuláře, tak se má pomocí fce header přesměrovat jinam, ale mi to píše "Warning: Cannot add header information - headers already sent by (output started at c:\apache\htdocs\pokusy\fotoablum.php:9) in c:\apache\htdocs\pokusy\fotoablum.php on line 39"
Anglicky sice umím, takže jsem si to přeložil, ale nevím, jak to zpravit.
ZDROJOVÝ KÓD:
<?php
if($ok) {
 
 $soubor = "a_" . date("Ymd_Gis") . ".html";
 $fp = fopen($soubor, "w") or die ("Nelze otevřít soubor!!");
 fwrite($fp, "<h1 align=center>$album</h1>\n");
 fwrite($fp, "<p align=center><i>$popis</i></p>\<p>\n");
 fwrite($fp, "<p><p align=center>\n");
 for($i=1; $i<=5;$i++) {
   $fotka = "fotka" . $i;
   $fotka_name = $fotka . "_name";
   $fotka_type = $fotka . "_type";
   $fotka_size = $fotka . "_size";
   $popis = "popis" . $i;
   if($$fotka_type=="image/jpeg" ||
      $$fotka_type=="image/pjpeg" ||
	  $$fotka_type=="image/gif" ||
	  $$fotka_type=="image/x_png" ) {
	  copy($$fotka, "./images/{$$fotka_name}")	;
	  fwrite($fp, "<table align=left><tr><td align=center>");
	  fwrite($fp, "<a href=\"./images/{$$fotka_name}\" target=\"foto\">");
	  fwrite($fp, "<img src=\"./images/{$$fotka_name}\" alt=\"Fotografie\" border=0 width=300></a>
	               </td></tr>\n");
	  fwrite($fp, "<td><td align=center><i>{$$popis}</i>\n");
	  fwrite($fp, "</table>");
	 }
	if($i==3) fwrite($fp, "<br clear=left\n");
   }
   fwrite($fp, "</p>\n");
   fclose($fp);
   header("Location: $soubor");
   }
   else {
   ?>
   <form action="<?php echo $PHP_SELF ?>" method="post" enctype="multipart/form-data">
   <table>
   <tr>
   <td><b>Album:</b></td><td><input type="text" size="25" name="album" /></td>
   </tr>
   <tr>
   <td><b>Popis:</b></td><td><input type="text" size="25" name="popis" /></td>
   </tr>
   </table>
   <table corder=1>
   <tr>
   <th>Fotky</th><th>Soubor</th><th>Popis</th>
   </tr>
   <tr>
   <td>1</td><td><input type="file" name="fotka1" /></td><td><input type="text" name="popis1" /></td>
   </tr>
   <tr>
   <td>2</td><td><input type="file" name="fotka2" /></td><td><input type="text" name="popis2" /></td>
   </tr>
   <tr>
   <td>3</td><td><input type="file" name="fotka3" /></td><td><input type="text" name="popis3" /></td>
   </tr>
    <tr>
   <td>4</td><td><input type="file" name="fotka4" /></td><td><input type="text" name="popis4" /></td>
   </tr>
    <tr>
   <td>5</td><td><input type="file" name="fotka5" /></td><td><input type="text" name="popis5" /></td>
   </tr>
   </table>
   <input type="submit" name="ok" value="Vložit" />
   </form>
   <?php } ?>
mckay
Profil
kozusnik.jan:
Nebudu ti opravovat konkrétní formulář, ale vysvětlím ti to takto - pokud chceš modifikovat hlavičku, nesmíš mít předtím žádný výstup, tudíž před funkcí header(); nesmí být žádný echo, ani html tag, ani mezera chápeš?
kozusnik.jan
Profil *
No, když jsem to napsal úplně nahoru nad DOCTYPE, tak mi to hodilo chybu. Takže moc nechápu :-( . Mohl bys to trošku přesněji vysvětlit?
Dík
mckay
Profil
kozusnik.jan:
Dobře, ukážu to na příkladech:

Špatně:
<?php 
echo "Neco, co by tady vůbec nemělo co dělat";
header("location: http://nekam.cz");
?>
<!Doctype... >
<html>
  <head>

Dobře:
<?php
if(isset($_GET["presmerovat"]))
{
header("location: http://nekam.cz");
}
?>
<html>
  <head>
  </head>
 ...

Pointou je, že v první ukázce máš skript sice na začátku, ale ten skript v době svého běhu vygeneruje text, tudíž ztrácíš možnost upravit hlavičku.
Pointou druhého příkladu je, že můžeš použít jakoukoliv konstrukci, která neprodukuje výstup a ještě stále potom můžeš měnit hlavičku... jakmile prostě vygeneruješ jakýkoliv znak, hlavičku není možné modifikovat.
kozusnik.jan
Profil *
mckay:Dík, už to jede :-D

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0