Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Czy można zrobić upload zdjęcia w formularzu z innymi polami typu text.
Forum PHP.pl > Forum > Przedszkole
MONII28
Mam rejestracje ze zdjęciem i zastanawiam się jak użytkownik doda zdjęcie.
Formularz mam jeden i nie chciałabym robić oddzielny na zdjęcie. Przepraszam jestem początkująca wiec proszę o wyrozumiałość.
koreja
  1. <input type="file" />


O to chodzi?
MONII28
  1. enctype="multipart/form-data"
Chodziło mi o to.
pooh
W formularzu:

  1. <FORM enctype="multipart/form-data" action="strona_docelowa.php" method="POST">
  2. .....
  3. <input type="file" name="image"/>
  4. .....
  5. </FORM>


Do strony_docelowej dotrze tablica $_FILES[] z nazwą tymczasową pliku ze zdjęciem, dlatego trzeba mu nadać jakąś unikalną nazwę (bo zdjęć pewnie będzie sporo) i skopiować na serwer:

  1. <?php
  2. $tmp_name= $_FILES['image']['tmp_name'];
  3. $ext= substr(strrchr($_FILES['image']['name'], "."),1);
  4. $dst_name= 'tutaj_nazwa_zdjecia_pod_jaka_je_zapiszemy_na_serwer';
  5.  
  6.  
  7. $lret= copy ($tmp_name, './tutaj_katalog_gdzie_zapiszemy_zdjęcie/'.$dst_name.'.'.$ext);
  8. ?>


W zmiennej $lret wynik operacji kopiowania.
MONII28
Napisałam tak :
  1. <?php
  2. $query = ("INSERT INTO cv (wyksztalcenie, zdjecie,  idDane_personalne, idAdres ) VALUES (                 '$wyksz',  '$zdjecie', '$id1', '$id2' )");
  3.                mysql_query ($query);
  4.                $id3 = mysql_insert_id();
  5.                
  6.                
  7.                $tmp_name= $_FILES['zdjecie']['name'][0];
  8.        $dst_name=$id3;
  9.                $lret= copy ($tmp_name, './zdjecia/'.$dst_name);
  10. ?>

wywala błąd Undefined index: zdjecie.
Proszę o pomoc.
pooh
Ok, trochę już się zamieszałem z tym wszystkim. U góry już poprawiony kod, a poszło o rozszerzenie plików.
MONII28
Coś jeszcze jest nie tak :copy(bajka.jpg): failed to open stream

  1. <?php
  2. $tmp_name= $_SESSION['zdjecie']['tmp_name'];
  3. ?>

Zapisuje do bazy [BLOB - 15 bajtów],
natomiast folder zdjęcia jest pusty.
pooh
Nie $_SESSION tylko $_FILES


MONII, spróbuj tak:

Formularz:

  1. <FORM enctype="multipart/form-data" action="strona_docelowa.php" method="POST">
  2. <input type="file" name="zdjecie"/>
  3. </FORM>


Strona_docelowa:

  1. $sql= "INSERT INTO `cv` (`wyksztalcenie`, `zdjecie`, `idDane`, `idAdres`) VALUES ('$wyksz', '$zdjecie', $id1, $id2)";
  2. $query= mysql_query ($sql);
  3.  
  4. $tmp_name= $_FILES['zdjecie']['tmp_name'];
  5. $ext= substr(strrchr($_FILES['zdjecie']['name'], "."),1);
  6. $dst_name= mysql_insert_id ($query).'.'.$ext;
  7.  
  8. $lret= copy ($tmp_name,'/zdjecia/'.$dst_name);


Poza tym sugerowałbym NAJPIERW spróbować przesłać obrazek, a dopiero po sprawdzeniu wartości $lret i upewnieniu się że przesłanie się powiodło, aktualizować bazę. Coś na tej zasadzie:

  1. <?php
  2. if ($lret)
  3.   {
  4.     uaktualnij_bazę
  5.   }
  6. else
  7.   {
  8.     nie_udało_sie_przesłać obrazka_i_wyświetl_komunikat_albo_coś
  9.   }
  10. ?>




To też nie będzie działać. Już się trochę zamotałem w tym wszystkim. Zaraz zrobimy żeby działało.
MONII28
Mam stronicowany formularz dlatego dane zapisywane są w sesji.

'zdjecie' =>
array (
'name' => 'barnaba.jpg',
'type' => 'image/jpeg',
'tmp_name' => 'C:\\PROGRA~1\\EASYPH~1\\\\tmp\\phpD5C.tmp',
'error' => 0,
'size' => 2592,
),

Chyba znalazłam błąd, nie wiem dlaczego wpisuje mi 'tmp_name' => 'C:\\PROGRA~1\\EASYPH~1\\\\tmp\\phpD5C.tmp', a nie ten plik co wysyłam.
pooh
Spróbuj tak na próbę, czy ten kod pomoże i zdjęcie się skopiuje.

  1. <?php
  2. $tmp_name= $_FILES['zdjecie']['tmp_name'];
  3. $ext= substr(strrchr($_FILES['zdjecie']['name'], "."),1);
  4.  
  5. $lret= copy ($tmp_name, '/zdjecia/zdjecie_testowe.'.$ext); Ważna ta kropka na końcu nazwy.
  6. ?>
MONII28
Mam błąd copy(C:\PROGRA~1\EASYPH~1\\tmp\phpD60.tmp): failed to open stream
decha-design
A słyszeliście obaj o czymś takim jak

move_uploaded_file" title="Zobacz w manualu PHP" target="_manual
pooh
U mnie pomogło usunięcie znaku "/" przed nazwą katalogu:

  1. <?php
  2. $lret= copy ($tmp_name, 'zdjecia/zdjecie_testowe.'.$ext);
  3. ?>


I działa pod warunkiem, że katalog "zdjecia" masz w tym samym folderze co strona_docelowa, jeśli nie, to musisz tu podać ścieżkę WZGLĘDNĄ.
MONII28
Nie działa
  1. <?php
  2. $tmp_name= $_SESSION['zdjecie']['tmp_name'];
  3.        $dst_name='zdjecia/'.$id3;
  4.                $lret= move_uploaded_file($tmp_name, $dst_name);
  5. ?>
decha-design
jeb ...
  1. <?php
  2. $tmp_name= $_SESSION['zdjecie']['tmp_name'];
  3. ?>


ma być
  1. <?php
  2. $tmp_name = $_FILES['zdjecie']['tmp_name'];
  3. ?>
MONII28
Dodałam zdjęcie jako ostatnie w formularzu teraz działa jest kopiowane do folderu tylko typ pliku jest nieokreślony i się nie otwiera. Zrobiłam tak i działa , zapisuje jpg
  1. <?php
  2. $tmp_name= $_FILES['zdjecie']['tmp_name'];
  3.        $dst_name='zdjecia/'.$id3.'.jpg';
  4.                $lret= move_uploaded_file($tmp_name, $dst_name);
  5. ?>

Jeżeli chodzi o zapisanie danych z tablicy FILES do SESSION to nie działało, bo podejrzewam że plik tymczasowy zdjęcia był naprawdę tymczasowym i po przejściu przez kilka stron formularza plik już nie istniał.
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.