Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]problem z uploadem avatara
Forum PHP.pl > Forum > Przedszkole
gtasan
Witam!
Problem polega na tym, że chciałbym, aby użytkownik mojej strony mógł wrzucić swój awatar, który następnie zostanie zmieniony do określonej wielkości i rozszerzenia, oraz zostanie zmieniona nazwa pliku na id użytkownika w bazie. Plik się wrzuca na serwer, zmienia się wielkość i roszerzenie ale problem pojawia się przy zmianie nazwy na id użytkownika z bazy, bo po prostu się nie zmienia i powstaje na serwerze plik .jpg. Bardzo byłbym wdzięczny gdyby ktoś rzucił okiem na kod i postarał sie mi pomóc.
Oto kod:
  1. <?
  2. $user_id = $user['user']; // przypisuje id usera.
  3.  
  4. $data = date('Y.m.d H:i'); // Aktualna data
  5. $plik_tmp = $_FILES['plik']['tmp_name'];
  6. $plik_nazwa = $_FILES['plik']['name'];
  7. $plik_rozmiar = $_FILES['plik']['size'];
  8.  
  9. if(isset($plik_tmp) && isset($plik_nazwa) && ($plik_rozmiar)){ //sprawdzamy czy wszystko jest ok z plikiem
  10. $sp = explode(".",$plik_nazwa); // funkcja explode rozdziela string wedlug jakiegoś kryterium. W tym wypadku według kropki
  11. if($sp[1] == "gif" || $sp[1] == "jpg" || $sp[1] == "jpeg" || $sp[1] == "png") { // sprawdzamy jakie rozszerzenie ma plik który wysyłamy
  12. $up = move_uploaded_file($_FILES['plik']['tmp_name'],'avatar/'.$_FILES['plik']['name']); // przenosimy plik do katalogu avatar
  13. if ($up) // jeśli przenoszenie wykonało się poprawnie
  14. {
  15.  
  16. $sciezka_do_pliku = "avatar/$plik_nazwa"; // ustawiamy ścieżke pliku
  17.  
  18. if($sp[1] == "jpeg"){ // Sprawdzamy jakie rozszerzenie miał plik i wykonujemy dla niego nowy obrazek;
  19. $img = imagecreatefromjpeg($sciezka_do_pliku);
  20. }
  21. elseif($sp[1] == "png") {
  22. $img = imagecreatefrompng($sciezka_do_pliku);
  23. }
  24. elseif($sp[1] == "jpg") {
  25. $img = imagecreatefromjpeg($sciezka_do_pliku);
  26. }
  27. elseif($sp[1] == "gif") {
  28. $img = imagecreatefromgif($sciezka_do_pliku);
  29. }
  30. else {echo "ERROR!!!";}
  31.  
  32. $a = imagesx($img); // pobieramy szerokość i wysokość
  33. $b = imagesy($img);
  34.  
  35. if($a > $b){ //Zmieniamy wielkość obrazka w tym wypadku szerokość musi być 150 a wysokość proporcjonalna.
  36. $na = 150;
  37. $nb = 150 * ($b / $a);
  38. }elseif($a < $b){
  39. $na = 150 * ($a / $b);
  40. $nb = 150;
  41. }else{
  42. $na = 150;
  43. $nb = 150;
  44. }
  45.  
  46. $new_img = imagecreatetruecolor($na, $nb); // tworzymy nowy obrazek o danych wymiarach
  47. $cz = ImageColorAllocate($new_img,8 ,24 ,40); // tworzenie koloru. atrybuty to kolejno nowy obrazek i 3 kolory RGB - Red Green Blue
  48.  
  49. ImageFill($new_img,1,1,$cz); // tworzenie tła obrazka
  50. imagecopyresampled($new_img, $img, 0, 0, 0, 0, $na, $nb, $a, $b);
  51.  
  52. unlink('avatar/$user_id.jpg'); // usuwamy poprzedni plik avataru użytkownika
  53. @imagejpeg($new_img, "avatar/".$user['user'].".jpg", 100); // cyfra 9 oznacza jakosc miniaturki, osobiscie polecam wartosc 100
  54.  
  55. $a1 = mysql_query("UPDATE spartacus_users SET avatar='1' WHERE user = ".$user['user']) or die (mysql_error());
  56.  
  57. $del = unlink('avatar/'.$_FILES['plik']['name']); //usuwamy wgrany poprzedni obrazek NIE PRZEKSZTALCONY!
  58. }
  59.  
  60. }
  61.  
  62. }
  63.  
  64. ?>


a tutaj formularz do wrzucenia
[html<form enctype="multipart/form-data" method="POST" action="?a=account">
Sciezka do avataru: <input name="plik" type="file" />

<input type="submit" value="Wyślij"></form>][/html]
nospor
imagejpeg($new_img, "avatar/".$user['user'].".jpg", 100);
skoro powstaje ci samo .jpg to chyba logiczne ze $user['user'] nie istnieje :/ Teraz musisz dojść czemu.
No i włącz sobie wyświetlanei wszystkich bledow. Tu masz napisane jak:
Temat: Jak poprawnie zada pytanie
gtasan
ok dziekuje bardzo za pomoc
przydalo sie wyswietlanie bledow
prosze teraz o pomoc z takowa sprawa
Kod
Notice: Undefined index: plik in /home/kukiz87/public_html/kukiz87.yum.pl/spartacus/templates/user/account.php on line 226

Notice: Undefined index: plik in /home/kukiz87/public_html/kukiz87.yum.pl/spartacus/templates/user/account.php on line 227

Notice: Undefined index: plik in /home/kukiz87/public_html/kukiz87.yum.pl/spartacus/templates/user/account.php on line 228


a w tych linijkach jest to:
  1. $plik_tmp = $_FILES['plik']['tmp_name'];
  2. $plik_nazwa = $_FILES['plik']['name'];
  3. $plik_rozmiar = $_FILES['plik']['size'];


wydaje mi sie ze to pewnie jest prosta sprawa, aczkolwiek nie znam sie na tym zbytnio wiec prosze o wyrozumialosc
Ulysess
wystarczy wrzucić np na translator google..

zmienna $_FILES['plik'] nie istnieje. czy aby na pewno w formularzu w name jest podane 'plik'.
nie podoba mi się zawartość action podaj dokładnie nazwę pliku do którego wysyłasz (o ile wysyłasz do innego niż ten gdzie przetwarzasz avek)
gtasan
dziekuje za szybka odpowiedz

ja rozumiem kod bledu, tyle ze moja znajomosc php nie jest jednak zbyt wysoka stad prosze o pomoc
moj formularz wyglada w ten sposob i wysyla do tego samego pliku:
  1. <form enctype="multipart/form-data" method="POST" action="?a=account">
  2. Sciezka do avataru: <input name="plik" type="file" />
  3.  
  4. <input type="submit" value="Wyślij"></form>
thek
Z tego by wynikało, że zmienna $_FILES po kliknięciu w guzik Wyślij wcale obrazka nie zawiera. Albo jest on za duży, albo masz kod sknocony w jakiś sposób, który uniemożliwia poprawne jego odebranie.
Ulysess
formularz
  1. <form action="" enctype="multipart/form-data" method="POST">
  2. <input type="file" name="plik" accept="image/jpeg,image/png" size="40" />
  3. <input name="a" type="hidden">
  4. <input type="submit" value="Wgraj Avatar" />
  5. </form>

accept w input jak chcesz mozesz wywalic . jeśli chcesz wiedzieć do czego służy to przy otwarciu okna do wybrania pliku będzie widział tylko pliki z rozszerzeniem jpeg/png (nie działa to na wszystkich przeglądarkach)
kod php

  1. <?php
  2.  
  3. if(empty($_POST['a']))
  4. {
  5. // czesc skrypty odpowiedzialna za przetwarzanie avatara (razem z uwagami)
  6. }
gtasan
dobra moi drodzy "hakerzy" ;d (nie chce nikogo obrazic, tylko po prostu dla zartu nazwalem Was, znajacych sie na tym znakomice; mam nadzieje ze przyjmiecie to z usmiechem na twarzy a nie obrazicie sie winksmiley.jpg ). Sprwa wyglada tak, ze nie jestem chyba w stanie tego rozkmninic, moze ktos z Was posiada przypadkiem jakis gotowy latwy kod ktory wkleje sobie i bedzie wszystko ladnie banglac, albo jest w stanie na momencie (nie chce nikomu dodawac specjalnie duzo roboty) jest w stanie cos takiego dla mnei machnac. Bede bardzo wdzieczny i jak bede potrafil w jakis sposob pomoc, to chetnie sie odkuje za pomoc.
Pozdrawiam winksmiley.jpg
gtasan
dobra, sprawa zamknieta, dziekuje wszystkim za pomoc, temat do wyrzucenia
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.