Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Krzaczki w header
Forum PHP.pl > Forum > Przedszkole
Mefiuu
Witam. Zrobiłem system uploadu i pobierania. Pobieranie działało dotychczas dobrze, toteż dziwi mnie trochę teraźniejsze jego zachowanie. Otóż przy uploadzie dodaję do bazy info o pliku a przy downloadzie działa taki kod:

  1. $id = $_GET['file'];
  2.  
  3. if(isset($_GET['file']) && $_GET['file']==$id) {
  4.  
  5. $select = mysql_query("SELECT name, rozszerzenie FROM download WHERE id='$id'");
  6. $select = mysql_fetch_assoc($select);
  7.  
  8. $typ = $select['rozszerzenie'];
  9. $name = $select['name'];
  10.  
  11. header("Content-Type: $typ");
  12. header("Content-Disposition: attachment; filename=$name");
  13.  
  14. flush();
  15. readfile('files/'.$name);
  16.  
  17. }
  18.  


Ten kod sam skleciłem i działał do tej pory. Później jednak zaczęły dziać się cyrki i po kliknięciu 'pobierz' zaczęły wyskakiwać 'krzaczki' takie jak:

Cytat
��ࡱ�


Kompletnie nie wiem co może być przyczyną tego że działało a teraz sypie błędami, których nie mogę pojąć. O co może chodzić? Może to być wina tego, że najpierw mam w download.php cały plik a na końcu ten kod? Może ten kod dać w osobnym pliku i się do niego odwoływać?
Proszę o podpowiedzi i dziękuję.
l0ud
Cytat
Może to być wina tego, że najpierw mam w download.php cały plik a na końcu ten kod?


To znaczy? Jeżeli ten kod nic wcześniej nie wysyła do przeglądarki (echo, zamknięcie znacznika php i wyplucie html etc) to nie ma żadnego problemu.

Pierwsze co mi przychodzi do głowy to BOM dodane na początku pliku. Zapisz ten skrypt edytorem Notepad++ w kodowaniu UTF-8 bez BOM (zwykły notatnik tego nie potrafi) i sprawdź czy pomogło. Jak nie podaj zawartość całego pliku download.php smile.gif
Mefiuu
to znaczy że mam 'wygląd' cały wcześniej, a ten kod co podałem to na końcu, po znaczniku </html>

Cytat
Pierwsze co mi przychodzi do głowy to BOM dodane na początku pliku. Zapisz ten skrypt edytorem Notepad++ w kodowaniu UTF-8 bez BOM (zwykły notatnik tego nie potrafi) i sprawdź czy pomogło. Jak nie podaj zawartość całego pliku download.php


Notatnik dawno mam za sobą, teraz każdą stronę tak robię jak pisałeś, także tą. Więc to nie w tym też na pewno tkwi problem.

kod

  1. <?php
  2. include("core.php");
  3. ?>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  5. <html xmlns="http://www.w3.org/1999/xhtml">
  6. <head>
  7. <title>archiwum</title>
  8. <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  9. <meta http-equiv="Reply-to" content="mefiuu93@gmail.com" />
  10. <meta http-equiv="Content-Language" content="pl" />
  11. <link rel="stylesheet" href="style/style.css" type="text/css" />
  12. <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script>
  13. <script type="text/javascript" src="js/core.js"></script>
  14. </head>
  15. <body>
  16.  
  17. <div id="search">
  18. <form action="search.php" name="szukaj" method="post">
  19. <input type="text" name="search" value="Szukaj..." /><input type="submit" name="wyszukaj" value="Wyszukaj" />
  20. </form>
  21. </div>
  22.  
  23. <div id="bar2">
  24. <a href="index.php">Panel</a><a href="top.php">TOP10</a><a class="wyroznij" href="#">Wyróżnione</a><a href="help.php">Pomoc</a><a href="index.php?logout=yes">Wyloguj się</a>
  25. </div>
  26.  
  27. <div id="window2">
  28. <div id="up2">
  29. Pobierz interesujący Cię materiał
  30. </div>
  31. <div id="form2">
  32.  
  33. <table class="category">
  34. <tr>
  35. <td><a href="download.php">Wszystko</a></td>
  36. <td><a href="download.php?type=other">Inne</a></td>
  37. <td><a href="download.php?type=scans">Skany</a></td>
  38. <td><a href="download.php?type=helpers">Pomoce</a></td>
  39. <td><a href="download.php?type=text">Tekst</a></td>
  40. </tr>
  41. </table>
  42. <br />
  43.  
  44.  
  45. <?php
  46.  
  47.  
  48. mysql_connect('**', '**', '**');
  49.  
  50. $down_lev = mysql_query("SELECT download_level FROM login WHERE name='".$_SESSION['login']."'");
  51. $down_lev = mysql_result($down_lev, 0, 0);
  52.  
  53. $_SESSION['level'] = $down_lev;
  54.  
  55.  
  56. if (isset($_GET['type']) && $_GET['type']=='sciagi') {
  57.  
  58. selectMaterial('Ściąga');
  59.  
  60. }
  61. elseif(isset($_GET['type']) && $_GET['type']=='skany') {
  62.  
  63. selectMaterial('Skany');
  64.  
  65. }
  66. elseif(isset($_GET['type']) && $_GET['type']=='pomoce') {
  67.  
  68. selectMaterial('Pomoce');
  69.  
  70. }
  71. elseif(isset($_GET['type']) && $_GET['type']=='zadania') {
  72.  
  73. selectMaterial('Zadania');
  74.  
  75. }
  76. else {
  77.  
  78. $pliki = mysql_query("SELECT * FROM download ORDER BY id DESC");
  79.  
  80. echo "<table class=\"download\">
  81. <thead>
  82. <tr>
  83. <th>ID:</th><th>Rodzaj:</th><th class=\"opis\">Opis:</th><th>Data:</th><th>Wrzucił:</th><th>Rozmiar:</th><th>Pobrano:</th>";
  84.  
  85. if($_SESSION['level']==1 || $_SESSION['level']==3) {
  86. echo "<th colspan=\"3\">Opcje</th>";
  87. }
  88. else {
  89. echo "<th>Opcje</th>";
  90. }
  91.  
  92. echo "</tr>
  93. </thead><tbody>";
  94. $i = 1;
  95. while($r = mysql_fetch_assoc($pliki)) {
  96. if($i % 2 == 0) {
  97. echo "<tr class=\"tbl1\"><td>";
  98. }
  99. else {
  100. echo "<tr class=\"tbl2\"><td>";
  101. }
  102. echo $i;
  103. echo "</td><td>";
  104. echo $r['rodzaj'];
  105. echo "</td><td>";
  106. echo $r['opis'];
  107. echo "</td><td>";
  108. echo $r['data'];
  109. echo "</td><td>";
  110. echo $r['autor'];
  111. echo "</td><td>";
  112.  
  113. if($r['rozmiar']>1024) {
  114. echo round($r['rozmiar']/1024);
  115. echo " MB</td><td>";
  116. }
  117. else {
  118. echo $r['rozmiar'];
  119. echo " kB</td><td>";
  120. }
  121. echo $r['pobrano'];
  122.  
  123. if($r['pobrano']=='1') {
  124. echo " raz</td><td>";
  125. }
  126. else {
  127. echo " razy</td><td>";
  128. }
  129.  
  130. if($_SESSION['level'] == 1 || $_SESSION['level']==3) {
  131. echo "Edytuj</td><td><a href=\"download.php?delete=".$r['id']."\">Usuń</a></td><td><a href=\"?file=".$r['id']."\">Pobierz</a></td>";
  132. }
  133. else {
  134. echo "<a href=\"?file=".$r['id']."\">Pobierz</a></td>";
  135. }
  136. echo "</tr>";
  137. $i++;
  138. }
  139.  
  140. echo "</tbody></table>";
  141. }
  142.  
  143. if (isset($_GET['delete']) && is_numeric($_GET['delete'])) {
  144. $id = $_GET['delete'];
  145.  
  146. $nazwa = mysql_query("SELECT name FROM download WHERE id='$id'");
  147. $nazwa = mysql_result($nazwa, 0, 0);
  148.  
  149. $usun = mysql_query("DELETE FROM download WHERE id='$id'");
  150.  
  151. if ($usun && unlink('files/'.$nazwa)) {
  152. addLog($_SESSION['login'].' usunął plik', 'O nazwie '.$nazwa, 'delete');
  153. header('location: download.php');
  154. }
  155.  
  156. }
  157. elseif(isset($_GET['delete']) && !is_numeric($_GET['delete'])) {
  158. header('location: download.php');
  159. }
  160. ?>
  161.  
  162. </div>
  163. <div id="footer2">
  164. Created by Mati &copy;
  165. </div>
  166. </div>
  167.  
  168. </body>
  169. </html>
  170.  
  171.  
  172. <?php
  173.  
  174. $id = $_GET['file'];
  175.  
  176. if(isset($_GET['file']) && $_GET['file']==$id) {
  177.  
  178. $select = mysql_query("SELECT name, rozszerzenie FROM download WHERE id='$id'");
  179. $select = mysql_fetch_assoc($select);
  180.  
  181. $typ = $select['rozszerzenie'];
  182. $name = $select['name'];
  183.  
  184. header("Content-Type: $typ");
  185. header("Content-Disposition: attachment; filename=$name");
  186.  
  187. flush();
  188. readfile('files/'.$name);
  189. }
  190.  
  191. ?>



ogólnie to jest w nim wymieszane wszystko, połączenia, widok i logika, ale niestety nie umiem bawić się z czymś zaawansowanym.

Pozdrawiam.
l0ud
To nie powinno tak wyglądać. Przed wysłaniem pliku nie powinno być wysłane do przeglądarki nic innego. Ty wysyłasz jakiś html.

Sugeruję albo wydzielić kod pobierający do innego pliku i linkować do niego (bezpośrednio przeglądarkę, nie includy!), albo opakować ten kod html co jest wyżej w if'y wykluczające wysłanie go w momencie działania skryptu pobierającego plik. Pierwsze co ma otrzymać przeglądarka to te headery. I uważaj na puste linie przed i po znacznikach <?php ?> - ich też właściwie nie powinno być.
Mefiuu
Czyli sugerujesz aby to wyglądało mniej więcej tak? :

lista.php

  1.  
  2. <?php
  3. include("core.php");
  4. ?>
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  6. <html xmlns="http://www.w3.org/1999/xhtml">
  7. <head>
  8. <title>archiwum</title>
  9. <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  10. <meta http-equiv="Reply-to" content="mefiuu93@gmail.com" />
  11. <meta http-equiv="Content-Language" content="pl" />
  12. <link rel="stylesheet" href="style/style.css" type="text/css" />
  13. <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script>
  14. <script type="text/javascript" src="js/core.js"></script>
  15. </head>
  16. <body>
  17.  
  18. <div id="search">
  19. <form action="search.php" name="szukaj" method="post">
  20. <input type="text" name="search" value="Szukaj..." /><input type="submit" name="wyszukaj" value="Wyszukaj" />
  21. </form>
  22. </div>
  23.  
  24. <div id="bar2">
  25. <a href="index.php">Panel</a><a href="top.php">TOP10</a><a class="wyroznij" href="#">Wyróżnione</a><a href="help.php">Pomoc</a><a href="index.php?logout=yes">Wyloguj się</a>
  26. </div>
  27.  
  28. <div id="window2">
  29. <div id="up2">
  30. Pobierz interesujący Cię materiał
  31. </div>
  32. <div id="form2">
  33.  
  34. <table class="category">
  35. <tr>
  36. <td><a href="download.php">Wszystko</a></td>
  37. <td><a href="download.php?type=other">Inne</a></td>
  38. <td><a href="download.php?type=scans">Skany</a></td>
  39. <td><a href="download.php?type=helpers">Pomoce</a></td>
  40. <td><a href="download.php?type=text">Tekst</a></td>
  41. </tr>
  42. </table>
  43. <br />
  44.  
  45.  
  46. <?php
  47. mysql_connect('***', '**', '**');
  48.  
  49. $down_lev = mysql_query("SELECT download_level FROM login WHERE name='".$_SESSION['login']."'");
  50. $down_lev = mysql_result($down_lev, 0, 0);
  51.  
  52. $_SESSION['level'] = $down_lev;
  53.  
  54.  
  55. if (isset($_GET['type']) && $_GET['type']=='sciagi') {
  56.  
  57. selectMaterial('Ściąga');
  58.  
  59. }
  60. elseif(isset($_GET['type']) && $_GET['type']=='skany') {
  61.  
  62. selectMaterial('Skany');
  63.  
  64. }
  65. elseif(isset($_GET['type']) && $_GET['type']=='pomoce') {
  66.  
  67. selectMaterial('Pomoce');
  68.  
  69. }
  70. elseif(isset($_GET['type']) && $_GET['type']=='zadania') {
  71.  
  72. selectMaterial('Zadania');
  73.  
  74. }
  75. else {
  76.  
  77. $pliki = mysql_query("SELECT * FROM download ORDER BY id DESC");
  78.  
  79. echo "<table class=\"download\">
  80. <thead>
  81. <tr>
  82. <th>ID:</th><th>Rodzaj:</th><th class=\"opis\">Opis:</th><th>Data:</th><th>Wrzucił:</th><th>Rozmiar:</th><th>Pobrano:</th>";
  83.  
  84. if($_SESSION['level']==1 || $_SESSION['level']==3) {
  85. echo "<th colspan=\"3\">Opcje</th>";
  86. }
  87. else {
  88. echo "<th>Opcje</th>";
  89. }
  90.  
  91. echo "</tr>
  92. </thead><tbody>";
  93. $i = 1;
  94. while($r = mysql_fetch_assoc($pliki)) {
  95. if($i % 2 == 0) {
  96. echo "<tr class=\"tbl1\"><td>";
  97. }
  98. else {
  99. echo "<tr class=\"tbl2\"><td>";
  100. }
  101. echo $i;
  102. echo "</td><td>";
  103. echo $r['rodzaj'];
  104. echo "</td><td>";
  105. echo $r['opis'];
  106. echo "</td><td>";
  107. echo $r['data'];
  108. echo "</td><td>";
  109. echo $r['autor'];
  110. echo "</td><td>";
  111.  
  112. if($r['rozmiar']>1024) {
  113. echo round($r['rozmiar']/1024);
  114. echo " MB</td><td>";
  115. }
  116. else {
  117. echo $r['rozmiar'];
  118. echo " kB</td><td>";
  119. }
  120. echo $r['pobrano'];
  121.  
  122. if($r['pobrano']=='1') {
  123. echo " raz</td><td>";
  124. }
  125. else {
  126. echo " razy</td><td>";
  127. }
  128.  
  129. if($_SESSION['level'] == 1 || $_SESSION['level']==3) {
  130. echo "Edytuj</td><td><a href=\"download.php?delete=".$r['id']."\">Usuń</a></td><td><a href=\"?file=".$r['id']."\">Pobierz</a></td>";
  131. }
  132. else {
  133. echo "<a href=\"?file=".$r['id']."\">Pobierz</a></td>";
  134. }
  135. echo "</tr>";
  136. $i++;
  137. }
  138.  
  139. echo "</tbody></table>";
  140. }
  141.  
  142. if (isset($_GET['delete']) && is_numeric($_GET['delete'])) {
  143. $id = $_GET['delete'];
  144.  
  145. $nazwa = mysql_query("SELECT name FROM download WHERE id='$id'");
  146. $nazwa = mysql_result($nazwa, 0, 0);
  147.  
  148. $usun = mysql_query("DELETE FROM download WHERE id='$id'");
  149.  
  150. if ($usun && unlink('files/'.$nazwa)) {
  151. addLog($_SESSION['login'].' usunął plik', 'O nazwie '.$nazwa, 'delete');
  152. header('location: download.php');
  153. }
  154.  
  155. }
  156. elseif(isset($_GET['delete']) && !is_numeric($_GET['delete'])) {
  157. header('location: download.php');
  158. }
  159. ?>
  160. </div>
  161. <div id="footer2">
  162. Created by Mati &copy;
  163. </div>
  164. </div>
  165.  
  166. </body>
  167. </html>


download.php
  1. <?php
  2. $id = $_GET['file'];
  3.  
  4. if(isset($_GET['file']) && $_GET['file']==$id) {
  5.  
  6. $select = mysql_query("SELECT name, rozszerzenie FROM download WHERE id='$id'");
  7. $select = mysql_fetch_assoc($select);
  8.  
  9. $typ = $select['rozszerzenie'];
  10. $name = $select['name'];
  11.  
  12. header("Content-Type: $typ");
  13. header("Content-Disposition: attachment; filename=$name");
  14.  
  15. flush();
  16. readfile('files/'.$name);
  17. }
  18. ?>


żeby z lista.php odwoływać się linkami do download.php i tam odbierać te dane?

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.