Autor Zpráva
mirecekp
Profil
Několik hodin už se peru s tímto kouskem kodu, který by měl vypsat html tabulku do xls souboru.

Teoreticky to funguje pokud do proměné napíšu jen čistý html kod tabulky, pokud ji chci generovat pak z databáze už nastává problém, v samotným generování chyba není to jde. Ovšem takto dohromady...

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in
/administrator-xls.php on line 21

<?php
session_start();
require_once 'database.php';

$temp = "?>
<table border=1>
        <tr>
            <td><strong>Název společnosti</strong></td>
            <td><strong>IČO</strong></td>
            <td><strong>Adresa</strong></td>
            <td><strong>Obchodní zástupce</strong></td>
            <td></td>
            <td></td>
        </tr>
<?php

$vypis = mysql_query('SELECT firmy.id_firma, firmy.id_user, firmy.ico, firmy.nazev, firmy.adresa, user.id, user.jmeno, user.prijmeni, user.username  FROM firmy INNER JOIN user ON firmy.id_user=user.id ORDER BY firmy.nazev');

while ($data = @mysql_fetch_array($vypis) )
{
$id_firma = $data['id_firma'];
$ico = $data['ico'];
$nazev = $data['nazev'];
$adresa = $data['adresa'];
$jmeno = $data['jmeno'];
$prijmeni = $data['prijmeni'];
$username = $data['username'];

echo '<tr>
      <td>$nazev</td>
      <td>$ico</td>
      <td>$adresa</td>
      <td>$jmeno $prijmeni $username</td>
      <td><form name=\"smaz\" action=\"smazat-firmu.php?id_firma=$id_firma&nazev=$nazev\" method=\"POST\"><input type=\"submit\" value=\"Smazat\"></form></td>
      <td><form name=\"smaz\" action=\"uprav-firmu.php?id_firma=$id_firma&ico=$ico&dic=$dic&nazev=$nazev&adresa=$adresa&telefon=$telefon&email=$email\" method=\"POST\"><input type=\"submit\" value=\"Upravit\"></form></td>
      </tr>';
}
?>
</table>

<?php
";
header("Content-Description: File Transfer");
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=\"zaloha.xls\"");
echo $temp;

?>
mirecekp
Profil
Prázdná místa jsem dle parseru překontroloval ale mohu se mýlit... Viděl bych to spíše na problémy s uvozovkama/apostrofama
xmark
Profil
Kde uzavíráš uvozovky, začínající na řádku 5?
Proč na ř. 15 začínáš php, když už jsi začal na ř. 1?
Proč posíláš header úplně na konci, po odeslání výstupu do prohlížeče? // pardon, přehlídl jsem . /// vlastně nepřehlídl, ale to je už jedno
Petr__
Profil *
mirecekp:
Předpokládám, že jste chtěl celý ten blok kódu mezi 5. a 42. řádkem dát do proměnné a pak vypsat na 46. řádku, ale to nejde.

Když jednou použijete echo, tak to natvrdo vyleze do výstupu v daném místě.

Pokud jsem dobře pochopil o co vám jde, tak tohle by mělo fungovat:

<?php
session_start();
require_once 'database.php';

$temp = "
<table border=1>
        <tr>
            <td><strong>Název společnosti</strong></td>
            <td><strong>IČO</strong></td>
            <td><strong>Adresa</strong></td>
            <td><strong>Obchodní zástupce</strong></td>
            <td></td>
            <td></td>
        </tr>
";

$vypis = mysql_query('SELECT firmy.id_firma, firmy.id_user, firmy.ico, firmy.nazev, firmy.adresa, user.id, user.jmeno, user.prijmeni, user.username  FROM firmy INNER JOIN user ON firmy.id_user=user.id ORDER BY firmy.nazev');

while ($data = @mysql_fetch_array($vypis) )
{
$id_firma = $data['id_firma'];
$ico = $data['ico'];
$nazev = $data['nazev'];
$adresa = $data['adresa'];
$jmeno = $data['jmeno'];
$prijmeni = $data['prijmeni'];
$username = $data['username'];

$temp .= "<tr>
      <td>$nazev</td>
      <td>$ico</td>
      <td>$adresa</td>
      <td>$jmeno $prijmeni $username</td>
      <td><form name=\"smaz\" action=\"smazat-firmu.php?id_firma=$id_firma&nazev=$nazev\" method=\"POST\"><input type=\"submit\" value=\"Smazat\"></form></td>
      <td><form name=\"smaz\" action=\"uprav-firmu.php?id_firma=$id_firma&ico=$ico&dic=$dic&nazev=$nazev&adresa=$adresa&telefon=$telefon&email=$email\" method=\"POST\"><input type=\"submit\" value=\"Upravit\"></form></td>
      </tr>";
}

$temp .= "</table>";

header("Content-Description: File Transfer");
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=\"zaloha.xls\"");
echo $temp;

?>

Ale nezkoušel jsem to. Dávat do action formuláře v URL hodnoty IČO, název, atd. není moc vhodné, mělo by vám stačit jen to id firmy a zbytek si načíst až na dotyčné stránce z databáze.
Pak moc nechápu, o co se snažíte na konci s těma hlavičkama.
mirecekp
Profil
xmark:
Kde uzavíráš uvozovky, začínající na řádku 5?
- na řádku 42

Proč na ř. 15 začínáš php, když už jsi začal na ř. 1?
- protože mezi tím je ukončena syntaxe php na řádku 5

Proč posíláš header úplně na konci, po odeslání výstupu do prohlížeče?
- do prohlížeče nic posláno není, nejprve se právě snažím naplnit proměnou $temp která začíná na ř.5 a končí na ř.42 a tento temp následně chci vyvolat jako soubor ke stažení. proto je header až na konci tohoto php souboru, jinak bych proměnou nenaplnil
Petr__
Profil *
Aha, už chápu. Snažíte se o jakési pseudovytvoření Excelovského souboru, tím, že na výstup dáte html tabulku. Pak ale musíte prohlížeči vnutit excelovskou hlavičku:
header('Content-type: application/ms-excel');
Nevím, jestli všechny ty předchozí hlavičky, co tam máte nejsou zbytečné, nebo dokonce kontraproduktivní.
mirecekp
Profil
Petr_:
Děkuji!! To jsem potřeboval.

Ty hlavičky vynutí stažení souboru.
převzato viz - http://www.linuxsoft.cz/article.php?id_article=310

děkuji za pomoc!

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: