Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Co tu jest nie tak?
Forum PHP.pl > Forum > PHP
k_uba
W mojej bazie klumne plik mam w BLOB chce aby moja baza przechowywala pliki pdf'a. Zapytaniem ktore jest ponizej chcialbym aby konkretny plik zostal otwarty do przegladania, pliki bede identyfikowane za pomca id_dokumenty. Ponizszy kod wedlug mnie jest juz OK ale cos nie chce chodzic. POMOCY z gory dzieki
  1. <?php
  2. header('Content-type: application/pdf');
  3. header('Content-Disposition: attachment; filename="$plik"');
  4.  
  5. $conn=@mysql_connect("localhost","root","kuba");
  6. @mysql_select_db("praca",$conn);
  7. $sql="SELECT plik FROM dokumenty WHERE id_dokumenty=52";
  8. $query=mysql_query($sql) or die("blad". mysql_error());
  9. $plik=mysql_fetch_assoc($query);
  10. readfile('$plik');
  11. ?>


To zapytanie dobiera sie do "plik" i powinno go otwierac ale nie chce sad.gif
shpyo
Kod
   header('Content-type: application/pdf');
    header('Content-Disposition: attachment; filename="$plik"');

To nie zadziała nigdy! Bo zmienna $plik w momencie jej wywołania nie istanieje!
bim2
@shpyo nawet jak przeżuci to na dół to i tak nie zadziała ^^ Zauważ jak jest zmienna wywołana, powinno bycć
  1. <?php
  2. header('Content-Disposition: attachment; filename="'.$plik.'"');
  3. ?>


PS. Bez slashy oczywiście (forum je dodało)
PiotrLegnica
Nawet jakby istniała to by to nic nie dało, bo string w apostrofach jest traktowany dosłownie.
Kod powinien wyglądać mniej więcej tak:
  1. <?php
  2. $conn=mysql_connect('localhost','root','kuba');
  3. mysql_select_db('praca',$conn);
  4.  
  5. $query=mysql_query('SELECT plik FROM dokumenty WHERE id_dokumenty=52') or exit('blad '. mysql_error());
  6. list($plik)=mysql_fetch_row($query);
  7.  
  8. header('Content-type: application/pdf');
  9. header('Content-Disposition: attachment; filename="'.$plik.'"');
  10. readfile($plik);
  11. ?>
shpyo
Racja, nie zauwazyłem. Nie zmienia to faktu, że zmiennej w momencie jej wywołania nie ma smile.gif
k_uba
Dzieki juz mi znajduje plik pdf w bazie ale adobe wywala mi bledy ze plik jest uszkodzony.
Dodawanie pliku do bazy mam nastepujace:
  1. ...
  2. <tr>
  3. <td>
  4. <b> Dokument: </b>
  5. </td>
  6. <td>
  7. <input type = 'file' name = 'plik' size = '40' maxlenght = '100' value =
  8. '<?php
  9. if (isset ($_POST ['plik']))
  10. echo $_POST ['plik'];
  11. ?>'
  12. />
  13. </td>
  14. </tr>
  15. ...
  16. </form>


  1. <?php
  2. if (isset ($_POST ['dodaj'])) 
  3. {
  4. if (empty ($_POST ['plik'])) {
  5. $plik = FALSE;
  6. }else{
  7. $plik = $_POST ['plik'];
  8. }
  9. }
  10. ...
  11. $dokumenty=mysql_query("INSERT INTO dokumenty (id_dokumenty, rodzaj, tytul, rok_wydania, slowo_klucz, data_dodania, plik) VALUES('','$rodzaj', '$tytul', '$rok-$miesiac-$dzien', '$slowo_klucz', '$data', '$plik');") or die(mysql_error());
  12. ...
  13. }
  14. ?>


A sama baza ma postac:
  1. CREATE TABLE `dokumenty` (
  2. `Plik` BLOB NOT NULL
  3. ) ENGINE = MYISAM ;
em1X
zastanów się co ty do bazy danych zapisujesz: $_POST['file'] to tablica zawierajaca pewne dane na temat pliku, a nie jego binarna zawartosc.
k_uba
Oki
Ale zmienilem na
  1. <?php
  2. <input type = 'file' name = 'plik' size = '40' maxlenght = '100'/>
  3. ?>

I dalej nie idzie caly czas sa bledy przy odczytywaniu. Wiem marudze ale nie wiem jak sie do tego zabrac worriedsmiley.gif
Czyli jak mam dodac do bazy plik aby byl on porawnie przechowywany i potem odczytywany?
KotDomowy
A nie powinna to być przypadkiem tablica superglobalna $_FILES a nie $_POST questionmark.gif Poza tym tu masz przykłady - dla obrazków - ale zasada jest ta sama:

http://www.weberdev.com/get_example-4063.html - zapis bloba
http://www.weberdev.com/get_example-4062.html - odczyt bloba
em1X
fakt, przeoczylem to z nazwa tablicy tongue.gif nie mniej jednak brakowalo pobierania zawartosci pliku do zmiennej.
k_uba
Dobra dodalem juz ladowanie pliku do bazy Mam w Blobie odpowiednie roziary. Teraz chcialem go otworzyc za pomoca kodu:
  1. <?php
  2. $conn=mysql_connect('localhost','root','kuba');
  3. mysql_select_db('praca',$conn);
  4.  
  5. $query=mysql_query('SELECT plik FROM dokumenty WHERE id_dokumenty=87') or exit('blad'. mysql_error());
  6. list($plik)=mysql_fetch_row($query);
  7.  
  8. header('Content-type: application/pdf');
  9. header('Content-Disposition: attachment; filename="'.$plik.'"');
  10. readfile($plik);
  11. ?>


I teraz moje pytanie SELECT plik ... <- to ma byc ta kolumna w ktorej jest BLOB jak chce go otworzyc za pomoca tej instrukcji powyzej.

Moje dodawanie wyglada tak:
  1. <?php
  2.  
  3. if ((isset($_POST['submit']))&&(isset($_FILES['form_data']))) {
  4. upload();
  5. } else {
  6. show_form();
  7. }//end if
  8.  
  9. function upload() {
  10.  
  11. if (empty ($_POST ['imie'])) {
  12. $imie = FALSE;
  13. }else{
  14. $imie = $_POST ['imie'];
  15. }
  16.  
  17. if (empty ($_POST ['nazwisko'])) {
  18. $nazwisko = FALSE;
  19. }else{
  20. $nazwisko = $_POST ['nazwisko'];
  21. }
  22.  
  23. if (empty ($_POST ['dziedzina'])) {
  24. $dziedzina = FALSE;
  25. }else{
  26. $dziedzina = $_POST ['dziedzina'];
  27. }
  28.  
  29. if (empty ($_POST ['rodzaj'])) {
  30. $rodzaj = FALSE;
  31. }else{
  32. $rodzaj = $_POST ['rodzaj'];
  33. }
  34.  
  35. if (empty ($_POST ['tytul'])) {
  36. $tytul = FALSE;
  37. }else{
  38. $tytul = $_POST ['tytul'];
  39. }
  40.  
  41. if (empty ($_POST ['rok'])) {
  42. $rok = FALSE;
  43. }else{
  44. $rok = $_POST ['rok'];
  45. }
  46.  
  47. if (empty ($_POST ['miesiac'])) {
  48. $miesiac = FALSE;
  49. }else{
  50. $miesiac = $_POST ['miesiac'];
  51. }
  52.  
  53. if (empty ($_POST ['dzien'])) {
  54. $dzien = FALSE;
  55. }else{
  56. $dzien = $_POST ['dzien'];
  57. }
  58.  
  59. if (empty ($_POST ['slowo_klucz'])) {
  60. $slowo_klucz = FALSE;
  61. }else{
  62. $slowo_klucz = $_POST ['slowo_klucz'];
  63. }
  64.  
  65. if (empty ($_FILES ['plik'])) {
  66. $plik = FALSE;
  67. }else{
  68. $plik = $_FILES ['plik'];
  69. }
  70.  
  71.  
  72. //wartosci poczatkowe
  73. $image_file = '';
  74. $name = '';
  75.  
  76. $image_file = $_FILES['form_data']['tmp_name'];// nazwa pomocnicza
  77. $name  = $_FILES['form_data']['name']; //nazwa pliku
  78.  
  79. $plik = fread(fopen($image_file, "r"), filesize($image_file)); //plik wlasciwy
  80. $plik = addslashes($plik);
  81. $data=date("Y-m-d");
  82.  
  83. $conn=@mysql_connect("localhost","root","kuba");
  84. @mysql_select_db("praca",$conn);
  85. $dokumenty=mysql_query("INSERT INTO dokumenty (id_dokumenty, rodzaj, tytul, rok_wydania, slowo_klucz, data_dodania, nazwa_
    plik, plik) VALUES('','$rodzaj', '$tytul', '$rok-$miesiac-$dzien', '$slowo_klucz', '$data', '$name','$plik');"
    ) or die(mysql_error());
  86. $autorzy=mysql_query("INSERT INTO autorzy (id_autorzy, imie, nazwisko) VALUES('', '$imie','$nazwisko');") or die(mysql_error());
  87. $dziedzina==mysql_query("INSERT INTO dziedzina (id_dziedzina, nazwa) VALUES('','$dziedzina');") or die(mysql_error());
  88. }
  89.  
  90. function show_form()
  91. {
  92.  
  93. ?>
  94.  
  95. <form method="post" action="dodaj_dokument.php" enctype="multipart/form-data">
  96.  
  97. <fieldset>
  98.  
  99. <legend> Wprowadz dane do ponizszego formularza</legend>
  100.  
  101. <Table>
  102. <tr>
  103. <td>
  104. <b> Imie autora: </b>
  105. </td>
  106. <td>
  107. <input type = 'text' name = 'imie' size = '40' maxlenght = '100' value = 
  108. '<?php 
  109. if (isset ($_POST ['imie']))
  110. echo $_POST ['imie'];
  111. ?>'
  112. />
  113. </td>
  114. </tr>
  115.  
  116. <tr>
  117. <td>
  118. <b> Nazwisko autora: </b>
  119. </td>
  120. <td>
  121. <input type = 'text' name = 'nazwisko' size = '40' maxlenght = '100' value = 
  122. '<?php 
  123. if (isset ($_POST ['nazwisko']))
  124. echo $_POST ['nazwisko'];
  125. ?>'
  126. />
  127. </td>
  128. </tr>
  129.  
  130. <tr>
  131. <td>
  132. <b> Dziedzina: </b>
  133. </td>
  134. <td>
  135. <select name="dziedzina">
  136. <option value="Matematyka">Matematyka</option>
  137. </select>
  138. </td>
  139. </tr>
  140.  
  141. <tr>
  142. <td>
  143. <b> Rodzaj: </b>
  144. </td>
  145. <td>
  146. <select name="rodzaj">
  147. <option value="Praca inzynierska">Praca inzynierska</option>
  148. </select>
  149. </td>
  150. </tr>
  151.  
  152. <tr>
  153. <td>
  154. <b> Tytul: </b> 
  155. </td>
  156. <td> 
  157. <input type = 'text' name = 'tytul' size = '40' maxlenght = '100' value = 
  158. '<?php 
  159. if (isset ($_POST ['tytul']))
  160. echo $_POST ['tytul'];
  161. ?>'
  162. />
  163. </td>
  164. </tr>
  165.  
  166. <tr>
  167. <td>
  168. <b> Rok wydania: </b> 
  169. </td>
  170. <td>
  171. <select name="rok">
  172. <option value="1950">1950</option>
  173. </select>
  174. -
  175. <select name="miesiac">
  176. <option value="01">Styczen</option>
  177. </select>
  178. -
  179. <select name="dzien">
  180. <option value="01">01</option>
  181. </select>
  182. </td>
  183.  
  184. </tr>
  185.  
  186. <tr>
  187. <td>
  188. <b> Slowo klucz: </b> 
  189. </td>
  190. <td> 
  191. <input type = 'text' name = 'slowo_klucz' size = '40' maxlenght = '100' value = 
  192. '<?php 
  193. if (isset ($_POST ['slowo_klucz']))
  194. echo $_POST ['slowo_klucz'];
  195. ?>'
  196. />
  197. </td>
  198. </tr>
  199.  
  200. <tr>
  201. <td>
  202. <b> Dokument: </b>
  203. </td>
  204. <td>
  205. <input type = 'file' name = 'form_data' size = '40' maxlenght = '100'>
  206. </td>
  207. </tr>
  208. <tr>
  209. <td>
  210. <input type="reset" name="reset" value="Reset">
  211. </td>
  212. <td>
  213. <input type="submit" name="submit" value="Dodaj">
  214. </td>
  215. </tr>
  216. </Table>
  217. </form>
  218.  
  219. <?php
  220. }
  221. ?>
em1X
1) Bo dalej piszesz bzdury.. zajrzyj do manuala czego oczekuje funkcja readfile" title="Zobacz w manualu php" target="_manual w parametrze.

2) Nie uzywaj konta roota tylko stworz sobie zwyklego uzytkownika, bo ci ktos w koncu serwer rozpi.....

  1. <?php
  2. mysql_connect('localhost','root','kuba');
  3. mysql_select_db('praca');
  4.  
  5. $qry = @mysql_query('SELECT * FROM dokumenty WHERE id_dokumenty=87') or die(mysql_error());
  6. $row = mysql_fetch_assoc($qry);
  7.  
  8. $plik =& $row['nazwa_plik'];
  9.  
  10. header("Pragma: public");
  11. header("Expires: 0");
  12. header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  13. header("Cache-Control: public");
  14. header("Content-Type: application/pdf");
  15. header("Content-Disposition: attachment; filename=".$plik.";" );
  16. header("Content-Transfer-Encoding: binary");
  17. header("Content-Length: ".filesize($plik));
  18. header("Content-Disposition: attachment; filename="".$plik.""");
  19.  
  20. print stripslashes($row['plik']);
  21. ?>
k_uba
readfile oczekuje nazwy pliku.
Jak nazwa pliku znajduje sie nazwa_plik a plik wlasciy w plik. Jak daje na jedno badz drugie to sa bledy Adobe.
sadsmiley02.gif
Wiec o jakie bzdury chodzi?
em1X
przeciez Ty nie masz pliku.. zawartosc pliku masz w bazie danych, uzyj kopuły i zajrzyj na moj post wyżej
k_uba
Moze moja kpoulka nie pracuje tak szybko i wydajne sad.gif
Zmienie z rootem Ale ja dalej nie rozumiem jak mam zrobic aby zobaczyc co jest w pliku. Bo to co dam podlaczyles to nie dziala. Nie wiem moze jestem withstupidsmiley.gif
em1X
ten kod powinien wysłać podany plik .pdf jako załącznik.

teraz na pewno bedzie dzialac (sprawdzilem):
  1. <?php
  2. mysql_connect('localhost','root','kuba');
  3. mysql_select_db('praca');
  4.  
  5. $qry = @mysql_query('SELECT * FROM dokumenty WHERE id_dokumenty=87') or die(mysql_error());
  6. $row = mysql_fetch_assoc($qry);
  7.  
  8. $plik =& $row['nazwa_plik'];
  9. $contents =& $row['plik'];
  10.  
  11. header("Pragma: public");
  12. header("Expires: 0");
  13. header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  14. header("Cache-Control: public");
  15. header("Content-Type: application/pdf");
  16. header("Content-Length: ".strlen($contents));
  17. header("Content-Disposition: attachment; filename="".$plik.""");
  18.  
  19. print $contents;
  20. ?>


natomiast samo dodawanie powinno tak wygladac:
(podmien kod z pomiedzy 79 i 87 linijki włącznie)
  1. <?php
  2. $plik = mysql_escape_string(file_get_contents($image_file));
  3. $data=date("Y-m-d");
  4.  
  5. mysql_connect("localhost","root","kuba");
  6. mysql_select_db("praca");
  7.  
  8. mysql_query("INSERT INTO dokumenty (id_dokumenty, rodzaj, tytul, rok_wydania, slowo_klucz, data_dodania, nazwa_
    plik, plik) VALUES('','$rodzaj', '$tytul', '$rok-$miesiac-$dzien', '$slowo_klucz', '$data', '$name','$plik');"
    ) or die(mysql_error());
  9. mysql_query("INSERT INTO autorzy (id_autorzy, imie, nazwisko) VALUES('', '$imie','$nazwisko');") or die(mysql_error());
  10. mysql_query("INSERT INTO dziedzina (id_dziedzina, nazwa) VALUES('','$dziedzina');") or die(mysql_error());
  11. ?>
k_uba
TO ja nie wiem co tu jest nie tak bo u mnie nie chodzi sad.gif
em1X
Ale co Ci wlasciwie nie chodzi. Radzilbym Ci wyczyscic tabele z danymi, sprawdzic czy na pewno wszystko sie dodalo, a potem szukac dziury w kodzie.
k_uba
WIELKIE dzieki
Wlasnie to zrobilem porawilem tabele i chodzi Mialem jak zawsze literowke w tabeli smile.gif
DZIEKI CHODZI
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.