Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z Upload-em plików
Forum PHP.pl > Forum > Przedszkole
todziu
Witam - mam problem z upload-em plików poprzez formularz do bazy MySql - teoretycznie wszystko dziala ale w bazie nie pojawia sie plik (obrazek) w logach apach-a tez nic - kod mam sciagniety ze stronki www - Pomożecie tongue.gif ? - dzieki
Cysiaczek
Wiesz... jeśli kod masz z jakiejś strony, to pewnie działa. Jak My mamy zgadnąć, co ty z tym kodem zrobiłeś? MOze nie utworzyłes bazy, może źle nazwałeś pliki - przyczyn może byc 1000+1. Pokaż swój kod i sprawdź, czy wszystkie hasła, loginy, bazy, tabele ustawiasz poprawnie. Pokaż jakiś komunitat błędu, pokaż... cokolwiek.

Pozdrawiam.
todziu
heh i w takich skryptach rowniez zdarzaja sie blady - do bazy lacze sie bez problemu z poziomu linux-a - moge edytowac, dodawac, usowac (czyli tabela baza jest OK) - ale z poziomu php nie zapisuje mi pliku, wlasnie to dziwne ze apache w logach nic nie wywala - moj kod:

plik1.html
  1. <form method="POST" enctype="multipart/form-data" action="upload.php">
  2. <input type="hidden" name="ok" value="1">
  3. <input type="hidden" name="MAX_FILE_SIZE" value="665600">
  4.  
  5. <h2 align="center">Upload plikow do bazy</h2>
  6. <div align="center">
  7. <table border="1" cellpadding="4" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="65%" height="57">
  8. <tr>
  9. <td width="39%" height="21">Wybierz plik</td>
  10. <td width="61%" height="21"><input type="file" name="plik" size="40"></td>
  11.  
  12. </tr>
  13. <tr>
  14. <td width="100%" height="19" colspan="2">
  15. <input type="submit" value="Wyslij" style="float: right"></td>
  16. </tr></table></div></form></BODY></HTML>


upload.php:
  1. <?php
  2. include("config.php");
  3. $link = @mysql_connect($url, $log, $pas);
  4. if (!$link) die ("<p align="center"><b>Nie mozna sie polaczyc z serwerem MySQL!</b></p>");
  5. @mysql_select_db($baza, $link) or die ("<p align="center"><b>Nie mozna sie polaczyc z baza!<br /></b></p>");
  6. $katalog = "pliki/";
  7. if($HTTP_POST_VARS['ok'] == 1)
  8. {
  9. if($HTTP_POST_FILES['plik']['size'] < 665600 || $HTTP_POST_FILES['plik']['size'] != 0)
  10. {
  11. if(is_uploaded_file($HTTP_POST_FILES['plik']['tmp_name']) || !isset($HTTP_POST_FILES['plik']))
  12. {
  13. $HTTP_POST_FILES['plik']['name'] = strtolower($HTTP_POST_FILES['plik']['name']);
  14. $HTTP_POST_FILES['plik']['name'] = str_replace(" ", "_", $HTTP_POST_FILES['plik']['name']);
  15.  
  16. copy($HTTP_POST_FILES['plik']['tmp_name'], $katalog.$HTTP_POST_FILES['plik']['name']);
  17. $adres_pliku = $katalog.$HTTP_POST_FILES['plik']['name'];
  18.  
  19. $uchwyt = fopen($adres_pliku, "r");
  20. $tresc = fread($uchwyt, filesize($adres_pliku));
  21. fclose($uchwyt);
  22. unlink($adres_pliku);
  23. $tresc = addslashes($tresc);
  24.  
  25. $wielkosc = $HTTP_POST_FILES['plik']['size'];
  26. $n_pliku = $HTTP_POST_FILES['plik']['name'];
  27. $typ = $HTTP_POST_FILES['plik']['type'];
  28.  
  29. $query= "INSERT INTO zalacznik(id,typ,rozmiar,nazwa,dane) VALUES('$typ','$wielkosc','$n_pliku','$tresc')";
  30. mysql_query($query, $link);
  31. }
  32. else
  33. {
  34. print("blad");
  35. }
  36. }
  37. else
  38. {
  39. print("Blad");
  40. }
  41. }
  42. mysql_close($link);
  43. ?>


Dokladam jeszcze strukture tabeli
  1. CREATE TABLE pliki (
  2. id int(5) NOT NULL AUTO_INCREMENT,
  3. typ varchar(30) NOT NULL,
  4. rozmiar int(11) NOT NULL,
  5. nazwa varchar(200) NOT NULL,
  6. dane mediumblob NOT NULL,
  7. PRIMARY KEY (id)
  8. );


Dzieki za pomoc

Jednak w tych skryptach wystawionych na www zdarzaja sie bledy - ja tutaj znalazlem dwa bledy w zapytaniu SQL:

1. Nazwa tabeli jest inna niz nazwa w zapytaniu SQL w kodzie php.
2. Niepotrzebnie wstawil do zapytania nazwe kolumny id - i tutaj sie wykrzaczal

Powinno byc tak:

  1. <?php
  2. $query= "INSERT INTO pliki(typ,rozmiar,nazwa,dane)VALUES('$typ','$wielkosc','$n_pliku','$tresc')";
  3. ?>
UNK
Widać że skrypt jest stary, zamień wszystkie $HTTP_POST_FILES na $_POST może, ze używasz starszej wersji php niż (podajże) 4.0.x tongue.gif

Jeśli mówisz ze apache nie wywala błędu sprawdź logi sqla to w takim razie tylko jego wina.
Jeśli nie wiesz gdzie to możesz zrobić jeszcze inaczej (tak jak ja zawsze sprawdzam błędy).

PS. Tak w ogóle jeszcze tam brakuje jeszcze jednej rzeczy tongue.gif

  1. <?php
  2. //...
  3. if (@mysql_query($query, $link))
  4. {
  5. echo 'Pomyślnie dodano plik.<br />';
  6. }
  7. else
  8. {
  9. echo 'Błąd z dodawaniem pliku.<br />'.$query.'<br />';
  10. }
  11. //...
  12. ?>


Sprawdź czy czasem z zapytaniem się coś nie chrzani, ewentualnie skopiuj i spróbuj je dodać samodzielnie.
todziu
OK - z zapisem pliku do bazy juz sobie poradzilem teraz powstal inny problem Odczyt pliku (obrazka) i wyswietlenie go poprzez przegladarke.

odczyt.php
  1. <?php
  2. include("config.php");
  3.  
  4. $link = mysql_connect($url, $log, $pas);
  5. mysql_select_db ($baza) or die ("Nie mozna wybrać bazy danych");
  6. $zapytanie = "SELECT typ, rozmiar, nazwa, dane FROM pliki WHERE id = '3'";
  7. $wynik = mysql_query($zapytanie);
  8. $plik = mysql_fetch_array($wynik);
  9.  
  10. header("Content-length: $plik[rozmiar]");
  11. header("Content-type: $plik[typ]");
  12. header("Content-Disposition: attachment; filename=$plik[nazwa]");
  13. print($plik[dane]);
  14.  
  15. exit();
  16. mysql_close($link);
  17. ?>


Po wejsciu na www wyswietla sie monit "otworz" "zapisz" itp. zapisuje OK na hdd ale ma problem z otwarciem tego w Operze i innych przegladarkach - wyswietle tylko napis "obrazek" :-) natomiast jak otwieram to w domyslnej przegladarce typu IrfanView - to otwiera sie bez problemu - a chcialbym aby ten obrazek otwierala przegladarka i wyswietlala go na www.
todziu
Tak tez pocichutku sobie myslalem tongue.gif

Dzieki UNK
UNK
Heh, no i usunąłem za późno sad.gif

więc tak pisałęm

  1. <img src='<?=$plik['dane']?>' alt='<?=$plik['nazwa']?>'>


A usunąłem dlatego że zobaczyłem poprawnie ustawiony nagłówek i nie wiem dlaczego chce Ci ściągać zdjęcie a nie wyświetlać
todziu
ten zapis nie dziala :-(
  1. <?php
  2. echo "<img src=$plik['dane'] alt=$plik['nazwa']>";
  3. ?>


Moze trzeba zapisac pierw go na dysk na serverze a pozniej odczytac ?
UNK
Hmm, no przecież, nie wiem o czym ja wtedy myślałem myśląc że to zadziała, pewnie się zasugerowałem nazwą zmiennej $plik tongue.gif
Przecież <img ..> wyświetla obrazek, z podaną ścieżką a nie strumień danych.

Twój przykład jest jednak najbardziej prawidłowy jednak popełniasz tam mały błąd. Posprawdzałem wszystko i jedynie tego się czepia winksmiley.jpg

addslashes() przy dodaniu zawartości obrazka do bazy (przynajmniej u mnie jak tego nie ma zostaje wyświetlany poprawnie na ie, opera i ff)

a drugie, jeśli nie chcesz aby użytkownik ściągał obrazek a tylko go zobaczył w pustym oknie wywal to: header("Content-Disposition: attachment; filename=$plik[nazwa]"); chyba wszystko winksmiley.jpg
todziu
to moze przedstaw tutaj swoj kod html i php
UNK
To był skrypt robiony na szybko żeby co może być ewentualnym błędem.
  1. <?
  2. $uchwyt = fopen(&apos;img/panel-dhcp.png&apos;, "r");
  3. $tresc = fread($uchwyt, filesize(&apos;img/panel-dhcp.png&apos;));
  4. fclose($uchwyt);
  5. //$tresc = addslashes($tresc);
  6.  
  7. header("Content-type: image/png");
  8. echo $tresc;
  9.  
  10. ?>


Nie zapisywałem do bazy bo stwierdziłem że czy wartość będzie pobierana z bazy czy bezpośrednio z pliku nie ma większego znaczenia, może że kodowanie bazy danych jeszcze coś dodatkowo chrzani, ale raczej nie powinno.
Gdy dodam linie z addslash obrazek nie chce się wyświetlić.
todziu
Qrde juz sie w tym pogubilem - zobacz tutaj mam skrypt ktory powinien teoretycznie wyswietlic obraz w przegladarce:

  1. <?php
  2. include("config.php");
  3.  
  4. $link = mysql_connect($url, $log, $pas);
  5. mysql_select_db ($baza) or die (mysql_error());
  6.  
  7. $zapytanie = "SELECT typ, rozmiar, nazwa, dane FROM pliki WHERE id = '3'";
  8. $wynik = mysql_query($zapytanie);
  9. $plik = mysql_fetch_array($wynik);
  10.  
  11. header("Content-length: $plik[rozmiar]");
  12. header("Content-type: $plik[typ]");
  13. //header("Content-Disposition: attachment; filename=$plik[nazwa]");
  14. //print($plik[dane]);
  15. echo "<img src=$plik['dane'] alt=$plik['nazwa']>";
  16. exit();
  17. mysql_close($link);
  18. ?>


ale nie wyswietla tylko jest mozliwosc zapisu oraz wyswietlenie ale dopiero po zmianie domyslenj przegladarki na zewnetrzna np. IrfanView
UNK
  1. <?php
  2. include("config.php");
  3.  
  4. $link = mysql_connect($url, $log, $pas);
  5. mysql_select_db ($baza) or die (mysql_error());
  6.  
  7. $zapytanie = "SELECT typ, rozmiar, nazwa, dane FROM pliki WHERE id = '3'";
  8. $wynik = mysql_query($zapytanie);
  9. $plik = mysql_fetch_array($wynik);
  10.  
  11. header("Content-type: $plik[typ]");
  12.  
  13. echo $plik[dane];
  14.  
  15. exit();
  16. mysql_close($link);
  17. ?>


A tak ? Sprawdź jeszcze czy typ pliku jest dobrze wpisany do bazy np image/jpg

Jeśli dalej nie będzie nic działać odezwij się do mnie na gg -> widnieje w profilu.
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.