Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [pomoc] Prosty skrypt uploadu zdjęć na serwer[rozwiązany-skrypty!]
Forum PHP.pl > Forum > Przedszkole
miccom
Witam. Mam taki oto skrypt.
  1. <FORM ACTION="upload.php" METHOD="POST" ENCTYPE="multipart/form-data">
  2. Zdjęcie: <INPUT type="file" name="zdjecie"><br>
  3. <button type="submit" name="ok" value="wyślij zdjęcie do bazy">
  4. <img src="zdj/wyslij.jpg" width="50" height="14" alt="wyślij zdjęcie do bazy danych">
  5. </button>
  6. </form>


upload.php
  1. <?php
  2.  
  3. $fhandle = fopen($HTTP_POST_FILES['zdjecie']['tmp_name'], "r");
  4. $content = base64_encode(fread($fhandle, $HTTP_POST_FILES['zdjecie']['size']));
  5. fclose($fhandle);
  6.  
  7. include('config.php');
  8.  
  9.  
  10. $query = sprintf("insert into zdjecia (username, zdjecie, obecne) values (\"%s\"\"%s\"\"%s\")", $HTTP_POST_VARS['username'], $content, 'TAK');
  11. $zapytanie = mysql_query($query);
  12.  
  13. if (!$zapytanie) 
  14. { 
  15. echo sprintf("Nie można dodać zdjęcia! Sad Error : %s", mysql_error()) ; 
  16. }
  17. else 
  18. { 
  19. echo "<img src=\"http://www.moja_strona.pl/showimage.php?username=".$l."\">";
  20. echo "<center>";
  21. echo "Twój obrazek został zapisany do bazy danych MySQL";
  22. echo "</center>";
  23. }
  24.  
  25. ?>


i skrypt showimage.php
  1. <?
  2. header("Content-type: image/jpg;");
  3. $l=$_GET['username'];
  4. include('config.php');
  5. $result = mysql_query("SELECT zdjecie FROM zdjecia WHERE `username`='$l'");
  6. if (mysql_num_rows($result) != 0)
  7. {
  8. $row = mysql_fetch_assoc($result);
  9. echo base64_decode($row['zdjecie']);
  10. }
  11. ?>


I wszystko fajnie. Ale jak zrobić aby zdjecie miało określony format(jpg, gif, png) i określony rozmiar w pix, albo jak wyświetlać zdjęcie w określonym wymiarze np. 100X100pix. Proszę o pomoc. Pozdrawiam. miccom
Cysiaczek
Przenoszę na Przedszkole

Musisz sprawdzić rozszerzenie pliku, czy odpowiada Twoim potrzebom, jeśli nie, to nie dodajesz go bo bazy.
Tak jak masz
  1. <?php
  2. $HTTP_POST_FILES['zdjecie']['tmp_name']
  3. ?>


To analogicznie odczytasz rozszerzenie (mime-type również).

Pozdrawiam.
miccom
Ok. Ponowna modyfikacja kodu:
Segreguje rozszerzenia plików- ale nie sprawdza rozmiaru;/(max pix, max KB )
Może nie najlepszy sposób przechowywać avatary w Bazie Danych- ale na serwerze gdzie stoi strona upload plików do katalogu jest zablokowany- więc muszę sie ratować uploadem do bazy danych.

Oto mój plik

form.htm
  1. <?
  2. echo "<FORM ACTION='upload.php' METHOD='POST' ENCTYPE='multipart/form-data'>";
  3. echo " Zdjęcie: <INPUT type='file' name='zdjecie'><br>";
  4. echo "<INPUT TYPE='hidden' NAME='username' value= '$l';><br>";
  5. echo "<input type='hidden' name='MAX_FILE_SIZE' value='32500' />"; /* maksymalna wielkość pliku w bajtach */
  6. echo "<button type='submit' name='ok' value='wyślij zdjęcie do bazy'>";
  7. echo "<img src='zdj/wyslij.jpg' width='50' height='14' alt='wyślij zdjęcie do bazy danych'>";
  8. echo "</button>";
  9. echo "</form>";
  10. ?>




upload.php
  1. <?php
  2. $explode = explode('.', $HTTP_POST_FILES['zdjecie']['name']);
  3. if($explode[1] == 'jpg' || $explode[1] == 'gif' || $explode[1] == 'png' || $explode[1] == 'GIF' || $explode[1] == 'JPG' || $explode[1] == 'PNG' || $explode[1] == 'TIF' || $explode[1] == 'tif' || $explode[1] == 'PSD' || $explode[1] == 'psd' || $explode[1] == 'JPEG' || $explode[1] == 'jpeg') {
  4. $max_rozmiar = 250*250;
  5. if (is_uploaded_file($_FILES['zdjecie']['tmp_name'])) {
  6. if ($_FILES['zdjecie']['size'] > $max_rozmiar) {
  7. echo 'Błąd! Plik jest za duży!';
  8. }else{
  9. $fhandle = fopen($HTTP_POST_FILES['zdjecie']['tmp_name'], "r");
  10. $content = base64_encode(fread($fhandle, $HTTP_POST_FILES['zdjecie']['size']));
  11. fclose($fhandle);
  12.  
  13. include('config.php');
  14. $query = sprintf("insert into zdjecia (username, zdjecie, obecne) values (\"%s\"\"%s\"\"%s\")", $HTTP_POST_VARS['username'], $content, 'TAK');
  15. $zapytanie = mysql_query($query);
  16.  
  17. if (!$zapytanie)
  18. {
  19. echo sprintf("Nie można dodać zdjęcia! Sad Error : %s", mysql_error());
  20. }
  21. else
  22. {
  23. echo "<img src=\"http://moja-strona.pl/showimage.php?username=".$l."\">";
  24. echo "<center>";
  25. echo "Powyższy obrazek został zapisany do bazy danych MySQL";
  26. echo "</center>";
  27. }
  28. }
  29. }
  30. }else{
  31. echo "Wybrany plik ma nieodpowiednie rozszerzenie!";
  32. }
  33.  
  34. ?>




Ale dodaje mi duże zdjęcia;/ Gdzie robie błąd? Proszę o pomoc. Pozdrawiam.

No i jak? Nikt nie odpowie??
No to po to moderator przeniósł mój post do przedszkola?
Bo niby temat banalny? No to jak taki banalny- to proszę o pomoc. A tymczasem nikt tu nie zagląda. Masa jest postów na forum o uploadzie, ale ja nie chcę wrzucić czegos niebezpiecznego na serwer i nie chcę ograniczyć się do:
  1. <?php
  2. echo "<FORM ACTION='upload.php' METHOD='POST' ENCTYPE='multipart/form-data'>";
  3. echo " Zdjęcie: <INPUT type='file' name='zdjecie'><br>";
  4. echo "<INPUT TYPE='hidden' NAME='username' value= '$l';><br>";
  5. echo "<input type='hidden' name='MAX_FILE_SIZE' value='32500' />"; /* maksymalna wielkość pliku w bajtach */
  6. echo "<button type='submit' name='ok' value='wyślij zdjęcie do bazy'>";
  7. echo "<img src='zdj/wyslij.jpg' width='50' height='14' alt='wyślij zdjęcie do bazy danych'>";
  8. echo "</button>";
  9. echo "</form>";
  10. ?>


To tak jak byście zrobili rejestrację/logowanie bez ochrony przed SQL INJECTION!! Takich postów też jest masa;/ Ale komu sie przedadząquestionmark.gif Ajak ktoś zapyta jak ochronić przed SQL INJECTION- to zaraz admin lub moderator przenosi do przedszkola albo odsyła do tego durnego manuala. Wstyd.
Ale ja nie chcę takich głupich skryptów zamieszczać a i i mam dość czytania takich samych postów i tego samego sposobu na upload.

Ponownie proszę o pomoc. Bo nadal zauważam że "wielkie głowy" to lubią pomagać tylko "wielkim głowom". W takim razie nie mam tu czego szukać a i niczego z Waszą pomocą się nie nauczę... a szkoda bo myślałem że fajne forum. Pozdrawiam.
Cienki1980
W kilku rzeczowych punktach.
Rozmiar obrazka musisz sprawdzić posługując się getimagesize()" title="Zobacz w manualu PHP" target="_manual
Rozmiar który Ty wyliczasz ma się nijak do rozmiaru przesyłanego zdjęcia.

Sprawdź sobie poniższy kod zobacz gdzie się co wyświetla a będziesz wiedział gdzie jakie warunki powstawiać do swojego kodu.
  1. <?php
  2. echo"<pre>";print_r($_FILES);echo "</pre>";
  3. echo "<pre>";print_r(getimagesize($_FILES['plik']['tmp_name']));echo "</pre>";
  4. $size=getimagesize($_FILES['plik']['tmp_name']);
  5. $xx=$size[0]*$size[1];
  6. echo $xx;
  7.  
  8. ?> 
  9. <form action="plik.php" method="post" enctype="multipart/form-data">
  10. <input type="file" name="plik">
  11. <input type="submit">
  12. </form>
miccom
ok. Dziękuję cienki1980 za podpowiedź. Masz u mnie dużego plusa. Działa.

Plik
form.php
  1. <?
  2. echo "<FORM ACTION='upload.php' METHOD='POST' ENCTYPE='multipart/form-data'>";
  3. echo " Zdjęcie: <INPUT type='file' name='zdjecie'><br>";
  4. echo "<INPUT TYPE='hidden' NAME='username' value= '$l';><br>";
  5. echo "<input type='hidden' name='MAX_FILE_SIZE' value='32500' />"; /* maksymalna wielkość pliku w bajtach */
  6. echo "<button type='submit' name='ok' value='wyślij zdjęcie do bazy'>";
  7. echo "<img src='zdj/wyslij.jpg' width='50' height='14' alt='wyślij zdjęcie do bazy danych'>";
  8. echo "</button>";
  9. echo "</form>";
  10. ?>



PLIK upload.php
  1. <?php
  2. $ipik=$_SERVER["REMOTE_ADDR"];
  3. $ok=$_POST['ok'];
  4. if($ok == 1029){
  5. $explode = explode('.', $HTTP_POST_FILES['zdjecie']['name']);
  6. if($explode[1] == 'jpg' || $explode[1] == 'gif' || $explode[1] == 'png' || $explode[1] == 'GIF' || $explode[1] == 'JPG' || $explode[1] == 'PNG' || $explode[1] == 'TIF' || $explode[1] == 'tif' || $explode[1] == 'PSD' || $explode[1] == 'psd' || $explode[1] == 'JPEG' || $explode[1] == 'jpeg') {
  7. $size=getimagesize($_FILES['zdjecie']['tmp_name']);
  8. $size[0];
  9. $size[1];
  10. $xx=$size[0]*$size[1];
  11. $xx;
  12. if($size[0] < 500 && $size[1] < 500){
  13. $fhandle = fopen($HTTP_POST_FILES['zdjecie']['tmp_name'], "r");
  14. $content = base64_encode(fread($fhandle, $HTTP_POST_FILES['zdjecie']['size']));
  15. fclose($fhandle);
  16.  
  17. include('config.php');
  18. $query = sprintf("insert into zdjecia (username, zdjecie, obecne) values (\"%s\"\"%s\"\"%s\")", $HTTP_POST_VARS['username'], $content, 'TAK');
  19. $zapytanie = mysql_query($query);
  20.  
  21. if (!$zapytanie) 
  22. { 
  23. echo sprintf("Nie można dodać zdjęcia! Sad Error : %s", mysql_error()) ; 
  24. }
  25. else 
  26. { 
  27. echo "<img src=\"http://www.moja_strona.pl/showimage.php?username=".$l."\">";
  28. echo "<center>";
  29. echo "Powyższy obrazek został zapisany do bazy danych MySQL";
  30. echo "</center>";
  31. }
  32. }else{
  33. echo "plik jest za duży!";
  34. } 
  35. }else{
  36. echo "Wybrany plik ma nieodpowiednie rozszerzenie!"; 
  37. }
  38. }else{
  39. echo "Próba włamania do systemu! Próbujesz złamać PRAWO POLSKIE.<br /> Twój adres IP (<b> $ipik</b> ) został zapisany- przy następnej próbie zostanie zablokowany, a My wystąpimy na drogę sądową.";
  40. }
  41. ?>


Powyższe skrypty wrzucają na serwer tylko jpg, jpeg, gif, png o maksymalnym rozmiarze 500x500 pix. I o to mi chodziło. Jeszce raz dziękuję za pomoc.
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.