Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Co tu jest nie tak?
k_uba
post
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 13.12.2006

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 18)
shpyo
post
Post #2





Grupa: Zarejestrowani
Postów: 574
Pomógł: 2
Dołączył: 13.04.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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!

Ten post edytował shpyo 28.12.2006, 15:28:42
Go to the top of the page
+Quote Post
bim2
post
Post #3





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


@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)
Go to the top of the page
+Quote Post
PiotrLegnica
post
Post #4





Grupa: Zarejestrowani
Postów: 71
Pomógł: 2
Dołączył: 6.07.2005
Skąd: Legnica

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
shpyo
post
Post #5





Grupa: Zarejestrowani
Postów: 574
Pomógł: 2
Dołączył: 13.04.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Racja, nie zauwazyłem. Nie zmienia to faktu, że zmiennej w momencie jej wywołania nie ma (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
k_uba
post
Post #6





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 13.12.2006

Ostrzeżenie: (0%)
-----


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 ;
Go to the top of the page
+Quote Post
em1X
post
Post #7





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

Ostrzeżenie: (0%)
-----


zastanów się co ty do bazy danych zapisujesz: $_POST['file'] to tablica zawierajaca pewne dane na temat pliku, a nie jego binarna zawartosc.
Go to the top of the page
+Quote Post
k_uba
post
Post #8





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 13.12.2006

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/worriedsmiley.gif)
Czyli jak mam dodac do bazy plik aby byl on porawnie przechowywany i potem odczytywany?

Ten post edytował k_uba 28.12.2006, 22:28:35
Go to the top of the page
+Quote Post
KotDomowy
post
Post #9





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 6.12.2006
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


A nie powinna to być przypadkiem tablica superglobalna $_FILES a nie $_POST (IMG:http://forum.php.pl/style_emoticons/default/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
Go to the top of the page
+Quote Post
em1X
post
Post #10





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

Ostrzeżenie: (0%)
-----


fakt, przeoczylem to z nazwa tablicy (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) nie mniej jednak brakowalo pobierania zawartosci pliku do zmiennej.
Go to the top of the page
+Quote Post
k_uba
post
Post #11





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 13.12.2006

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
em1X
post
Post #12





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

Ostrzeżenie: (0%)
-----


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. ?>


Ten post edytował em1X 29.12.2006, 13:13:55
Go to the top of the page
+Quote Post
k_uba
post
Post #13





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 13.12.2006

Ostrzeżenie: (0%)
-----


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.
(IMG:http://forum.php.pl/style_emoticons/default/sadsmiley02.gif)
Wiec o jakie bzdury chodzi?

Ten post edytował k_uba 29.12.2006, 13:14:42
Go to the top of the page
+Quote Post
em1X
post
Post #14





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

Ostrzeżenie: (0%)
-----


przeciez Ty nie masz pliku.. zawartosc pliku masz w bazie danych, uzyj kopuły i zajrzyj na moj post wyżej
Go to the top of the page
+Quote Post
k_uba
post
Post #15





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 13.12.2006

Ostrzeżenie: (0%)
-----


Moze moja kpoulka nie pracuje tak szybko i wydajne (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/withstupidsmiley.gif)
Go to the top of the page
+Quote Post
em1X
post
Post #16





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

Ostrzeżenie: (0%)
-----


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. ?>


Ten post edytował em1X 29.12.2006, 15:20:46
Go to the top of the page
+Quote Post
k_uba
post
Post #17





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 13.12.2006

Ostrzeżenie: (0%)
-----


TO ja nie wiem co tu jest nie tak bo u mnie nie chodzi (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
em1X
post
Post #18





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
k_uba
post
Post #19





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 13.12.2006

Ostrzeżenie: (0%)
-----


WIELKIE dzieki
Wlasnie to zrobilem porawilem tabele i chodzi Mialem jak zawsze literowke w tabeli (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
DZIEKI CHODZI
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 8.12.2025 - 13:38